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

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von xbaseklaus »

Also habe jetzt das Problem gefunden es ist diese PROCEDURE die die Eindeutigkeit von zugewiesenen Nummern am Beginn überprüft !

Lasse ich das nämlich weg dann passt der NDEX auch nach einem APPEND und nach dem Neustart des Programms ohne Neuaufbau !!!

Code: Alles auswählen


procedure nrpruef
#define CRLF chr(13)+chr(10)    
local csv

nrsend:=0

tx1:="Die Richtigkeit der Datenbank-Nummern wird berprft - Bitte warten !"

tmitte:=round((dzeile/2)-(len(tx1)/2),0)

do f1 with "3"

clear

@10,tmitte say tx1


csv:="Die APPEND DBFnummern werden getestet"+CRLF
?
?
? "Kundendatenbank berprfen"
csv:=csv+"Kundendatenbank testing"+CRLF

select 1
use adresse1 EXCLUSIVE
pack
al1:=0
index on kundnr to al1nr
set index to al1nr
go bottom
al1=val(kundnr)
if (al1+2) = anzahl1->kundnr
? "neue Kundennummer OK!"
csv:=csv+"neue Kundennummer OK!"+CRLF

else
nrsend:=1
? "Kundennummer "+str(al1)+ " wird ersetzt da defekt !"
csv:=csv+"Kundennummer "+str(al1)+ " wird ersetzt da defekt !"+CRLF

replace anzahl1->kundnr with (al1+2)
endif
close adresse1

*------H„ndlernummer

? "H„ndlerdatenbank berprfen"
csv:=csv+"Haendlerdatenbank testing"+CRLF

select 1
use adresse2 EXCLUSIVE
pack
al1:=0
index on kundnr to al2nr
set index to al2nr
go bottom
al1=val(kundnr)
if (al1+2) = anzahl1->hkundnr
? "neue H„ndlernummer OK!"
csv:=csv+"neue Haendlernummer OK!"+CRLF

else
nrsend:=1
? "H„ndlernummer "+str(al1)+" wird ersetzt da defekt !"
csv:=csv+"Haendlernummer "+str(al1)+" wird ersetzt da defekt !"+CRLF

replace anzahl1->hkundnr with (al1+2)
endif
close adresse2

*--------Lagernummer
? "Lagerdatenbank berprfen"
csv:=csv+"Lagerdatenbank testing"+CRLF

select 3
use lager1 EXCLUSIVE
pack
al1:=0
index on lagernr to al3nr
set index to al3nr
go bottom
al1=val(lagernr)
if (al1+2) = anzahl1->lagernr
? "neue Lagernummer OK!"
csv:=csv+"neue Lagernummer OK!"+CRLF

else
nrsend:=1
? "Lagernummer "+str(al1)+" wird ersetzt da defekt !"
csv:=csv+"Lagernummer "+str(al1)+" wird ersetzt da defekt !"+CRLF

replace anzahl1->lagernr with (al1+2)
endif
close lager1


*-------Terminnr
? "Termindatenbank berprfen"
csv:=csv+"Termindatenbank testing"+CRLF

select 4
use termin1 EXCLUSIVE
pack
al1:=0
index on terminnr to al4nr
set index to al4nr
go bottom
al1=val(terminnr)
if (al1+2) = anzahl1->terminnr
? "neue Terminnummer OK!"
csv:=csv+"neue Terminnummer OK!"+CRLF

else
nrsend:=1
? "Terminnummer "+str(al1)+" wird ersetzt da defekt !"
csv:=csv+"Terminnummer "+str(al1)+" wird ersetzt da defekt !"+CRLF

replace anzahl1->terminnr with (al1+2)
endif
close termin1

*--------Rechnungsnummer
? "Rechnungsnummer berprfen"
csv:=csv+"Rechnungsnummer testing"+CRLF

