ADS Indexerzeugung [Erledigt]

Advantage Database Server

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

ADS Indexerzeugung [Erledigt]

Beitrag von Jan »

Hallo,

wenn eine Mitarbeiterin das Hauptprogramm in der Testumgebung startet, dann bekommt sie regelmäßig die Fehlermeldung, das bei der Indexerzeugung der Dateiname zu lang sei. Das Problem mit zu langen Aliassen kenne ich ja., Aber hier ist es so, das die Index-Datei und die Tags existieren. Der will die also ohne Grund neu erstellen, und hängt dann wegen Namensgleichheit eine Nummerierung an.
IndexAGS.jpg
IndexAGS.jpg (44.36 KiB) 9132 mal betrachtet
Die Fehlermeldung lautet:
Fehler Base/0
Beschriebung: D
Thread ID: 1
Error 5050: The name given was too long
Parameter 3
Der Code, der moniert wird, lautet:

Code: Alles auswählen

                         OrdCreate(cDbf + ".cdx", ;
                                   aIndexSchluessel[i][2], ;
                                   aIndexSchluessel[i][1] , ;
                                   {|| Indexfortschritt(@oFortschritt, oStatic, aIndexSchluessel[i]), &(aIndexSchluessel[i][1])}, ;
                                   IIf(Len(aIndexSchluessel[i]) > 2, ;                             // Wenn es einen 3. Eintrag im Array gibt: Unique
                                       aIndexSchluessel[i][3], ;
                                       .F.), ;
                                   .T.)
wobei aIndexSchlüssel so aussieht:

Code: Alles auswählen

          {{"fakt", "mitafakt"}, ;
           {"nr"  , "mitanr"  }, ;
           {"name", "mitaname"}}, ;
Genau diese betroffene dbf wird vorher in der Anmeldeprozedur bereits geöffnet, hier aber nur mit dem dritten Index. Da geht der ohne Probleme durch. Wobei - vielleicht auch nicht. Denn der Index MITANAME ist ja offensichtlich 2x zusätzlich erstellt worden. Also eventuell 1x in der Anmeldung, und 1x beim eigentlichen Programmstart.

Nach der oben zitierten Fehlermeldung kommt eine weitere:
Fehler BASE/5
Beschreibung: Interne Datenstrukturen beschädigt
Operation: dllExecuteCall
Thread ID: 1
Error 5050: The name given was too long
Parameter 3
Wenn ich das starte (wobei ich natürlich die gesamte Entwicklungsumgebung in den Pfaden habe, was aber nicht zum Tragen kommen sollte, da ja die dll etc. direkt im Programmverzeichnis liegen), dann läuft das ohne Fehlermeldung durch. Erstellt aber ebenfalls diesen einen Index neu. Nur bei der Anmeldung, im eigentlichen Programmstart nicht. Ich habe den kompletten Index gelöscht, der wird dann beim Neustart wieder aufgebaut. Was beim ersten Durchlauf sauber klappt, beim 2. erzeugt er mir wieder bei der Anmeldung den mitananme_4 neu. Gehe ich ganz langsam im Debugger Schritt für Schritt durch, wird der Index nicht neu erstellt!

Ich steh beim ADS mal wieder vor einem Rätsel ... Von wegen, einfach einbinden und alles ist easy ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Martin Altmann »

Sorry - aber ist da ein Leerzeichen nach der 70 im Pfad?
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

Hallo Martin,

ja, ist es. Ist aber noch nie ein Problem gewesen bislang.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: ADS Indexerzeugung

Beitrag von Manfred »

höhö,

das Leerzeichen z.B. macht der VX auch Probleme. Nur mal so zur Info.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von UliTs »

Funktioniert es denn ohne Leerzeichen?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von brandelh »

Leerzeichen sind in Pfaden erlaubt. Im Quellcode muss man es in einer Variablen übergeben, in CMD Dateien in " einschließen, dann geht das.
Warum sollte die ADS einen gültigen Pfad als Fehler interpretieren ?
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von UliTs »

brandelh hat geschrieben:Leerzeichen sind in Pfaden erlaubt. Im Quellcode muss man es in einer Variablen übergeben, in CMD Dateien in " einschließen, dann geht das.
Warum sollte die ADS einen gültigen Pfad als Fehler interpretieren ?
Wie kommst Du auf die Idee, das es der ADS ist, der das Problem macht?
Vermutlich ist es die ADSDBE von Alaska, die damit nicht klarkommt.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von brandelh »

Gar nicht, für mich gibt es da keinen Unterschied :badgrin: ;-)

Was ich meinte ist, dass weder die DBE von Alaska noch der ADS als solcher ein Problem mit einem Blank im Pfadnamen haben dürfte,
da Pfade mit enthaltenen Blanks seit vielen Windows Versionen erlaubt sind ... oder war das sogar unter DOS schon so ?

Und wenn Sie einen hätten, dann müsste die Fehlermeldung irgendwas mit "nicht vorhanden" sein ...
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von UliTs »

Also dürfte Jan auch kein Problem haben :lol: :D .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Tom »

Kann es nicht sein, dass das Problem schlicht darin liegt, dass Du mit einem Data Dictionary arbeitest und Dich zugleich in Deiner Applikation um derlei kümmerst? Ich verwende das DD nicht, verstehe es aber so, dass es dafür sorgt, dass der ADS selbst dazu in der Lage ist, Tabellenstrukturen und Indexe zu verwalten und für die Integrität zu sorgen. Damit wären nach meinem Verständnis hartcodierte Indexerzeugungen schlicht überflüssig, weil der ADS im Moment des Zugriffs selbst prüft, ob alles in Ordnung ist. Parallel erzeugst Du nun Indexe mit den entsprechenden Namen, also eine redundante Konkurrenz, während der ADS mit der gleichen Aufgabe beschäftigt ist. Wenn ich eine Tabelle zweimal ohne expliziten Alias öffne, erhalte ich ja auch einen Alias, der nicht mehr dem Tabellennamen entspricht, sondern um "_1", "_2" usw. ergänzt ist. Ich vermute hier eine ähnliche Situation. Ein Index soll erzeugt werden, aber das geht nicht, also wird einfach weitergezählt.

Warum verwendest Du das DD noch gleich?
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

Hallo Tom,

interessanter Denkansatz.

Ich habe schon vorher heute mal das manuelle Öffnen der cdx aus meinem Code rausgenommen, das funktioniert noch immer alles. Was für Deine Vermutung spricht, daß das DD die cdx automatisch mit öffnet, und anscheinend die ADSDBE das so registriert (ich kann ja hinterher, obwohl ich selber keinen Index geöffnet habe, den dennoch ansprechen).

Die Tatsache bleibt aber bestehen, das ein neuer Index erzeugt wird. Obwohl ich keinen Index erstelle, und keinen Index öffne. Im Debugger kann ich verfolgen, das alle diese Schritte sauber übersprungen werden. Dennoch ist der MITANAME_4 immer da nach einem erneuten Programmaufruf.

Was ich noch nicht nachvollziehen kann ist, das obwohl ich wie oben beschrieben den Index nicht neu erstelle, sondern nur auslese ob der existiert, um den dann falls nötig neu zu erstellen, der immer versucht genau den oder die Indizee zu erstellen, die ich abfrage. Als ob die Frage, ob der existiert, schon eine Erstellung auslösen würde. Problem: Wenn ich das im Debugger ganz langsam Schritt für Schritt durchgehe, dann wird der Zusatzindex nicht erstellt!

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von brandelh »

Jan hat geschrieben:Was für Deine Vermutung spricht, daß das DD die cdx automatisch mit öffnet, und anscheinend die ADSDBE das so registriert (ich kann ja hinterher, obwohl ich selber keinen Index geöffnet habe, den dennoch ansprechen).
das ist doch der tiefere Sinn eines solchen Datenservers, er kennt die Stukturen und kümmert sich um die interne Verwaltung selbständig.
Dass der ADS SERVER es auch anders zulässt ist eine zusätzliche Möglichkeit.
Jan hat geschrieben:Als ob die Frage, ob der existiert, schon eine Erstellung auslösen würde.
Auch das ist logisch, ich prüfe bei mir vor jedem Öffnen eines Fensters, ob alle nötigen DBF und Indexdateien da sind,
wenn nicht werden die erzeugt.
Der ADS muss sicherstellen, dass die nötigen Indexe da sind und somit wäre es doch ideal beim ersten Anfragen einen fehlenden zu erstellen.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

