Seite 3 von 3

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Di, 08. Mär 2016 17:04
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 ?

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Di, 08. Mär 2016 17:48
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.

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Di, 08. Mär 2016 17:56
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 !

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Di, 08. Mär 2016 18:21
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

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Mi, 09. Mär 2016 8:01
von Manfred
Für sowas ist dann der Debugger gut, damit geht man alles Schritt für Schritt durch und müßte es erkennen ;-)

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Do, 10. Mär 2016 11:27
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] :) .

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Do, 10. Mär 2016 11:54
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

Re: FOXCDX Datenbank mit CDX Index Problem!

Verfasst: Do, 10. Mär 2016 13:24
von UliTs
Fühlst Du Dich etwa angesprochen? :lol: