Hallo,
ich habe eine
DB Tabelle die hat mit FAILURE_ID einen automatisch erzeugten Schlüssel Wert.
Zum Hinzufügen neuer Einträge initialisiere ich am Anfrang eine TFDQuery wie folgt:
Delphi-Quellcode:
FQuerySave.UpdateOptions.AutoIncFields := 'FAILURE_ID';
FQuerySave.SQL.Text := 'select FAILURE_ID, TSE_ID, FAILURE_TYPE, ' +
'FAILURE_CODE, FAILURE_TEXT, FAILURE_REMARK ' +
'from KASSE_TSE_FAILURES';
Später möchte ich Werte hinzufügen:
Delphi-Quellcode:
function TTSEFailureLog.AddEntry(FailureType : TTSELogFailureType;
FailureCode : Int32;
const FailureText :
string): Integer;
var
FailureTypeStr :
string;
begin
Result := -1;
AddCodeSiteLogEntry(FailureType, FailureCode, FailureText);
try
FailureTypeStr := ConvertFailureTypeToString(FailureType);
FQuerySave.Open;
FQuerySave.Append;
FQuerySave.FieldByName('
TSE_ID').AsInteger := FCurrentTSEID;
FQuerySave.FieldByName('
FAILURE_TYPE').AsString := FailureTypeStr;
FQuerySave.FieldByName('
FAILURE_CODE').AsInteger := FailureCode;
FQuerySave.FieldByName('
FAILURE_TEXT').AsString := FailureText;
FQuerySave.FieldByName('
FAILURE_REMARK').AsString := '
';
FQuerySave.Post;
Result := FQuerySave.FieldByName('
FAILURE_ID').AsInteger;
FQuerySave.Close;
except
On e:
Exception do
log.SendException(cCategory, '
Fehler beim Speichern eines TSE Fehlerlog '+
'
Eintrags: ' + e.
Message, e);
end;
end;
Beim ersten Mal klappt es immer, bei späteren Malen im selben Programmlauf kommt es oft
zu einer
Exception in FireDAC die damit begründet wird, dass der Wert für die FAILURE_TYPE
Spalte NULL ist. Der Crash passiert genau in der Zeile mit dem Append und ja, diese Spalte
der
DB Tabelle ist als not NULL deklariert.
Was muss ich tun, damit es trotzdem klappt?
Ich bin mit diesem Append/Post Vorgehen noch nicht so vertraut, brauche es hier aber, weil
ich die vergebene ID aus der
DB zurückliefern will.
Grüße
TurboMagic