FOXCDX Datenbank mit CDX Index Problem! [ERLEDIGT]

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

Moderator: Moderatoren

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

FOXCDX Datenbank mit CDX Index Problem! [ERLEDIGT]

Beitrag von xbaseklaus »

Einen schönen Nachmittag wünsche ich.

Nach der Umstellung von DBFNTX nach FOXCDX in einem EXCLUSIVE ON Programm

habe ich mit der Indizierung CDX einer Datenbank folgendes Problem:

use Termin
index on tdatum, tnummer, tsuch
set index to tdatum,tnummer,tsuch

wenn ich ein APPEND BLANK mache

wobei ich zwischendurch die INDEX Reihenfolge wechsle mit z.B.
...
set index to tnummer,tdatum,tsuch

bevor ich es in DBedit wieder anzeigen lasse
wechsle ich nochmal
...
set index to tdatum,tnummer,tsuch

... DBedit

wenn ich jetzt wieder im der DBedit Ansicht bin ist alles noch OK
die Reihenfolge der Termine sortiert nach tdatum passt
keine fehlen keine doppelt Reihenfolge stimmt ...

Beende ich jetzt das Programm ... wobei
ich am Schluß eigentlich noch die CDX Indexe neu aufbauen lasse !
...

und starte das Programm neu und gehe wieder in die DBedit Tabelle
dann sind alle Termine tdatum CDX volkommen durcheinander ...

Beende ich jetzt das Programm wieder ohne einen neuen APPEND BLANK in dieser Datenbank zu machen
und starte es wiederum neu dann stimmt in der DBedit Ansicht die Datums Reihenfolge mit tdatum.CDX
auf einmal wieder.

Und ehrlich gesagt verstehe ich das ganz und gar nicht , weil mit NTX hat das vorher funktioniert ???

. warum verhaut er den Index erst nach einem Neustart und nicht schon nach dem APPEND ?
warum stimmt dann wieder alles nach nochmaligem Neustart ?

die CDX Indexe sind alle einzeln angelegt wie vorher bei NTX auch

Muss ich jetzt bei CDX noch irgendwas beachten oder wie könnte ich vorgehen um den Fehler einzugrenzen ?

Mfg. Klaus
Zuletzt geändert von xbaseklaus am Di, 15. Mär 2016 10:13, insgesamt 1-mal geändert.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von georg »

Hallo, Klaus -


erst einmal ein paar Gedanken - bei CDX solltest Du nicht einzelne Dateien für jeden Index erstellen, da die .cdx-Dateien mehrere Indezdateien aufnehmen können. Öffnest Du die .cdx-Datei, sind alle Indizes geöffnet und werden auch gepflegt. Wenn Du den kontrollierenden Index ändern willst, genügt ein ordSetFocus()

In der Dokumentation solltest Du Dir CREATE INDEX (besonders das Schlüsselwort TAG), sowie ordSetFocus() anschauen.

TAG dient quasi als Identifizierer für einen Index, über diesen Namen kannst Du einen Index mittels ordSetFocus() "aktiv" setzen, d.h. beim dbSkip() folgst Du diesem Index.

Wenn Du diese Anpassungen vorgenommen hast, solltest Du Dein Programm noch einmal ausprobieren.

Auch würde ich einen Index nicht einfach "so" neu aufbauen, sondern nur dann, wenn es zwingend erforderlich ist.

Ansonsten: lieber gleich SQL einsetzen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen 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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von brandelh »

Mit CDX sollte man alle Indexdateien in eine CDX stecken, dann hat man nur noch eine Datei und IMMER alle Indexe der Datei offen.

Den aktiven Index bestimmt man NICHT mit SET INDEX ... sondern mit

OrdSetfocus( [<cTagName>|<nIndex>] ) --> cLastIndexName

das hat dbSetOrder() ersetzt, weil mit der nIndex Nummer ja immer eine Abhängikeit von der SET INDEX Reihenfolge bestand.
Mit cTagName ist man auf der sicheren Seite.

CDX-Indexe erstellt man so in eine Datei:

Code: Alles auswählen

// CDX wurde als Standard vorgegeben !
cDatei := "Kunden"

use (cDatei) ... // ohne Endung geht das so wunderbar
if *** Indexdatei fehlt oder soll neu erstellt werden ***
   // erst CDX löschen, dann neu erstellen !
   delete file (cDatei+ IndexExt())  // IndexExt() gibt die richtige Endung zurück, sollte zwar immer CDX sein aber ...
   OrdCreate( cDatei , "Name" , "NAME+VORNAME" )
   OrdCreate( cDatei , "ID"     , "ID" )
else
   
   OrdListAdd(cDatei)
endif
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Jan »

Klaus,

ich kann die Ausführungen von Georg 100% unterstützen. Ich arbeite schon seit vielen Jahren mit FOXCDX. Das Leben ist dadurch ganz wesentlich einfacher geworden. Eine cdx mit dem gleichen Namen wie die dbf macht die Verwaltung einfach und das Organisieren im Explorer auch. Nie wird ein Index vergessen mitzuführen.

Zu dem von Dir angedeutetem neu aufbauen: Es ist seit vielen Jahren feste Üebrzeugung der meisten Mitglieder dieses Forums, das man dazu kein Reindex nutzen sollte. Das vergrößert die Indexdateien und konnte zumindest früher auch zu Problemen führen. Also wirklich immer über OrdCreate() neu aufbauen, und nicht reindizieren. Wobei meine persönlichen Erfahrungen sind, das ein Index neu aufbauen bei cdx nur äußerst selten notwendig ist, die sind außerordentlich stabil.

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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

So ich habe jetzt folgendes geändert:

Datenbank wird 1mal geöffnet

Code: Alles auswählen

select 4
use termin1

if file("termin1.CDX") = .F.
	
   OrdCreate( "termin1" , "tdat1" , "termin" )
   OrdCreate( "termin1" , "terminnr" , "terminnr" )
   OrdCreate( "termin1" , "find1" , "dkundnr" )
      
endif

   OrdListAdd("termin1")

danach mache ich nur

select 4
ordsetfocus("tdat1")

...

ordsetfocus("terminnr")

...

und ein APPEND BLANK

solange ich im Programm bin ... alles OK

JEDOCH wie vorher ...
Beende ich das Programm und starte es neu ... ist in DBedit die Datumsreihenfolge wieder durcheinander

Lösche ich termin1.CDX und lasse den INDEX neu erstellen ist alles wieder OK aber nur solange bis ich ein
erneutes APPEND mache und das Programm wieder beende.
Beim nächsten Start gleiches Problem !

Keine Ahnung warum ?

Ich verwende kein INDEX ON , kein SET INDEX TO mehr !!! und trotzdem der gleiche Fehler ?

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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

ab wo ist die Reihenfolge durcheinander? Bei ordsetfocus("tdat1") ?
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Manfred hat geschrieben:ab wo ist die Reihenfolge durcheinander? Bei ordsetfocus("tdat1") ?
Hallo Manfred,

solange ich im Programm bleibe ist alles ok . wenn ich nach dem append nach dbedit zurückkehre mit rückgabewert=2 (neu einlesen und anzeigen)
ist alles OK ich kann auch das dbedit verlassen und dann es wieder aufrufen ... weiterhin alles ok !
Verlasse ich jedoch das Programm und starte das Programm neu und gehe wieder ins dbedit mit Index tdat1 dann sind alle Datums durcheinander

also so

22.1.2016
2.1.2016
3.1.2016
5.1.2016
30.1.2016


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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

alles klar, wie baust Du den Index auf das Datum auf? machst Du das mit DToS(datum) ? Es sieht nicht so aus. Quark machst Du ja nicht , wie ich oben sehe. versuche es erstmal damit.
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Code: Alles auswählen

select 4
use termin1

if file("termin1.CDX") = .F.
   
   OrdCreate( "termin1" , "tdat1" , "termin" )  -> Termin ist das Datumsfeld und tdat1 der TAG Index !!!
   OrdCreate( "termin1" , "terminnr" , "terminnr" )
   OrdCreate( "termin1" , "find1" , "dkundnr" )
      
endif

   OrdListAdd("termin1")
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

unsere Antworten habe sich wohl überschnitten. versuche es mal mit DToS(tdat1) und dann sehen wir weiter
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Manfred hat geschrieben:unsere Antworten habe sich wohl überschnitten. versuche es mal mit DToS(tdat1) und dann sehen wir weiter
Meinst du so:


OrdCreate( "termin1" , "tdat1" , "DToS(Termin)" )
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

Jepp
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

werden CDX Indexe durch FILTER bzw. SET RELATION beeinflusst ?

Ich meine , wenn diese beim APPEND aktiv sind ?
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

Relationen beziehen sich ja auf die Sohn Tabelle, wenn sich da der Keyindex ändert, ändert sich auch die Anzeige. Beim Filter muß ich jetzt raten. Ich weiß nur dass es wichtig ist jedesmal einen DbGoTop() zu machen wenn der Filter gesetzt wird. Aber innerhalb eines Filters Änderungen zu machen, erreichen immer, dass sich der Anzeigebereich ändern kann. Aber nur wenn er den Filter betrifft. Also wenn Du alle A über einen Filter anzeigen läßt und dann von A nach B änderst, wird der Satz verschwinden, sobald eine Bewegung stattfindet (spätestens dann). Ich hoffe ich habe mich jetzt nicht zu verzwirbelt ausgedrückt....
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Also mit DToS kein Unterschied :-(

Beende ich das Programm und starte neu ohne den INDEX zu löschen -> alles Durcheinander !
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

habe ich so noch nicht gesehen. Da wäre ein kleines Beispiel sicherlich hilfreich. Das wird sonst eine Stocherei im Nebel. Ich vermute (wie immer) ein blöder Denkfehler. Damit kämpfe ich auch immer wieder und dann kommt der große Aha Effekt, wenn andere, oder man selbst genauer draufschauen.
Kannst Du das mit einem 2-3 Zeiler mal probieren ob das da auch ist? Oder ist das nur ein kleines Programm jetzt?
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Manfred hat geschrieben:habe ich so noch nicht gesehen. Da wäre ein kleines Beispiel sicherlich hilfreich. Das wird sonst eine Stocherei im Nebel. Ich vermute (wie immer) ein blöder Denkfehler. Damit kämpfe ich auch immer wieder und dann kommt der große Aha Effekt, wenn andere, oder man selbst genauer draufschauen.
Kannst Du das mit einem 2-3 Zeiler mal probieren ob das da auch ist? Oder ist das nur ein kleines Programm jetzt?
das Programm ist verzwickter :-( geht so einfach nicht

fest steht auf jeden Fall:

nach einem APPEND obwohl die INDEXE ja alle AKTIV sind und ich nach DBEDIT zurückkehre ist alles OK !
schließe ich DBEDIT und mache eine andere Datenbank auf z.B. auch mit DBEDIT und wechsle wieder ZURÜCK auf die Termin Datenbank und öffne
diese wieder unter Verwendung des termin1.CDX INDEX ist auch immer noch alles OK !

Beende ich aber das Programm und gehe nach erneutem Start mit diesem termin1.CDX Index wieder in die DBedit Ansicht stimmt garnichts mehr !

Ich baue ja die DBedit Ansicht mit dem gleichen INDEX wieder neu auf, wenn ich innerhalb des Programms vorher eine andere Datenbank verwende ,
und da stimmt alles noch ... da müßte sich dann doch schon der Fehler zeigen nicht erst nach einem Neustart ?

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

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Code: Alles auswählen

select 4
use termin1

if file("termin1.CDX") = .F.
   
   OrdCreate( "termin1" , "tdat1" , "termin" )
   OrdCreate( "termin1" , "terminnr" , "terminnr" )
   OrdCreate( "termin1" , "find1" , "dkundnr" )
      
endif

   OrdListAdd("termin1")
Also irgendwie scheint das ein Datums Problem zu sein ...

Verwende ich z.B. von Termin1.CDX den Index Terminnr in der Ansicht dann passt das auch nach einem Neustart ohne dass ich den Index neu aufbauen muß.

Ich verstehe nur nicht warum der Index passt wenn ich ihn beim Start neu aufbaue, falls es da ein Problem mit dem Datum gibt .... ?
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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Jan »

Klaus,

ich bin über zwei Punkte etwas irritiert. Warum machst Du ein Select und dann ein Use? Mach einfach ein use ... new, und fertig. Dann kommst Du mit den Select-Bereichen nicht durcheinander und vergibst nocht einen versehentlich doppelt. Und warum sollte das alles nicht mit dem Index auf ein Datumsfeld laufen Ich hab sowas stapelweise, auch ohne die von Manfred erwähnte Umwandlung. Da hatte ich noch nie Probleme mit. Du hattest zwar gesagt das Du keinen Code posten kannst weil das zu komplex ist, aber ich bin mir sehr sicher, das der Fehler woanders liegen muß.

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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von brandelh »

Ich kann JAN nur zustimmen, Index auf Datumsfeld funktioniert immer, DTOS() ist nur nötig, wenn man mehrere Felder in einen Indexbegriff packen will.
Zu den Select-Bereichen, die funktionieren im Prinzip auch, wenn man ein "DOS" Programm direkt umstellt (also XbpCRT() )
erst bei MDI Anwendungen bei denen der Anwender mehrere Fenster doppelt öffnen kann ist es damit vorbei (bzw. die Probleme sind nicht mehr handle bar).
Im Beispiel zeige ich wie es bei einem GUI MDI Programm (und bei allen anderen) problemlos funktioniert.
Man speichert den Selectbereich in einer Variablen und greift mit der zu.

Im Netzwerk könnte ich mir vorstellen, dass Win 7 ff. wieder einmal die Metadaten nicht sauber darstellen.

Nimm die Datei und den Index, mach ein kleines Testprogramm ...

Code: Alles auswählen

cDatei := "termin1"
use(cDatei) NEW  // automatisch eine leere Workarea nutzen
if neterr() // immer abfragen
   Fehlermeldung ...
else
   nDB := select()
   if ! file(cDatei+".CDX") 
      // braucht das nicht EXCLUSIVE Zugang ?
      OrdCreate( "termin1" , "tdat1" , "termin" )  -> Termin ist das Datumsfeld und tdat1 der TAG Index !!!
      OrdCreate( "termin1" , "terminnr" , "terminnr" )
      OrdCreate( "termin1" , "find1" , "dkundnr" )
      OrdClearList()
   endif   
   OrdListAdd(cDatei)
   OrdSetFocus( "tdat1" )
   x := 0
   do while ! (nDB)->(eof()) .and. x < 10  // (nDB)-> ist ein direkter Zugriff auf einen Selectbereich, egal wo man aktuell ist.
       ? ... Datensätze
       x++
       (nDB)->(dbSkip())
   enddo
endif

Dieses Testprogramm sollte nach jedem Aufruf die gleiche richtige Reihenfolge bringen. Beim ersten wird eventuell die CDX neu erzeugt.
Gruß
Hubert
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

@ Hubert

Das Programm ist ein XBpCRT Programm mit Datenbanken SET EXCLUSIVE ON

Die erforderlichen INDEXE sind beim APPEND aktiv und trotzdem passt die CDX Datei nicht wenn ich
die CDX beim Start nicht neu erstelle...

d.h. er aktualisiert irgendwie nach dem APPEND die CDX nicht richtig , aber warum ?

Beim start steht folgendes das muß doch reichen oder ?

Code: Alles auswählen

#include "foxdbe.ch"
#include "cdxdbe.ch"
#include "dmlb.ch"
  
  SET COLLATION TO GERMAN
  SET DATE TO GERMAN
  SET EPOCH TO year(date())-80
  
  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 ) 

  DbeSetDefault("FOXCDX")

 SET EXCLUSIVE ON
 SET PATH TO C:\;C:\WWSOPTION  ...   
Was könnte ich denn och testen ? kann ich die CDX Dateien mit irgendeinem Tool anzeigen ?
Wäre für jede Hilfe dankbar , da ich mir da absolut keinen Reim mehr drauf machen kann !

DANKE erstmal an alle die Versucht haben mir zu helfen.

Mfg. Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von georg »

Hallo, Klaus -


ich habe Dein Problem mal "nachgestellt":

Code: Alles auswählen

#INCLUDE 'AppEvent.ch'
#INCLUDE "Xbp.ch"

FUNCTION MAIN
   SET DATE GERMAN
   SET CENTURY ON
   USE Termine ALIAS Termine NEW EXCLUSIVE
   IF !File("Termine.cdx")
      ordCreate("termine", "A1", "termin")
	  ordCreate("termine", "A2", "terminnr")
	  ordCreate("termine", "A3", "dkundnr")
	  ordListClear()
   ENDIF
   ordListAdd("Termine.cdx", "A1")
   IF Termine->(EoF())
      FillMeUp()
   ENDIF
   Termine->(dbGoTop())
   WHILE ! Termine->(EoF())
      ? Termine->termin
      Termine->(dbSkip(1))
   END
   dbCloseAll()
   WAIT
RETURN(.T.)   

FUNCTION FillMeUp()
   Termine->(dbAppend())
   Termine->(FieldPut(1, CToD("22.01.2016")))
   Termine->(FieldPut(2, 1))
   Termine->(FieldPut(3, 9))
   Termine->(dbAppend())
   Termine->(FieldPut(1, CToD("02.01.2016")))
   Termine->(FieldPut(2, 1))
   Termine->(FieldPut(3, 9))
   Termine->(dbAppend())
   Termine->(FieldPut(1, CToD("03.01.2016")))
   Termine->(FieldPut(2, 1))
   Termine->(FieldPut(3, 9))  
   Termine->(dbAppend())
   Termine->(FieldPut(1, CToD("05.01.2016")))
   Termine->(FieldPut(2, 1))
   Termine->(FieldPut(3, 9))
   Termine->(dbAppend())
   Termine->(FieldPut(1, CToD("30.01.2016")))
   Termine->(FieldPut(2, 1))
   Termine->(FieldPut(3, 9))
RETURN(.T.)

FUNCTION DbeSys
   IF !DbeLoad("FOXDBE", .T.)
   ENDIF
   IF !DbeLoad("CDXDBE", .T.)
   ENDIF
   IF !DbeBuild("FOXCDX", "FOXDBE", "CDXDBE")
   ENDIF
RETURN(.T.)
Die Datei Termine hat die drei Felder, auf die Du Dich in den OrdCreate() beziehst. Beim ersten Durchlauf ist die Datei leer, es wird die Index-Datei angelegt und die Datei mit Datensätzen gefüllt, danach werden die Datensätze ausgegeben:

Code: Alles auswählen

02.01.2016                  
03.01.2016                  
05.01.2016                  
22.01.2016                  
30.01.2016                  
Press any key to continue...
Rufe ich das Programm ein weiteres Mal auf, habe ich dieses Ergebnis:

Code: Alles auswählen

02.01.2016                  
03.01.2016                  
05.01.2016                  
22.01.2016                  
30.01.2016                  
Press any key to continue...
Schlussfolgerung: die DBE verhält sich wie erwartet. Es ist also möglich, dass andere Konstellationen in Deinem Programm Einfluss darauf nehmen, wie die Daten angezeigt werden.

Ich habe mal das Programm um ein paar Anweisungen erweitert:

Code: Alles auswählen

FUNCTION MAIN
   Local aList
   Local nI
   SET DATE GERMAN
   SET CENTURY ON
   USE Termine ALIAS Termine NEW EXCLUSIVE
   IF !File("Termine.cdx")
      ordCreate("termine", "A1", "termin")
	  ordCreate("termine", "A2", "terminnr")
	  ordCreate("termine", "A3", "dkundnr")
	  ordListClear()
   ENDIF
   ordListAdd("Termine.cdx", "A1")
   IF Termine->(EoF())
      FillMeUp()
   ENDIF
   aList := ordList()
   FOR nI := 1 TO Len(aList)
      ? aList[nI]
   NEXT
   ? Repl("-", 20)
   ? ordSetFocus()
   ? Repl("-", 20)
Das sieht dann so aus:

Code: Alles auswählen

A1                          
A2                          
A3                          
--------------------        
A1                          
--------------------        
02.01.2016                  
03.01.2016                  
05.01.2016                  
22.01.2016                  
30.01.2016                  
Press any key to continue...
Mein Verdacht ist, dass bei Dir zum Zeitpunkt des zweiten Aufrufs (warum auch immer) kein TAG aktiv ist und Du daher (meine Vermutung) die Daten in Eingangsfolge siehst?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen 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: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Manfred »

deshalb sollte er mal im Debugger an entsprechender Stelle schauen, was wie wo aktiv(offen) ist. Am besten vor dem Append und direkt danach.
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!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von georg »

Hallo, Klaus -


hat sich gerade überschnitten.

Zu Deiner anderen Frage: dbAppend() kümmert sich einen Sch...sdreck um Filter, Relation etc. Wenn dbAppend() ausgeführt wird, legt das System einen neuen Datensatz an und positioniert den Satzpointer auf diesen Satz, auch wenn dieser NICHT einer Filterbedigung entspricht (ein dbGoto() funktioniert auch, wenn der angesprochene Satz nicht im Filter liegt).

Auch die Aktualisierung der Index-Dateien ist nicht von SET FILTER oder SET RELATION TO abhängig.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

@Alle

Ok ich werde mir das mit den AKTIVEN Indexen noch mal genauer anschauen...

Was ich festgestellt habe, wenn ich die "alte" CDX Datei beim Neustart verwende wird die Ansicht im DBedit beim hin und her Springen
mit Bild auf und ab "INSTABIEL" d.h. Daten werden in der Ansicht überschrieben oder verschwinden ...

Mfg Klaus

P.S. Wenn ich die CDX Dateien beim Neustart komplett lösche und neu aufbaue funktioniert das Programm ich sage mal NORMAL!
Antworten