![]() |
Datenbank: Firebird • Version: 2,5 • Zugriff über: IBO
Datensätze werden nicht in Tabelle gespeichert.
Hallo an alle Delphi und Firebird Experten,
ich habe folgendes Problem: Ich möchte aus einer alten Datenbank eine Tabelle in eine neue Datenbank mit veränderter Struktur Daten übernehmen. In der alten Tabelle sind 10145 Datensätze. Übernommen werden mir nur 9845. Genau die ersten 300 fehlen. Wie kann ich den Fehler abfangen, warum die Datensätze nicht geschrieben werden. Hier mal mein Statement:
Delphi-Quellcode:
Beim Debuggern wird der ExecSQL Befehl im ersten Datensatz auch ausgeführt jedoch landet der Datensatz nicht in die Tabelle. Trigger und sonstiges habe ich deaktiviert. Die aus kommentierten Zeilen sind Felder in der neuen Struktur und sind nicht relevant.
if (Query_Quelle.RecordCount > 0) then
begin Query_Quelle.First; while not Query_Quelle.eof do begin try dmMain.TAMain.StartTransaction; Query_Ziel.Close; Query_Ziel.SQL.Clear; Query_Ziel.SQL.Add('insert into EVENTS (ID, ACTUALFINISH, ACTUALSTART, ' + 'CAPTION, EVENTTYPE, FINISH, LABELCOLOR, LOCATION, MESSAGE, ' + 'OPTIONS, PARENTID, RECURRENCEINDEX, REMINDERDATE, REMINDERMINUTESBEFORESTART, ' + 'REMINDERRESOURCESDATA, RESOURCEID, STARTZEIT, STATE, TASKCOMPLETEFIELD, ' + 'TASKINDEXFIELD, TASKLINKSFIELD, TASKSTATUSFIELD, GROUPID, PATIENTNR, ' + 'PATIENTENNUMMER, SUCHWORT, IMWARTEZIMMER, SYNCIDFIELD, RECURRENCEINFO) ' + 'Values (:ID, :ACTUALFINISH, :ACTUALSTART, ' + ':CAPTION, :EVENTTYPE, :FINISH, :LABELCOLOR, :LOCATION, :MESSAGE, ' + ':OPTIONS, :PARENTID, :RECURRENCEINDEX, :REMINDERDATE, :REMINDERMINUTESBEFORESTART, ' + ':REMINDERRESOURCESDATA, :RESOURCEID, :STARTZEIT, :STATE, :TASKCOMPLETEFIELD, ' + ':TASKINDEXFIELD, :TASKLINKSFIELD, :TASKSTATUSFIELD, :GROUPID, :PATIENTNR, ' + ':PATIENTENNUMMER, :SUCHWORT, :IMWARTEZIMMER, :SYNCIDFIELD, :RECURRENCEINFO)'); Query_Ziel.ParamByName('ID').Value := dmMain.GetGeneratorWert('GEN_TBL_EVENTS'); Query_Ziel.ParamByName('ACTUALFINISH').AsDateTime := Query_Quelle.FieldByName('ACTUALFINISH').AsDateTime; Query_Ziel.ParamByName('ACTUALSTART').AsDateTime := Query_Quelle.FieldByName('ACTUALSTART').AsDateTime; Query_Ziel.ParamByName('CAPTION').AsString := Query_Quelle.FieldByName('CAPTION').AsString; Query_Ziel.ParamByName('EVENTTYPE').AsInteger := Query_Quelle.FieldByName('ETYPE').AsInteger; Query_Ziel.ParamByName('FINISH').AsDateTime := Query_Quelle.FieldByName('FINISH').AsDateTime; Query_Ziel.ParamByName('LABELCOLOR').AsInteger := Query_Quelle.FieldByName('LABELCOLOR').AsInteger; Query_Ziel.ParamByName('LOCATION').AsString := Query_Quelle.FieldByName('LOCATION').AsString; Query_Ziel.ParamByName('MESSAGE').AsString := Query_Quelle.FieldByName('EMESSAGE').AsString; Query_Ziel.ParamByName('OPTIONS').AsInteger := Query_Quelle.FieldByName('OPTIONS').AsInteger; Query_Ziel.ParamByName('PARENTID').AsInteger := Query_Quelle.FieldByName('PARENTID').AsInteger; Query_Ziel.ParamByName('RECURRENCEINDEX').AsInteger := Query_Quelle.FieldByName('RECURRENCEINDEX').AsInteger; Query_Ziel.ParamByName('REMINDERDATE').AsDateTime := Query_Quelle.FieldByName('REMINDERDATE').AsDateTime; Query_Ziel.ParamByName('REMINDERMINUTESBEFORESTART').AsInteger := Query_Quelle.FieldByName('REMINDERMINUTES').AsInteger; // Query_Ziel.ParamByName('REMINDERRESOURCESDATA').Value := Query_Quelle.FieldByName('REMINDERRESOURCESDATA').AsString; Query_Ziel.ParamByName('RESOURCEID').AsInteger := Query_Quelle.FieldByName('RESID').AsInteger; Query_Ziel.ParamByName('STARTZEIT').AsDateTime := Query_Quelle.FieldByName('STARTZEIT').AsDateTime; Query_Ziel.ParamByName('STATE').AsInteger := Query_Quelle.FieldByName('STATE').AsInteger; // Query_Ziel.ParamByName('TASKCOMPLETEFIELD').Value := 0; // Query_Ziel.ParamByName('TASKINDEXFIELD').Value := 0; // Query_Ziel.ParamByName('TASKLINKSFIELD').Value := ''; // Query_Ziel.ParamByName('TASKSTATUSFIELD').Value := 0; // Query_Ziel.ParamByName('GROUPID').Value := 0; Query_Ziel.ParamByName('PATIENTNR').AsInteger := Query_Quelle.FieldByName('PATIENTNR').AsInteger; Query_Ziel.ParamByName('PATIENTENNUMMER').AsInteger := Query_Quelle.FieldByName('PATIENTNUMMER').AsInteger; Query_Ziel.ParamByName('SUCHWORT').AsString := Query_Quelle.FieldByName('PATIENTSUCHWORT').AsString; Query_Ziel.ParamByName('IMWARTEZIMMER').AsString := Query_Quelle.FieldByName('IMWARTEZIMMER').AsString; Query_Ziel.ParamByName('SYNCIDFIELD').AsString := Query_Quelle.FieldByName('SYNCIDFIELD').AsString; Query_Ziel.ParamByName('RECURRENCEINFO').AsString := Query_Quelle.FieldByName('RECURRENCEINFO').AsString; Query_Ziel.ExecSQL; Query_Quelle.Next; finally dmMain.TAMain.RollBackRetaining; end; end; end; Kann mir jemand einen Tipp geben, wie ich abfangen kann warum der Datensatz nicht geschrieben wird. Vielen Dank schon mal im voraus. |
AW: Datensätze werden nicht in Tabelle gespeichert.
Delphi-Quellcode:
ist recht ungeschickt.
dmMain.TAMain.RollBackRetaining;
Zudem würde ich
Delphi-Quellcode:
vor die Schleife ziehen.
Query_Ziel.SQL.Text := 'insert into EVENTS (ID, ACTUALFINISH, ACTUALSTART, '
+ 'CAPTION, EVENTTYPE, FINISH, LABELCOLOR, LOCATION, MESSAGE, ' + 'OPTIONS, PARENTID, RECURRENCEINDEX, REMINDERDATE, REMINDERMINUTESBEFORESTART, ' + 'REMINDERRESOURCESDATA, RESOURCEID, STARTZEIT, STATE, TASKCOMPLETEFIELD, ' + 'TASKINDEXFIELD, TASKLINKSFIELD, TASKSTATUSFIELD, GROUPID, PATIENTNR, ' + 'PATIENTENNUMMER, SUCHWORT, IMWARTEZIMMER, SYNCIDFIELD, RECURRENCEINFO) ' + 'Values (:ID, :ACTUALFINISH, :ACTUALSTART, ' + ':CAPTION, :EVENTTYPE, :FINISH, :LABELCOLOR, :LOCATION, :MESSAGE, ' + ':OPTIONS, :PARENTID, :RECURRENCEINDEX, :REMINDERDATE, :REMINDERMINUTESBEFORESTART, ' + ':REMINDERRESOURCESDATA, :RESOURCEID, :STARTZEIT, :STATE, :TASKCOMPLETEFIELD, ' + ':TASKINDEXFIELD, :TASKLINKSFIELD, :TASKSTATUSFIELD, :GROUPID, :PATIENTNR, ' + ':PATIENTENNUMMER, :SUCHWORT, :IMWARTEZIMMER, :SYNCIDFIELD, :RECURRENCEINFO);'; |
AW: Datensätze werden nicht in Tabelle gespeichert.
Zitat:
Wenn es keine (formal)Fehlermeldung gibt, ist wohl an den Daten was faul. Gruß K-H |
AW: Datensätze werden nicht in Tabelle gespeichert.
Vielleicht macht es auch Sinn einen SQL-Monitor mitlaufen zu lassen ...
|
AW: Datensätze werden nicht in Tabelle gespeichert.
die Query_Ziel.Execsql in ein Try Except kapseln und im Except Bereich die Fehlermeldung auswerfen
Delphi-Quellcode:
und dann ggf die Fehlermeldung posten
try
Query_Ziel.ExecSQL except on e: Exception Do // EIBError wie das bei IBO genau heißt weiß ich nicht Begin s := e.message; Showmessage(s); End Else Begin s := ExceptObject.ClassName; Showmessage(s); End; end; |
AW: Datensätze werden nicht in Tabelle gespeichert.
Hallo,
Du startes die Transaction aber ich kann kein commit sehen. Olaf |
AW: Datensätze werden nicht in Tabelle gespeichert.
Zitat:
Die Vorgehensweise zur Ausführung eines SQL-Statements ist immer diese hier
Delphi-Quellcode:
Um die Anzeige der Exception kümmert sich die Anwendung
Connection.StartTransaction;
try Query.ExecSQL; Connection.Commit; except Connection.Rollback; raise; end;
Delphi-Quellcode:
, denn die zeigt dann diese gefürchtete MessageBox mit dem Stoppzeichen an. :roll:
TApplication
In einem Thread sieht das anders aus, da befindet sich die Exception in ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz