NTX Dateien nicht kompatibel mit denen von Clipper 5e [erl.]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

NTX Dateien nicht kompatibel mit denen von Clipper 5e [erl.]

Beitrag von Klaus Schuster »

Hallo Profis,

übergangsweise bearbeite ich Dateien sowohl mit xBase als auch mit Clipper 5e. Dabei kommt es immer wieder zu korrupten Indexdateien. Erstelle ich die gleichen Indexdateien unter Clipper und xBase zeigen bereits die Header Unterschiede. Bilder unten. Alle Versuche unter xBase NTX Dateien zu erstellen, die mit denjenigen unter Clipper 5e erstellten identisch sind, sind gescheitert. Was kann ich alles falsch machen. SET COLLATION bewirkte in allen Ausprägungen keine Änderung. Die dbeSys ist sehr einfach gehalten:

Code: Alles auswählen

PROCEDURE dbeSys()

   SET( _SET_COLLATION, COLLAT_GERMAN )
   SET DATE GERMAN

   // Engine für DBF-Dateien laden

   IF ! DbeLoad( "DBFDBE", .F.)
      MsgBox( "Database Engine DBFDBE nicht geladen", "DB-Fehler" )
   ENDIF

   IF ! DbeLoad( "NTXDBE" , .F.)
      MsgBox( "Database Engine NTXDBE nicht geladen", "DB-Fehler" )

   ENDIF

   // Engines für Datensatz- und Index-Management zusammenfügen

   IF ! DbeBuild( "DBFNTX", "DBFDBE", "NTXDBE" )
      MsgBox( "Database Engine DBFNTX nicht erzeugt", "DB-Fehler" )
   ENDIF

   DbeSetDefault( "DBFNTX" )

RETURN
Hat jemand eine lösende Idee?
Dateianhänge
xBase.jpg
xBase.jpg (64.88 KiB) 9527 mal betrachtet
Clipper.jpg
Clipper.jpg (64.83 KiB) 9527 mal betrachtet
Zuletzt geändert von Klaus Schuster am Mi, 23. Apr 2014 13:28, insgesamt 2-mal geändert.
Gruß Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von AUGE_OHR »

Klaus Schuster hat geschrieben:übergangsweise bearbeite ich Dateien sowohl mit xBase als auch mit Clipper 5e. Dabei kommt es immer wieder zu korrupten Indexdateien. Erstelle ich die gleichen Indexdateien unter Clipper und xBase zeigen bereits die Header Unterschiede. Bilder unten.
mit "5e"ist wohl v5.2e gemeint.
http://www.cs.cmu.edu/~varun/cs315p/xbase.txt
The Structure of Clipper Index files (*.ntx)

The CA-Clipper index file is a modified B+ tree. The size of a page is
1024 bytes. The first page is the header:
_______________________ _______
0 | Signature byte | ^
1 | (binary) | | *9
|-----------------------| |
2 | Indexing version no. | |
3 | (Compiler version) | |
|-----------------------| |
4 | Offset in file for | File
5 | first index page. | header
6 | (root) | |
7 | | (page 0)
|-----------------------| |
8 | Offset to an unused | | *11
9 | next key page. | |
10 | | |
11 | | |
|-----------------------| |
12 | Key size + 8 bytes | | *1
13 | | |
|-----------------------| |
14 | Key size | |
15 | | |
|-----------------------| |
16 | No. of decimals in | |
17 | key | |
|-----------------------| |
18 | Max. item | | *6
19 | | |
|-----------------------| |
20 | Half page | | *7
21 | | |
|-----------------------| |
22 | Key expression. | | *8
23 | (NULL terminated) | |
ich denke es ist die "Indexing version no.".
wenn du eine NTX mit FOPEN öffnest und die ersten Bytes mit FREAD() einliest kann du die "Indexing version no." so überprüfen

Code: Alles auswählen

    ? "Datei-ID: ", BIN2W(SUBSTR(buffer, 1, UNSIGNED))
    ? "Index-Version: ", BIN2W(SUBSTR(buffer, 3, UNSIGNED))
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von AUGE_OHR »

Klaus Schuster hat geschrieben:

Code: Alles auswählen

PROCEDURE dbeSys()
   SET( _SET_COLLATION, COLLAT_GERMAN )
   SET DATE GERMAN
Frage : hast du eine "deutsche" oder "International" Cl*pper v5.2e Version ?
verwendest du NTXGER.OBJ ?
verwendest du NTXLOCK2.OBJ ?

grundsätzlich "empfehle" ich, wenn man parallel Cl*pper v5.2e benutzt, auf Xbase++ "spezifische" Einstellungen (welche default "on" sind )
SET RUSHMORE OFF
SET SMARTFILTER OFF
SET OPTIMIZE OFF
auf "OFF" zu setzten bzw. nicht zu nutzen ( TAG in NTX )
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Hallo Jimmy,

ich habe eine deutsche Clipper 5.2e Version und setzte keine der beiden Obj-Dateien ein. Deine Empfehlung die drei Werte auf OFF zu setzen hat keinen Unterschied gebracht. Ich habe zum testen zwei kleine Programme geschrieben, die stets unterschiedliche NTX-Dateien generieren.

Code: Alles auswählen

PROCEDURE Clipper

   SET EXCLUSIVE ON

   USE artikel
   INDEX ON Upper( artikel->A_Name ) TO clipper

   CLOSE ALL

RETURN

Code: Alles auswählen

PROCEDURE Main

   SET EXCLUSIVE ON
   SET RUSHMORE OFF
   SET SMARTFILTER OFF
   SET OPTIMIZE OFF

   USE artikel
   INDEX ON Upper( artikeL->A_Name ) TO xbase

   CLOSE ALL

RETURN
Vielleicht sind die Unterschiede auch nicht relevant. Am Donnerstag habe ich eine Version der Anwendung mit SET COLLATION ASCII an einen Kunden ausgeliefert und bisher keine weitere Meldung eines korrupten Indexs erhalten.

Gruß
Gruß Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von AUGE_OHR »

hi,

du verstehst mich falsch was die OFF Schalter angeht denn das macht auf die NTX "Grösse" nichts aus.

tatsächlich hast du Recht das die NTX Dateien nicht immer gleich gross sind wenn der Ausdruck über mehr als 1 Feld geht oder eine Function wie UPPER() verwendet wird. Cl*pper verwendet da einen andern
4 | Offset in file for | File
5 | first index page. | header
6 | (root) | |
7 | | (page 0)
aber da die anderen Member die selben Werte haben "sollte" das nicht das Problem sein.
auch sehen die "Daten" bei mir im HEX Editor sonst "gleich" aus ...
also bitte nicht nur im Header suchen sondern den "Inhalt" untersuchen ob selbe Sortierung ... auch die "äöü".

wenn das alles stimmt "sollte" auch ein SEEK() die selben Ergebnisse liefern

die OFF Schalter beziehen sich auf "laufende" Programm und "könnten" sich bei gleichzeitigen Cl*pper Betrieb als "Teil des Problems" erweisen ( z.b. SET FILTER ) was dann wiederum zu "korrupten" NTX führen kann.
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Hallo Jimmy,

welche Vergleichstabelle muss ich nehmen, wenn ich NTXGER.OBJ nicht einsetze? COLLAT_ASCII oder COLLAT_GERMAN um mit der Clipper Version kompatibel zu sein?
Gruß Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von brandelh »

ich lese oben ...
SET EXCLUSIVE ON
damit kann es keine Probleme mit gemeinsamem Zugriff geben, da immer nur einer gleichzeitig die Datei öffenen kann ;-)

In der Hilfe gibt es ein Kapitel: Unterschiede zwischen Clipper 5.x und Xbase++
Bei Clipper existieren NTX???.OBJ Dateien, die die landesspezifische Sortierreihenfolge von Zeichen bestimmen.
Um in Xbase++ die gleiche Sortierung wie in Clipper einzustellen, ist mit SET COLLATION TO die landesspezifische Vergleichstabelle für Zeichen auszuwählen.
Die folgende Tabelle listet die landesspezifischen Unterschiede zwischen Clipper und Xbase++.

Code: Alles auswählen

Landesspezifische Sortierung von Zeichen 
  Sprache        Clipper Modul  Xbase++ Befehl                   
  ...
  Deutsch        NTXGER.OBJ     SET COLLATION TO GERMAN          
  System         n.v.           SET COLLATION TO SYSTEM          
  ASCII                         SET COLLATION TO ASCII 


Die Standardeinstellung für SET COLLATION wird in DBESYS.PRG vorgenommen.
Sie ist abhängig von der landesspezifischen Version von Xbase++.
Falls ein Zugriff auf Indexdateien sowohl von Clipper als auch von Xbase++ erfolgen soll, müssen im Quellcode die folgenden Programmzeilen stehen:

#ifdef __XPP__
SET COLLATION TO <country>

#endif

Ohne diese Zeilen führt ein konkurrierender Zugriff auf Indexdateien von Clipper und Xbase++ über kurz oder lang zu defekten Indexdateien.
Irgendwo steht auch noch, dass das Xbase++ Programm die Indexdateien neu erstellen soll, die Nutzung durch Clipper ist dann kein Problem.
Gruß
Hubert
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Hallo Hubert,

SET EXCLUSIVE ON

das kommt daher, dass ich langsam den Überblick verliere. Klar, dass ich das wieder heraus nehmen muss.

Den von Dir angefügten Text habe ich mehrfach gelesen. Nur liest es sich für mich so, dass die länderspezifischen Tabellen nur dann eingesetzt werden sollen, wenn eine der NTX???.Obj Datei bei Clipper gelinkt wurde. Was, wenn, wie in meinem Fall, dies nicht geschieht? Oder werden die Obj-Dateien implizit von Clipper eingebunden?
Gruß Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von AUGE_OHR »

Klaus Schuster hat geschrieben:welche Vergleichstabelle muss ich nehmen, wenn ich NTXGER.OBJ nicht einsetze? COLLAT_ASCII oder COLLAT_GERMAN um mit der Clipper Version kompatibel zu sein?
das kommt ja auch deine Cl*pper Version an !
gib mal :

Code: Alles auswählen

MYclipperAPP.EXE //INFO
ein was er sagt. bei einer internationale Version ohne zusätzliches Cl*pper OBJ ist es in Xbase++ COLLAT_SYSTEM.
ob die Sortierung Probleme macht kannst du doch leicht prüfen ... es geht im Prinzip ja nur um die Umlaute.

Frage : Erstellst du die Indexe mit Cl*pper oder Xbase++ ? öffnest du jedes mal JEDEN Index zu einer DBF ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von brandelh »

Hi,

ich habe oben mal ein CODE tag gesetzt, damit das klarer rauskommt und hier auch nochmal:

Code: Alles auswählen

Landesspezifische Sortierung von Zeichen
  Sprache        Clipper Modul  Xbase++ Befehl                   
  ...
  Deutsch        NTXGER.OBJ     SET COLLATION TO GERMAN         
  System         n.v.           SET COLLATION TO SYSTEM         
  ASCII                         SET COLLATION TO ASCII 
laut dieser Tabelle gab es KEIN SYSTEM unter Clipper. Wenn ich mich nicht täusche ist standardmäßig immer ASCII aktiv,
da dies für die Amerikaner (wer hat den PC erfunden ;-) ) wunderbar passt.
Prüfen kann man es aber auch leicht, wenn "Müller" bei "Muller" einsortiert ist, dürfte NTXGER aktiv sein, wobei es aber auch noch eine DIN Sortierung gab (NTXGER2.OBJ ? )
Bei ASCII würde ein Umlaut weit hinter z einsortiert werden.

PS: SET COLLATION TO SYSTEM nach meiner Erinnerung nutzt diese Einstellung die Vorgabe von Windows ... das gab es unter Clipper nicht ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von AUGE_OHR »

hi,

hm ... COLLAT_SYSTEM = 0 während COLLAT_BRITISH / COLLAT_AMERICAN = 2
... ich müsste mal überprüfen was das chinesische Cl*pper EXE, welches mit einer US-Cl*pper Version erstellt wurden, bei //INFO ausgibt
Klaus Schuster hat geschrieben:welche Vergleichstabelle muss ich nehmen, wenn ich NTXGER.OBJ nicht einsetze? COLLAT_ASCII oder COLLAT_GERMAN um mit der Clipper Version kompatibel zu sein?
wenn das Cl*pper EXE mit NTXGER.OBJ erstellt wurde und mit //INFO
Clipper (R) 5.2e Intl. (Rev. 216) GERMAN - GERMAN DBFNTX Collation
ausgegeben wird MUSS man

Code: Alles auswählen

  SET COLLATION TO GERMAN
  SET DATE TO GERMAN
verwenden wie es in der original DBESYS.PRG steht.
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Guten Morgen Leute,

@Jimmy: //INFO gibt exakt die Zeile zurück, die Du anführst; jedoch ohne dass ich NTXGER.OBJ verwende.
@Jimmy: Erstellt werden die Indexe unter Clipper.
@Hubert: Müller steht zwischen Muzzo und Mydeen

Es deutet also alles darauf, dass SET COLLATION TO GERMAN die richtige Wahl ist.

Herzlichen Dank
Gruß Klaus
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: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Tom »

Äh. Du verwendest einen Alias im Index, was ich nicht für sehr sinnvoll halte, denn der Index wird ganz automatisch eine Korruption erzeugen, wenn die Tabelle nicht exakt mit diesem Alias verwendet wird.
Herzlich,
Tom
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Tom hat geschrieben:Äh. Du verwendest einen Alias im Index, was ich nicht für sehr sinnvoll halte, denn der Index wird ganz automatisch eine Korruption erzeugen, wenn die Tabelle nicht exakt mit diesem Alias verwendet wird.
Tom Du hast recht; da die Tabellen jedoch bei mehrfacher Nutzung stets in verschiedenen Threads unter dem gleichen Alias geöffnet werden, hat dies bisher nicht zu Problemen geführt. Die Absicht dahinter ist, eindeutige Referenzen zu haben. Siehst Du weitere Nachteile damit?
Gruß Klaus
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: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Tom »

Hallo, Klaus.

Ich weiß nicht, welche Servicewerkzeuge Ihr verwendet, aber damit könnte es Probleme geben. Meine Erinnerungen an Clipper verblassen auch langsam. Gab es da nicht Begrenzungen bei den Aliaslängen? Die ADSDBE hat(te) eine Längenbegrenzung auf 10 Zeichen. Ich halte es grundsätzlich für problematisch, einer Tabelle, die ja applikationsunabhängig ist, mit applikationsabhängigen Daten auszustatten, etwa durch solche Verweise im Index, verstehe aber auch Deinen Ansatz. Wenn sauber programmiert wird, sollte das ja auch funktionieren. Du verhinderst damit allerdings, dass die Tabelle mit Index gleichzeitig mehrfach im Thread geöffnet werden kann, da der Alias im Index festgelegt ist.
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: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Manfred »

Hi,

die Angabe eine Alias dienst wohl auch dazu, dass der Compiler bei entsprechenden Parametern nicht meckert. Ich meine aber irgendwo gelesen oder gehört zu haben, dass man in diesen Fällen FIELD-> davor schreibt um das dann zu verhindern. Und das passt dann immer.
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: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Jan »

Manfred,

ich kann mich nicht erinnern das ein fehlender Alias im Indexschlüssel eine Kompilerwarnung erzeugt hat. Anderswo natürlich (wenn man das einstellt), aber nicht im Indexschlüssel.

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: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Manfred »

dann probier es doch mal aus um Deinem Gedächtnis ein wenig auf die Sprünge zu helfen... :lol:
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
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Danke Tom,
Tom hat geschrieben: Ich weiß nicht, welche Servicewerkzeuge Ihr verwendet, aber damit könnte es Probleme geben.
BRO mit Indexdateien, und DBF Viewer 2000 ohne Indexdatei. Bis dato keine Probleme.
Tom hat geschrieben: Meine Erinnerungen an Clipper verblassen auch langsam. Gab es da nicht Begrenzungen bei den Aliaslängen?
Da ich strikt den Dateinamen als Alias verwende, funktioniert dies gut. Vage erinnere ich mich auch an zehn mögliche Zeichen (habe aber dazu in der Clipper-Dokumentation auf die Schnelle nichts gefunden).
Tom hat geschrieben: Ich halte es grundsätzlich für problematisch, einer Tabelle, die ja applikationsunabhängig ist, mit applikationsabhängigen Daten auszustatten, etwa durch solche Verweise im Index, verstehe aber auch Deinen Ansatz. Wenn sauber programmiert wird, sollte das ja auch funktionieren. Du verhinderst damit allerdings, dass die Tabelle mit Index gleichzeitig mehrfach im Thread geöffnet werden kann, da der Alias im Index festgelegt ist.
Saubere Programmierung ist mir wichtiger. Die Definition der Tabellen und Indexe ist in einer einzigen Datei hinterlegt, auf die alle Anwendungen zugreifen. Damit erledigt sich auch der Punkt, dass alle Indexe in immer der selben Reihenfolge geöffnet werden sollen.
Gruß Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von brandelh »

Sorry, aber der ALIAS hat im Indexbegriff nichts zu suchen !
Wenn die Werte "zufällig" passen kann es gut gehen, aber es bleibt eine große Falle für spätere Änderungen.
Die DBF wird geöffnet und erhält einen ALIAS, dann wird die passende NTX geöffnet.
Alle Indexzugriffe werden automatisch auf die richtige Tabelle geschickt.

Wenn man die Warnungen ausblenden will, kann man FIELDS setzen (SET FILTER TO) ... richtig wäre INDEX ON ... oder man gibt beide Parameter an:

OrdCreate( "KUNDA", "K_Nummer", "KUNDNR", {|| field->KUNDNR } )
Gruß
Hubert
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Hallo Hubert,
brandelh hat geschrieben:Sorry, aber der ALIAS hat im Indexbegriff nichts zu suchen !

eine klare Ansage! Deine, und Toms Argumente haben mich überzeugt.

(SET FILTER TO) verstehe ich in diesem Zusammenhang nicht. Könntest Du das bitte erklären?
Gruß Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von brandelh »

eine dämliche Verwechslung meinerseits, es muss heißen "INDEX ON ...", wenn man da die Feldnamen einträgt, und Warnungen eingeschaltet hat,
meckert der Compiler über undeklarierte Variablen, die tatsächlich Felder sind. So geht es ohne Warnung:

Code: Alles auswählen

FIELDS NachName, VorName
...
INDEX ON upper(NachName+Vorname) TO ...
oder moderner

Code: Alles auswählen

OrdCreate( cIndexFile, cTagName, "upper(NachName+Vorname)", {|| upper(field->NachName+field->Vorname) } )
so kann man z.B. auch eine Verlaufsanzeige einbauen, die NICHT im späteren Index auftaucht !

Code: Alles auswählen

OrdCreate( cIndexFile, cTagName, "upper(NachName+Vorname)", {|| MeineAnzeigeFunktion(recno()), upper(field->NachName+field->Vorname) } )
MeineAnzeigeFunktion(recno()) könnte dann z.B. einen Laufbalken neu zeichnen, wenn z.B. die Prozentzahl einen neuen Wert ergibt.
Die Funktion selbst kommt nie in den Index, im Gegensatz zu Konstruktionen die früher über INDEX ON angegeben wurden.
Im Index selbst wird nur die IndexRegel "upper(NachName+Vorname)" hinterlegt und die Werte aus "upper(field->NachName+field->Vorname)" - als letztem Rückgabewert des CodeBlocks -einmalig beim Aufbau genutzt.
Gruß
Hubert
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: NTX Dateien nicht kompatibel mit denen von Clipper 5e

Beitrag von Klaus Schuster »

Hallo Hubert,

herzlichen Dank für die Infos, und allen anderen die sich an diesem Thread beteiligt haben auch!
Gruß Klaus
Antworten