Ich muss die Artikel aus dBase/Clipper ausdrucken.
Da ich keinen
ODBC-Treiber gefunden habe, der .ntx Indizes unterstützt,
gehe ich die gesamte Datenbank Satz für Satz durch (
).
Wenn diese Artikel noch nicht in einer Rechnung gedruckt wurden,
setze ich boolean "neueRechung" auf true, und versuche, nach Ausdruck
des aktuellen Artikels, diesen mit neuer Rg_Nummer und - Datum u versehen,
und zu "Posten"
Delphi-Quellcode:
tableAufPos.First;
while not tableAufPos.Eof do
begin
if tableAufPos.FieldByName('AUFTR_NR').AsString = auftrNr then
begin
// Drucke den Artikel
// neue Rechnung ?
if neueRechnung and not istTestDruck then begin
tableAufPos.edit;
tableAufPos.FieldByName('RECH_NR').AsString
:= tfRechnNr.Text;
tableAufPos.FieldByName('RECH_DAT').AsString
:= tfRechDatum.Text;
tableAufPos.Post;
end;
end;
{ Ende einzelner Artikel }
tableAufPos.Next;
end;
Hier kann es geschehen, daß bereits beim ersten "POST" die Meldung kommt,
daß ein anderer Prozess auf die daten zugreift.
Für Aufpos habe ich ein tabelAUfPos und ein dsAUfpos verknüpft.
nachfolgender Code hingegen klappt immer:
Delphi-Quellcode:
function TRgDruckForm.incNummer ( nummernTyp: String): boolean;
var
suchen,found: boolean;
neueNummer : double;
begin
tableNummern.Active := true;
tableNummern.FindFirst;
suchen := true;
found := false;
while suchen do
begin
if tableNummern.FieldByName('NUMMERNART').AsString = nummernTyp then
begin
suchen := false;
found := true;
neueNummer := tableNummern.FieldByName('NUMMER').AsFloat +1.0;
tableNummern.edit;
tableNummern.Fields[1].AsFloat := neueNummer;
tableNummern.Post;
end
else
suchen := tableNummern.FindNext;
end;
if found then
Result := true
else
Result := false;
tableNummern.Active := false;
end;
Hat irgendjemand eine rettende Idee?
Danke Hanns