Einzelnen Beitrag anzeigen

HannsW

Registriert seit: 6. Jan 2010
26 Beiträge
 
#1

dBase/ODBC kann Datensatz nach Änderung nicht schreiben

  Alt 18. Jan 2010, 16:03
Datenbank: Dbase/Clipper • Version: IV • Zugriff über: ODBC/BDE
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
  Mit Zitat antworten Zitat