select 8
use rechnung EXCLUSIVE
pack
al1:=0
index on rnr2 to al7nr
set index to al7nr
go bottom
al1=(rnr2)
skip-1

*Es wird geschaut ob die Nummer 1 davor genau um 1 kleiner ist -- sonst Meldung (c)2016
dal1=(rnr2)
 if (al1-dal1) = 1
 	? "Die vorherige Rechnungsnummer ist um genau 1 kleiner - OK !"
	csv:=csv+"Die vorherige Rechnungsnummer ist um genau 1 kleiner - OK !"+CRLF
	else
	? "Die vorherige Rechnungsnummer ist nicht um 1 kleiner"
	? "sonder unterscheidet sich um "+str(al1-dal1)+" da stimmt was nicht !!!"
	csv:=csv+"Die vorherige Rechnungsnummer ist nicht um 1 kleiner"+CRLF
	csv:=csv+"sonder unterscheidet sich um "+str(al1-dal1)+" da stimmt was nicht !!!"+CRLF
 endif

*----- da die Nummer selber vergeben wird ... soll er nur die aktuell vergebene Nummer abgleichen (c)2016 - deswegen (alt+0)
if (al1+0) = anzahl1->rnzahl
? "neue Rechnungsnummer OK!"
csv:=csv+"neue Rechnungsnummer OK!"+CRLF

else
nrsend:=1
? "Rechnungsnummer "+str(al1)+" wird ersetzt da defekt !"
csv:=csv+"Rechnungsnummer "+str(al1)+" wird ersetzt da defekt !"+CRLF

replace anzahl1->rnzahl with (al1+0)
endif
close rechnung

*-------Eknummer
? "EinkaufDatenbank berprfen"
csv:=csv+"EinkaufDatenbank testing"+CRLF

select 7
use einkauf EXCLUSIVE
pack
al1:=0
index on eknummer to al6nr
set index to al6nr
go bottom
al1=val(eknummer)
if (al1+2) = anzahl1->eknummer
? "neue Einkaufnummer OK!"
csv:=csv+"neue Einkaufnummer OK!"+CRLF

else
nrsend:=1
? "Einkaufnummer "+str(al1)+" wird ersetzt da defekt !"
csv:=csv+"Einkaufnummer "+str(al1)+" wird ersetzt da defekt !"+CRLF

replace anzahl1->eknummer with (al1+2)
endif
close einkauf

*--Programm beenden da Defekt aufgetreten
?
?
? "Datenbankberprfung beendet"
csv:=csv+"Datenbanktesting beendet"+CRLF
csv:=csv+version

memowrit("Nrfehler.txt", csv)

*-------------- Datei senden

if nrsend=1

?
? "Datenbank - Fehlernummern werden gesendet - Bitte warten! "

? runshell(" /C Start3.bat" ,,, .T.)

*Ferase("Nrfehler.txt")

endif

return

Die PROCEDURE startet noch vor der Select und Index Zuweisung !

was beinflußt hier den INDEX der Datenbank Termin1 so, daß er beim beenden nicht mehr stimmt ?
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 -


ein Index ist (grob gesprochen) ein Verzeichnis in der Art

Wert : Satznummer

d.h. jedem Suchbegriff wird eine entsprechende Satznummer zugeordnet. Nach dem "use adresse1 EXCLUSIVE" wird ein PACK ausgeführt. PACK entfernt als gelöscht gekennzeichnete Sätze und "verschiebt" die verbleibenden Datensätze nach vorne. Ist z.B. der zweite Datensatz gelöscht, dann ändert sich für alle anderen Datensätze (ausser dem Satz mit der Nummer 1) ihre Satznummer, sie wird um 1 vermindert.

Damit zeigt der Index auf die falschen Einträge. Und das wird dann für alle vorhandenen Dateien durchgespielt, was dazu führt, dass die Index-Dateien nicht mehr "passen".

Sinnvollerweise (zumindest für dieses Vorgehen) wird danach der Index neu erstellt, da die Verbindung "Wert : Satznummer" ja nicht mehr korrekt ist nach einem PACK.
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 »

georg hat geschrieben:Hallo, Klaus -


ein Index ist (grob gesprochen) ein Verzeichnis in der Art

Wert : Satznummer

d.h. jedem Suchbegriff wird eine entsprechende Satznummer zugeordnet. Nach dem "use adresse1 EXCLUSIVE" wird ein PACK ausgeführt. PACK entfernt als gelöscht gekennzeichnete Sätze und "verschiebt" die verbleibenden Datensätze nach vorne. Ist z.B. der zweite Datensatz gelöscht, dann ändert sich für alle anderen Datensätze (ausser dem Satz mit der Nummer 1) ihre Satznummer, sie wird um 1 vermindert.

Damit zeigt der Index auf die falschen Einträge. Und das wird dann für alle vorhandenen Dateien durchgespielt, was dazu führt, dass die Index-Dateien nicht mehr "passen".

Sinnvollerweise (zumindest für dieses Vorgehen) wird danach der Index neu erstellt, da die Verbindung "Wert : Satznummer" ja nicht mehr korrekt ist nach einem PACK.
OK das sehe ich ein , aber das ist bei dem Termin1 Problem nicht relevant , da beim Testen kein Datensatz gelöscht wurde ... aber trotzdem beeinflusst diese PRoCEDURE den INDEX so , dass er beim NEUSTART nicht mehr passt

Heist das es liegt am PACK obwohl nichts gelöscht wurde !
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 »

OK ich muß mich verbessern das PACK scheint auschlaggebend da ich dort den INDEX nicht offen habe und bei dem APPEND ein angelegter "PLACEBO" Termin mit DELETE gelöscht wird
und dieser dann beim NEUSTART mit PACK entfernt wird OHNE dass der termin1 INDEX offen/aktiv ist ... und ich mir somit meine INDEX Datei selber ZERSTÖRE ...

Danke GEORG :-) DANKE auch an alle anderen die mir versucht haben zu helfen ... WAS FÜR EIN DÄMLICHER FEHLER ...
da ich nach dem PACK den INDEX erst neu aufbaue hat das dann natürlich bei gelöschtem INDEX wieder gepasst ...

Dazu fällt mir dann nur noch ein:

DUMM , DÜMMER , KLAUS :-)

Dazu gehört schon einiges an DUMMHEIT , wenn man sich seinen INDEX beim Start des PROGRAMMS selber kaputt macht und das nicht mal bemerkt , weil man das mit einem
DO ... gar nicht mehr auf dem Schirm hat .

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 »

Für sowas ist dann der Debugger gut, damit geht man alles Schritt für Schritt durch und müßte es erkennen ;-)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von UliTs »

xbaseklaus hat geschrieben:...
Nein, warum soll Manfred seine Zeit vergeuden mit einem CODE den ich jetzt 4 Tage überprüft habe ,
...
Hallo Klaus, man könnte meinen, Du heisst Jan. Der hat auch schon öfters solche Aussagen von sich gegeben :D .
-
Schön, dass es jetzt klappt. Markiere am Besten noch deinen ersten Beitrag im Betreff mit [ERLEDIGT] oder [ERL] :) .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von Jan »

UliTs hat geschrieben:
xbaseklaus hat geschrieben:...
Nein, warum soll Manfred seine Zeit vergeuden mit einem CODE den ich jetzt 4 Tage überprüft habe ,
...
Hallo Klaus, man könnte meinen, Du heisst Jan. Der hat auch schon öfters solche Aussagen von sich gegeben :D .
Das nehm ich jetzt persönlich!!! :razz:

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

Re: FOXCDX Datenbank mit CDX Index Problem!

Beitrag von UliTs »

Fühlst Du Dich etwa angesprochen? :lol:
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten