![]() |
Datenbank: PostgreSQL • Version: 9.1 • Zugriff über: TPgTable
delphi datenmenge weder im editier- noch im einfügemodus
Hallo,
das leidige Thema im Betreff noch einmal, da ich einfach nicht erkennen kann, wo der Fehler liegt:
Code:
Ich danke schon einmal jetzt für Tipps.
ExcelApp.Workbooks.Open(dateiname);
dmkunden.tblkundendaten.Connection.StartTransaction; if not (dmkunden.tblkundendaten.State in [dsInsert]) then dmkunden.tblkundendaten.Insert; //das zumindest macht er try begin dmkunden.tblkundendatenanrede.AsString := ExcelApp.Cells[5, iPers].Value; dmkunden.tblkundendatentitel.AsString := ExcelApp.Cells[6, iPers].Value; dmkunden.tblkundendatennachname.AsString := ExcelApp.Cells[7, iPers].Value; dmkunden.tblkundendatengeburtsname.AsString := ExcelApp.Cells[8, iPers].Value; //weitere Zuweisungen end; if dmkunden.tblkundendaten.State in [dsInsert] then dmkunden.tblkundendaten.Post; //^^State = dsInsert(!) und daher will er den Post ausführen und hierbei erscheint die im Betreff genannte Fehlermeldung. dmkunden.tblkundendaten.Connection.Commit; result:=true; [...] |
AW: delphi datenmenge weder im editier- noch im einfügemodus
[edit]
Mist |
AW: delphi datenmenge weder im editier- noch im einfügemodus
Bei deinem Code geht nicht richtig hervor, was du eigentlich tun möchtest.
Möchtest du grundsätzlich immer einen Datensatz einfügen oder möchtest du eine Edit/Einfügen-Strategie fahren? Diese Edit/Einfügen Strategie kommt recht häufig vor und sieht so aus:
Delphi-Quellcode:
Query.close;
query.Parameters.ParamValues['Keyfeld'] = keyfeld; Query.Open; // die Query liefert genau einen Datensatz oder eine leere Datenmenge zurück if Query.IsEmpty then begin Query.Append; // nicht Insert verwenden; Insert ist langsamer als Append! Query['Keyfeld'] := ...; end else Query.Edit; // Datenfelder mit neuen Daten befüllen query['Feld1'] := ...; .... Query.Post; |
AW: delphi datenmenge weder im editier- noch im einfügemodus
irgend ein ungünstig programmiertes Event z.B. in OnBeforPost, OnCalcFields o.ä.
|
AW: delphi datenmenge weder im editier- noch im einfügemodus
Bin mir nicht ganz sicher, aber wie sieht es aus, wenn Du im Edit statt im Insert Modus bist. Das ist nicht Insert, die Prüfung/ Logik kommt zu einem falschen Ergebnis.
Dazu passt dann evtl. der Rest deines Ablaufs nicht. Bist Du Dir sicher, dass es genau an der Stelle knallt, wo du es einkommentiert hast? |
AW: delphi datenmenge weder im editier- noch im einfügemodus
Danke Bummi, der Hinweis hat mich auf die Idee gebracht - machmal sieht man den Wald vor lauter Bäumen nicht - das bislang tadellos funktionierende Programm mit einer leeren DB zu prüfen. Und damit funktionierte es wieder wie gewünscht. Irgendetwas scheint nun mit der DB nicht zu stimmen, das werde ich ergründen müssen. Da in dem Projekt keine FKs etc. verwendet wurden und fortlaufende PKs manuell erzeugt werden, wird's wohl mühselig werden, die Stelle zu ergründen und wie es dazu kommen konnte.
Danke an alle für die Tipps. Gruß |
AW: delphi datenmenge weder im editier- noch im einfügemodus
Zitat:
Delphi-Quellcode:
Das gleiche auch später nochmals. Grund: Bei deiner Variante wird nur "true" erzielt, wenn "State=dsInsert", du möchstet aber eigentlich "dsInsert ist Teilmenge von State". (Ich vermute in dem 2. Vorkommen dieser Prüfung ist "State" = [dsInsert, dsEditing] oder so, weswegen das einen Unterschied machen könnte.)
if not (dsInsert in dmkunden.tblkundendaten.State) then
|
AW: delphi datenmenge weder im editier- noch im einfügemodus
![]() ![]() Im ersten Beitrag bin ich etwas verwundert über das Konstrukt
Delphi-Quellcode:
Wenn hier schon mit Transaktionen gearbeitet wird, dann sollte das in einem try ... except Block stehen.
try
begin end
Delphi-Quellcode:
Des weiteren ist es fraglich, warum überhaupt geprüft wird, ob sich die Datenmenge im Einfügemodus befindet. Wenn, dann sollte diese Prüfung vor StartTransaction erfolgen, denn sonst ist ja ein Teil der Datenänderung ausserhalb und ein anderer Teil innerhalb der Transaktion.
MyDataSet.StartTransaction;
try ... MyDataSet.Commit; except MyDataSet.Rollback; end; Auch wenn dieses Konstrukt so irgendwie funktioniert, habe ich meine Zweifel an der Zuverlässigkeit des Codes. Es wäre gut mal die gesamte Routine zu sehen (die Zuweisungen können verkürzt sein), dann kann man da mehr zu sagen. |
AW: delphi datenmenge weder im editier- noch im einfügemodus
Zitat:
Delphi-Quellcode:
If Not (myTable.State in dsEditModes) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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 by Thomas Breitkreuz