Thema: Delphi Sql Update (Fehler?)

Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Sql Update (Fehler?)

  Alt 10. Mär 2004, 11:06
Da ich mit IB keine Erfahrungen habe, kann ich nur raten...
Ich habe einfach mal kommentiert, was mir aufgefallen ist:
Delphi-Quellcode:
  // Wofür ist diese Stringlist gut?
  NULL := TStringList.Create;
  Try
    NULL.Add('');

    // datum := Strtodate('dd');

    With Lohn_Daten.UDM Do
    Begin
      // Willst du hier mit jedem Aufruf "Abfrage" zu ModifySQL hinzufügen ?
      // So wird es jedesmal überschrieben...
      IBLohnUpdate.ModifySQL.Text :=
        'UPDATE BEWEGST' + #10 +
        'SET KSTKTR = Null' + #10 +
        'WHERE AKTPER = :i_Date';
      // Datumswerte in SQL Statements gehören immer (!!!) in einen Parameter
      // Es ist möglich, dass Server und Client andere Regionaleinstellugen haben
      // -> Fehler oder viel schlimmer Tag & Monat werden vertauscht, oder, oder, ...!
      IBLohnUpdate.Query[ukModify].Prepare;
      IBLohnUpdate.Query[ukModify].ParamByName('i_Date').DataType := ftDate;
      // Die einzige Funktion in Delphi für explizite String->Datum-Umwandlung,
      // die ich kenne ist EncodeDate
      // Du kannst dir ja eine Funktion "drumrumbauen", die anhand eines "." Tag, Monat & Jahr trennt
      IBLohnUpdate.Query[ukModify].ParamByName('i_Date').AsDate := EncodeDate(2004, 2, 1);

      IBLohnQuery.Edit;
      // Warum eine Stringlist?
      IBLohnQueryKSTKTR.Assign(NULL);
      IBLohnQuery.Post;

      // Zuweisung der Update-SQL

      IBLohnTransaction.Commit;
      IBLohnTransaction.StartTransaction;

      // Der Fehler kam wahrscheinlich durch das "Open"
      // "Open" darf nur bei einem Cursor angewendet werden, der eine Ergebnismenge liefert (ein SELECT-Statement)
      // DML (z.Bsp. UPDATE, INSERT,...) liefert keine Ergebnismenge (auch keine leere!)
      IBLohnQuery.ExecSQL;
    End;

  // "Null" muss auch wieder freigegeben werden...
  Finally
    FreeAndNil(Null);
  End;
  Mit Zitat antworten Zitat