Re: FOXCDX Datenbank mit CDX Index Problem!
Verfasst: Di, 08. Mär 2016 17:04
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 !!!
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 ?
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 berprft - 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 berprfen"
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 berprfen"
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 berprfen"
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 berprfen"
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 berprfen"
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 berprfen"
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
?
?
? "Datenbankberprfung 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
was beinflußt hier den INDEX der Datenbank Termin1 so, daß er beim beenden nicht mehr stimmt ?