AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensätze werden nicht in Tabelle gespeichert.
Thema durchsuchen
Ansicht
Themen-Optionen

Datensätze werden nicht in Tabelle gespeichert.

Ein Thema von Walter Landwehr · begonnen am 6. Feb 2015 · letzter Beitrag vom 7. Feb 2015
Antwort Antwort
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datensätze werden nicht in Tabelle gespeichert.

  Alt 6. Feb 2015, 12:38
Datenbank: Firebird • Version: 2,5 • Zugriff über: IBO
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:
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;
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.

Kann mir jemand einen Tipp geben, wie ich abfangen kann warum der Datensatz nicht geschrieben wird.
Vielen Dank schon mal im voraus.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Datensätze werden nicht in Tabelle gespeichert.

  Alt 6. Feb 2015, 12:53
dmMain.TAMain.RollBackRetaining; ist recht ungeschickt.

Zudem würde ich
Delphi-Quellcode:
         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);';
vor die Schleife ziehen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Datensätze werden nicht in Tabelle gespeichert.

  Alt 6. Feb 2015, 14:28
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.
mach Dir mal ein Protokoll, was da als SQL-Insert übergeben werden soll.
Wenn es keine (formal)Fehlermeldung gibt, ist wohl an den Daten was faul.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
190 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datensätze werden nicht in Tabelle gespeichert.

  Alt 6. Feb 2015, 14:53
Vielleicht macht es auch Sinn einen SQL-Monitor mitlaufen zu lassen ...
Thomas Forget
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Datensätze werden nicht in Tabelle gespeichert.

  Alt 6. Feb 2015, 15:55
die Query_Ziel.Execsql in ein Try Except kapseln und im Except Bereich die Fehlermeldung auswerfen

Delphi-Quellcode:
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;
und dann ggf die Fehlermeldung posten
  Mit Zitat antworten Zitat
olaf

Registriert seit: 4. Mai 2009
Ort: Iserlohn
82 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: Datensätze werden nicht in Tabelle gespeichert.

  Alt 7. Feb 2015, 09:41
Hallo,

Du startes die Transaction aber ich kann kein commit sehen.

Olaf
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Datensätze werden nicht in Tabelle gespeichert.

  Alt 7. Feb 2015, 09:50
die Query_Ziel.Execsql in ein Try Except kapseln und im Except Bereich die Fehlermeldung auswerfen

Delphi-Quellcode:
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;
und dann ggf die Fehlermeldung posten
Bitte nicht!

Die Vorgehensweise zur Ausführung eines SQL-Statements ist immer diese hier
Delphi-Quellcode:
Connection.StartTransaction;
try
  Query.ExecSQL;
  Connection.Commit;
except
  Connection.Rollback;
  raise;
end;
Um die Anzeige der Exception kümmert sich die Anwendung TApplication , denn die zeigt dann diese gefürchtete MessageBox mit dem Stoppzeichen an.

In einem Thread sieht das anders aus, da befindet sich die Exception in Delphi-Referenz durchsuchenTThread.FatalException, die man dann ausgeben kann, wenn der Thread beendet wurde. Und zwar mit Delphi-Referenz durchsuchenTApplication.ShowException oder indem man einfach eine neue Exception wirft, die ja dann auch von der Anwendung automatisch angezeigt wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz