DBFNTX nach FOXCDX -> index CDX !?

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

Moderator: Moderatoren

Antworten
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

Guten Morgen ,

wegen Problemen mit Memo DBT versuche ich im Moment ein Programm von DBFNTX nach FOXCDX umzustellen

Irgendwie habe ich Probleme mit dem CDX index !

Datenbanken werden nur EXCLUSIVE geöffnet (Single User Anwendung)

In der Anwendung verwende ich:

index on xyz to ixyz
set index to ixyz

set order to

z.B. Alle INDEXE von ADRESSE1.DBF sollen in ADRESSE1.CDX entahlten sein !
Index on Aname , Anummer, Aplz usw

Wenn ich das richtig verstanden habe brauche ich dann nur set index to ADRESSE1.CDX zu machen und alle darin enthalten INDEXE
stehen zur Verfügung und bleiben auch bei Änderungen automatisch aktuell !?

Wenn ich einen CDX neu erstelle muß ich erst ADRESSE1.CDX löschen sonst wird die CDX immer größer !?

Es gibt im CDX INDEX keine Unterscheidung zwischen groß und klein !

Statt set order to muß ich OrdSetFocus verwenden !

Die ganze Programm Oberfläche muß ich am besten auf ANSI umstellen !


Die Datenbanken hab ich mit einem kleinen Programm jetzt umkopiert, sollte so passen:

Code: Alles auswählen

#include "foxdbe.ch"
#include "cdxdbe.ch"
#include "dmlb.ch"


procedure main()

  SET COLLATION TO GERMAN
  SET DATE TO GERMAN
  SET EPOCH TO year(date())-80
  SET CHARSET TO ANSI

  IF ! DbeLoad( "FOXDBE", .t.)
     Alert( "FOXDBE" + MSG_DBE_NOT_LOADED , {"OK"} )
  ENDIF

  IF ! DbeLoad( "CDXDBE", .t.)
     Alert( "CDXDBE" + MSG_DBE_NOT_LOADED , {"OK"} )
  ENDIF

  IF ! DbeBuild( "FOXCDX","FOXDBE","CDXDBE"  )
     Alert( "FOXCDX" + MSG_DBE_NOT_CREATED , {"OK"} )
  ENDIF

  DbeInfo( COMPONENT_ORDER, DBE_LOCKMODE         , LOCKING_EXTENDED ) // schneller lesezugriff
  DbeSetDefault("FOXCDX")


  use adresse1 VIA DBFNTX
  copy all to fox\adresse1

  use verkauf1 VIA DBFNTX
  copy all to fox\verkauf1
  
  ...

RETURN

Nach was muß ich jetzt genau wegen dem INDEX CDX im Programm CODE suchen und umstellen?

index on
set index to
set order to

Mfg Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

Muß ich damit er mir ANSI in der Datenbank anzeigt beim COMPILER einen SWITCH umstellen ?

/go ?


Also das /go verschlimmert das ganze noch ???


Mfg Klaus
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Manfred »

Hi Klaus,

der Code sollte eigentlich so bleiben können. Wenn Du Dir mal die Sache anschaust, die der Preprocessor in eine PPO schreibt, wirst Du feststellen das er eh alles umwandelt. Wenn Du aber von NTX auf CDX/FOX umsteigst, dann solltest Du ein paar Dinge beachten.

Am besten ist wenn Du mal hier im Forum nachschaust. Jan hat z.B etliches dazu geschrieben, was es zu beachten gibt. Bzw. einen Thread eröffnet, in dem etliches dazu geschrieben wurde auch von den anderen hier.
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!!
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

So irgendwie kann ich im Programm gar keine Umlaute schreiben und bei einer DBEDIT Übersicht habe ich auch keine Umlaute ???

Irgendwas mache ich doch total falsch !

Mfg Klaus
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Manfred »

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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Jan »

... nicht zu vergessen der Thread, in dem es sehr ausführlich um ANSI in dbf geht - und wo der Hinweis von Tom den Ausschlag gab das korrekt durchzuführen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

Also wenn ich im Programm selber das

set charset to ansi

entferne dann zeigt er mit die Umlaute richtig an und ich kann auch Umlaute wieder schreiben !

Ist das dann richtig so ?

Und die Datenbank FOXCDX sollte ja nach wie vor ANSI schreiben , da FOX ja nur ANSI macht oder ?

Mfg Klaus
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Jan »

Klaus,

wenn Du SET CHARSET TO ANSI im Code hast, dann werden aus dem Programm heraus erstellte dbf automatisch ANSI. Egal ob später ein SET CHARSET im Code steht oder nicht - diese dbf wird immer mit ANSI geschrieben. Da das Merkmal ANSI oder nicht im Header der dbf steht (siehe hierzu die entsprechende Diskussion im oben erwähnten Thread)

In einem Programm mit OEM-Oberfläche darf im Übrigen niemals ein SET CHARSET TO ANSI stehen! Aber sehr wohl ANSI-dbf benutzen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

In einem Programm mit OEM-Oberfläche darf im Übrigen niemals ein SET CHARSET TO ANSI stehen! Aber sehr wohl ANSI-dbf benutzen.
Genau Jan , das war das Problem !

Da mein Programm ja im Hybrid - Modus läuft mit SWITCH GUI = Yes

darf ich im Programm selber kein set charset to ANSI verwenden und kann alles so lassen wie es war !

Die FOXDBE schreibt automatisch ANSI in die Datenbank !

Ich hab jetzt erstmal alle INDEXE so gelassen , so daß er einfach INDEXE mit *.CDX erstellt hat !


Eigentlich war nur wichtig, daß ich beim ertellen der FOX Datenbanken set charset to ANSI verwendet habe. ODER ?

Mfg Klaus
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Jan »

xbaseklaus hat geschrieben:Eigentlich war nur wichtig, daß ich beim ertellen der FOX Datenbanken set charset to ANSI verwendet habe. ODER ?
ja

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

Wenn ich mir jetzt so meine DBF/DBT/NTX bzw DBF/FPT/CDX Größe nach der Umwandlung anschaue:

DBASEIII
DBF 106 MB
NTX 20 MB

FOX
DBF 105 MB
CDX 39 MB

----------------------

DBASEIII
DBF 4,04 MB
DBT 6 MB

FOX
DBF 3,95 MB
FPT 1,5 MB

Was mir hier auffällt die CDX Indexe sind erheblich größer als die NTX Indexe
und die Memo FTP Dateien sind erheblich kleiner als die DBT

Warum werden die CDX Dateien so enorm größer ?

OK die CDX wird so groß , weil die CDX im Programm mehrmals erstellt wird und CDX ja immer dranhängt was bei NTX ja nicht der Fall war ... da muß ich mir noch was einfallen lassen bzw die CDX immer vorher löschen :-(

Mfg Klaus
Zuletzt geändert von xbaseklaus am Di, 16. Feb 2016 15:22, insgesamt 1-mal geändert.
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von brandelh »

Eine Anwendung braucht OEM, wenn sie auf XbpCRT() oder Console direkt beruht. Auch bei GUI = YES ist es eine OEM Anwendung.

ANSI funktioniert nur auf XbpDialog() basierten Bildschirmen, und dann sollte auch der PRG Quellcode auf ANSI erfasst worden sein.

Die DBF selbst kann haben was sie will, das wird automatisch konvertiert.
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Jan »

Die CDX sind normalerweise kleiner als die NTXe zusammengerechnet. Weil die effektiver sind.

Die FOX-dbf sind oft kleiner, weil z. B. die Links in die Memofelder kompakter sind.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

Die CDX sind normalerweise kleiner als die NTXe zusammengerechnet. Weil die effektiver sind.
Sind sie auch . Da ich im Programm die Indexe jedoch mehrmals aufbaue hab ich natürlich im Moment das problem das CDX immer größere wird da ich diese bei NTX ja vorher nicht löschen musste. Jetzt muss ich den ganzen Code durchsuchen so ein misst. Oder ich stell die ganze Index Erstellung auf tags um und schreibe alle Indexe die zu einer DFB gehören in eine CDX was erstmal natürlich noch mehr arbeit macht :-(
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von brandelh »

eine CDX je Datei hat den Vorteil, dass die gleich heißen können, das spart viel Mühe und stellt sicher, dass wirklich alle offen sind.
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Jan »

Hubert,

genau. Egal wo ein Index neu dazugekommen ist - an allen anderen Stellen, wo die dbf geöffnet wird, brauch ich mich nicht darum zu kümmern das die auch geöffnet und damit aktualisiert wird. Einmal cdx öffnen, und alle Indizee sind automatisch mitgeführt, egal wann und wo die neu dazugekommen sind. Ein enormer Zuwachs an Datensicherheit und -konsistenz.

Und ja, im Explorer ist das Datenverzeichnis ganz wesentlich übersichtlich. Wesentlich weniger Dateien, und der Index steht immer direkt bei der dbf. Eben weil der Dateiname bis auf die Endung exakt gleich ist. Wenn man das will, es zwingt einen ja niemand dazu.

Dazu gehört aber natürlich auch, das ich bei die Indexnamen viel freier bin. Bei NTX hab ich früher den dbf-Namen vorne angestellt, damit der im Explorer irgendwo in der Nähe der dbf stand. Heute ist das vollkommen egal. Da der Index in der CDX enthalten ist, kann ich den Index nennen wie ich will.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Tom »

Jetzt muss ich den ganzen Code durchsuchen so ein misst.
Tipp: Die Gelegenheit nutzen und Servicefunktionen zentralisieren, vielleicht sogar data driven umgestalten.

Und soo viel Arbeit dürfte es auch nicht sein. Einfach den Code nach "INDEX ON", "DbCreateIndex" oder "OrdCreate" (je nach Stil) durchsuchen und in die Zeile davor jeweils ein schlichtes "FErase(<cIndexName>)" setzen. Falls mit SET DEFAULT und SET PATH gearbeitet und dies unterschiedlich verwendet wird (verteilte Daten), hier auf die Pfade achten. Und, natürlich, auf die Suffixe.
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Manfred »

ja und jetzt zu Toms Aussage mit den Servicefunktionen mein Klugscheißerrat: Oder alles in Klassen packen und dann geht alles wie von selbst...
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: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von Tom »

Geht übrigens noch einfacher: "INDEX ON" (o.ä.) per PP-Direktive auf eine andere Funktion umleiten, dort den Index löschen und neu erzeugen. Der Code, der die Ersatzfunktion enthält, darf die Direktive natürlich nicht enthalten. Oder dort wird dann statt "INDEX ON" "OrdCreate" verwendet. Oder umgekehrt.

Einfaches Beispiel (ohne Gewähr):

Code: Alles auswählen

# command INDEX ON <(cIndKey)>  TO <(cIndFile)> ;
 => MyIndexOn(<(cIndKey)>,<(cIndFile)>)

FUNCTION MyIndexOn(cKey,cFile)
FErase(cFile) // Position und Suffix prüfen!
OrdCreate(cFile,cKey)
RETURN nil
Herzlich,
Tom
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: DBFNTX nach FOXCDX -> index CDX !?

Beitrag von xbaseklaus »

Erstmal danke an alle für die Antworten.

Soweit funktioniert alles zufriedenstellend nach der Umstellung. Die Dateien sind jetzt alle kleiner als vorher. Es läuft auch alles stabil.

Eine Frage hätte ich dann doch noch . Bei einer Verwendung von FoxCdx im Netzwerk sollte ich die DBE Einstellungen noch anpassen?

Mfg Klaus
Antworten