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;