FOXCDX Datenbank mit CDX Index Problem! [ERLEDIGT]
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
FOXCDX Datenbank mit CDX Index Problem! [ERLEDIGT]
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
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.
-
- 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!
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.
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.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- 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!
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:
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
Hubert
- Jan
- 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!
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
So ich habe jetzt folgendes geändert:
Datenbank wird 1mal geöffnet
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
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
- Manfred
- 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!
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!!
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!!
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
Hallo Manfred,Manfred hat geschrieben:ab wo ist die Reihenfolge durcheinander? Bei ordsetfocus("tdat1") ?
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
- Manfred
- 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!
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!!
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!!
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
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")
- Manfred
- 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!
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!!
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!!
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
Meinst du so:Manfred hat geschrieben:unsere Antworten habe sich wohl überschnitten. versuche es mal mit DToS(tdat1) und dann sehen wir weiter
OrdCreate( "termin1" , "tdat1" , "DToS(Termin)" )
- Manfred
- 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!
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!!
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!!
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
werden CDX Indexe durch FILTER bzw. SET RELATION beeinflusst ?
Ich meine , wenn diese beim APPEND aktiv sind ?
Ich meine , wenn diese beim APPEND aktiv sind ?
- Manfred
- 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!
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!!
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!!
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
Also mit DToS kein Unterschied
Beende ich das Programm und starte neu ohne den INDEX zu löschen -> alles Durcheinander !
Beende ich das Programm und starte neu ohne den INDEX zu löschen -> alles Durcheinander !
- Manfred
- 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!
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?
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!!
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!!
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
das Programm ist verzwickter geht so einfach nichtManfred 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?
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
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
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")
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 .... ?
- Jan
- 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!
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- 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!
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 ...
Dieses Testprogramm sollte nach jedem Aufruf die gleiche richtige Reihenfolge bringen. Beim ersten wird eventuell die CDX neu erzeugt.
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
Hubert
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
@ 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 ?
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
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 ...
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
-
- 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!
Hallo, Klaus -
ich habe Dein Problem mal "nachgestellt":
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:
Rufe ich das Programm ein weiteres Mal auf, habe ich dieses Ergebnis:
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:
Das sieht dann so aus:
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?
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.)
Code: Alles auswählen
02.01.2016
03.01.2016
05.01.2016
22.01.2016
30.01.2016
Press any key to continue...
Code: Alles auswählen
02.01.2016
03.01.2016
05.01.2016
22.01.2016
30.01.2016
Press any key to continue...
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)
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...
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Manfred
- 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!
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!!
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!!
-
- 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!
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.
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.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: FOXCDX Datenbank mit CDX Index Problem!
@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!
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!