Hubert,

aber wenn der Index, der angefragt wird, doch schon existiert. Dann darf der ADS den doch nicht einfach so erstellen. Vor Allem weil der ja merkt, das der schon existiert, und daher die Nummerierung anhängt. Der ADS weiß also, das der Index da ist, und macht ihn trotzdem neu auf.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: ADS Indexerzeugung

Beitrag von Manfred »

Ist denn jetzt das DD erforderlich wenn man erstmal sanft umsteigen möchte und den ADS dafür benutzt die DBF und CDX zu verwalten? Das habe ich immer noch nicht verstanden.

@Tom

Du machst das doch alles ohne DD.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Tom »

@Manfred: Ja, ich mache das ohne DD. Ich verwende den ADS faktisch als erweiterte Engine. Dadurch verzichte ich möglicherweise auf einige Funktionalitäten, aber der Code für beide Varianten (mit/ohne ADS) ist praktisch derselbe, von einigen Optimierungen abgesehen.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: ADS Indexerzeugung

Beitrag von Manfred »

In dem Zustand ist dann der Mischbetrieb erlaubt, aber nicht die Sicherheit des Fremdzugriffes auf die Daten gegeben!? Eben durch den Mischbetrieb von ADS und eines normalen Xbase Programms. Oder sehe ich das jetzt auch falsch?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

Ich kann jetzt im Detail nicht mehr sagen, warum wir vor über einem Jahr uns für Zugriff über das DD entschieden haben. Wichtig für meinen Kunden ist, das man später alle Optionen für weitere Funktionalitäten offen hat, und das niemand anders als über die Firmenprogramme und den ARC auf die dbf zugreifen kann. Ob das auch ohne DD ginge kann ich aus dem Stehgreif nicht (mehr) sagen. Aber zumindest der erste Punkt wohl eher nicht. Wobei der zweite eindeutig der wichtigere ist für den Kunden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

Um auf das eigentliche Thema zurück zu kommen: Wir benutzen das DD. Das einen Teil der Verwaltung abnimmt. Und es ist so, das ich alle Indizee neu erstellen muß, nachdem die dbf in das DD übernommen wurden. Bestehende cdx kann ich nicht verwenden! Mit der Inkompatibilität kann ich leben, da ja ohnehin ein ausschließlicher Zugriff über den ADS stattfinden soll. Also kein Parallelbetrieb ADS-Sonstige Zugriffe.

Aber: Es muß doch erlaubt sein nachzusehen, ob ein Index oder ein Tag bereits besteht. Ohne daß das vom ADS gleich als Aufforderung verstanden wird, den Index/Tag gleich neu zu erzeugen. Wenn also später mal ein neuer Index dazu kommen sollte, dann muß ich ja auch erstmal abfragen,. ob der schon da ist. Und nur dann, wenn der noch fehlt, den aufbauen.

Oder mißverstehe ich da irgendwas?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von UliTs »

Jan hat geschrieben:Um auf das eigentliche Thema zurück zu kommen: Wir benutzen das DD. Das einen Teil der Verwaltung abnimmt. Und es ist so, das ich alle Indizee neu erstellen muß, nachdem die dbf in das DD übernommen wurden. Bestehende cdx kann ich nicht verwenden! Mit der Inkompatibilität kann ich leben, da ja ohnehin ein ausschließlicher Zugriff über den ADS stattfinden soll. Also kein Parallelbetrieb ADS-Sonstige Zugriffe.

Aber: Es muß doch erlaubt sein nachzusehen, ob ein Index oder ein Tag bereits besteht. Ohne daß das vom ADS gleich als Aufforderung verstanden wird, den Index/Tag gleich neu zu erzeugen. Wenn also später mal ein neuer Index dazu kommen sollte, dann muß ich ja auch erstmal abfragen,. ob der schon da ist. Und nur dann, wenn der noch fehlt, den aufbauen.
Oder mißverstehe ich da irgendwas?
Jan
Du verstehst das meines Erachtens richtig, außer dass du den Fehler im ADS suchst! Ich bin mir fast sicher, dass der Fehler in der ADSDBE ist, die so etwas nicht kann bzw. fehlerhaft umsetzt. Der ADS legt garantiert keinen neuen Index ohne Aufforderung an. Ist denn der Index anschließend zusätzlich im DD enthalten?

Was sagt denn Alaska dazu?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von brandelh »

JA,

mit dem ADS kenn ich mich ja nicht aus, aber wenn der ADS SERVER sich um seine Dateien kümmert, dann hat dein Programm nur zu öffnen, lesen und zu suchen.
Ähnlich wie beim SQL Server muss der Rest intern ablaufen, dafür hat man doch ein DataDictonary !

In dem Modus wo der ADS TREIBER benutzt wird sind ja alle EXE für die DBF Zugriffe zuständig, wie bei DBFNTX etc. auch.
Genau der Modus muss verhindert werden, wie also fragst du nach Indexen ?
Wenn es möglich ist beides zu mischen, kann es schon sein, dass der ADS SERVER dafür neue Indexe anlegt, dann müsste es aber auch Zugriffe geben die das eben nicht machen.

Was sagt das Handbuch zum SERVER Betrieb ?
Eventuell muss das auch deren Support beantworten, wenn selbst TOM das anders macht ;-)

Solche Fragestellungen sind genau der Grund warum ich SQL über eine neue klare eindeutige Objekt-Schnittstelle bevorzuge.
Bei SQLexpress weiß man dass er den ODBC Treiber benutzt und sonst nix. Mit der API geht man über die API ... keine zweideutigen Sachen :D
Du verstehst das meines Erachtens richtig, außer dass du den Fehler im ADS suchst! Ich bin mir fast sicher, dass der Fehler in der ADSDBE
da ist was dran, KANN man denn den ADS SERVER auch OHNE ADSDBE betreiben ?
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von UliTs »

brandelh hat geschrieben:...
Du verstehst das meines Erachtens richtig, außer dass du den Fehler im ADS suchst! Ich bin mir fast sicher, dass der Fehler in der ADSDBE
da ist was dran, KANN man denn den ADS SERVER auch OHNE ADSDBE betreiben ?
Natürlich :D .
So gibt es Klassen von DataSoft (Stelzner) oder Tobax (Goeder). Dies hat aber den "Nachteil", dass man dann nicht mehr mit Select-Bereichen und Befehlen wie DbUseArea() arbeiten kann. Dafür hat man dann vollen Zugriff auf die Möglichkeiten des ADS.
Alternativ könnte man auch die ADSDBE benutzen und nur für das DataDictionary betreffende Befehle/Änderungen auf die Klassen von DataSoft oder Tobax zugreifen.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Tom »

Hallo, Jan.

In der Doku zum Data Dictionary - http://devzone.advantagedatabase.com/dz ... ionary.htm - finde ich zwei Bereiche, die das auslösen würden, was ich weiter oben vermutet habe. Du müsstest prüfen, ob Du a) versehentlich sog. "Non-Auto-Open Index"-Eigenschaften vergeben hast und ob es b) die "auto-creation property" (weiter unten im Dokument) irgendwo gibt. Beides könnte zum vorgefundenen Verhalten führen, würde ich behaupten.
Herzlich,
Tom
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von UliTs »

Jan hat geschrieben:...
1)
Alle Indizee und Tags wurden sauber erstellt, aber bei zwei dbf gab es die bekannte Fehlermeldung, die ich mit "Ignorieren" übergangen bin.

...

2) Ich hab dann mal testweise auf dem Rechner der Mitarbeiterin alle Fehlermeldungen mit "Ignorieren" beantwortet. Das Programm läuft dann weiter, öffnet weitere dbf bzw. Indizee. Und erstellt auch weitere durchnummerierte Indizee. Was mich dabei überrascht ist, das bei Weitem nicht bei jedem Index oder Tag ein neuer erstellt wird!

...
Zu 1) Es kommt eine Fehlermeldung beim Erstellen eines Index, richtig?

Zu 2)
Du schreibst, es werden weitere Indizees erstellt. Was machst Du genau?
a) Du öffnest die Tabelle
b) Du schaust nach, ob alle Indizees vorhanden sind
c) Wenn nein, erstellst Du die Indizees mit Hilfe OrdCreate() ?

Und das Prüfen ob ein Index nicht vorhanden ist, funktioniert bei der Mitarbeiterin nicht?
Wie lautet der Quellcode zur Prüfung?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

So, gerade habe ich mal wieder ein wenig testen können.

Ersteinmal habe ich sicher gestellt, das der Fehler immer noch da ist (die Admins haben heute was an den Servern umkonfiguriert, ich wollte sicher gehen, daß das nicht schon den Fehler behoben hat).

Dann habe ich das Programm von meinem Arbeitsplatz aus gestartet. Es wird kein zusätzlicher Index aufgebaut. Wobei ich hier auch mit Admin-Rechten arbeite, ich habe also auch vollen Zugriff auf alle Dateien und Verzeichnisse auf dem ADS-Server.

Also mal das komplette DD gelöscht, alle *.cdx gelöscht. DD neu erstellt. Alle dbf in das DD eingetragen. Das Programm auf dem Rechner der Mitarbeiterin gestartet. Alle Indizee und Tags wurden sauber erstellt, aber bei zwei dbf gab es die bekannte Fehlermeldung, die ich mit "Ignorieren" übergangen bin. Ein erneuter Aufruf brachte dann wieder die bekannte Meldung. Es liegt also nicht daran, das die Indizee mit einem anderen Recht erstellt wurden als der Mitarbeiter hat, der jetzt darauf zugreifen will.

Starte ich das Programm wieder auf meinem Rechner mit meinen Rechten, werden keine neuen Indizee erstellt.

Eine Einstellung zum Auto-Erstellen der Indizee finde ich nirgends. Es gibt nur eine zum Autoerstellen der dbf, das ist aber nicht angehakt.

Ich hab dann mal testweise auf dem Rechner der Mitarbeiterin alle Fehlermeldungen mit "Ignorieren" beantwortet. Das Programm läuft dann weiter, öffnet weitere dbf bzw. Indizee. Und erstellt auch weitere durchnummerierte Indizee. Was mich dabei überrascht ist, das bei Weitem nicht bei jedem Index oder Tag ein neuer erstellt wird! Manchmal gibt es mehrere Tags, und nur ein oder zwei davon werden neu erstellt. Ich hatte sogar zwei dbf, wo die Fehlermeldung kam, und dennoch kein Tag neu erstellt wurde! Da läßt sich erst einmal keine Gemeinsamkeit feststellen. Monierte Tags sind numerische oder string-Indizee. Mit und ohne Funktionsaufrufe darin (wobei Funktionsaufrufe reine Xbase++-Funktionen beinhaltet wie Datumsumwandlungen, Upper(), etc.).

Irritierend ist auch, das die neuen Tags zwar den Namen des vorhandenen Tags erhalten, aber eine relativ hohe Nummer angehängt bekommen. Es wird nicht bei _1 angefangen, sondern anscheinend bei der Anzahl der vorhandenen Tags + 1. Und alle Tags, die in einem Index neu erstellt werden, erhalten fortlaufende Ziffern

So bin ich auch weiterhin ratlos ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: ADS Indexerzeugung

Beitrag von Jan »

Uli,

1) Ja. Ich kann ja den Tag hinterher im DD sehen.

2) Ja

Code: Alles auswählen

      aTagsVorhanden := OrdList()                                                               // Alle vorhandenen Tags auslesen

      IF Len(aIndexSchluessel) > 0
         FOR i := 1 TO Len(aIndexSchluessel)
             IF AScan(aTagsVorhanden, Upper(aIndexschluessel[i][2])) == 0
                lAlleIndizeeVorhanden := .F.
             ENDIF
         NEXT
      ENDIF
...
   IF lAlleIndizeeVorhanden == .F.
...
                         OrdCreate(cDbf + ".cdx", ;
                                   aIndexSchluessel[i][2], ;
                                   aIndexSchluessel[i][1] , ;
                                   {|| Indexfortschritt(@oFortschritt, oStatic, aIndexSchluessel[i]), &(aIndexSchluessel[i][1])}, ;
                                   IIf(Len(aIndexSchluessel[i]) > 2, ;                             // Wenn es einen 3. Eintrag im Array gibt: Unique
                                       aIndexSchluessel[i][3], ;
                                       .F.), ;
                                   .T.)
In aIndexSchluessel stehen alle zu öffnenden Tags drin.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten