AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken delphi datenmenge weder im editier- noch im einfügemodus
Thema durchsuchen
Ansicht
Themen-Optionen

delphi datenmenge weder im editier- noch im einfügemodus

Ein Thema von RalfSi · begonnen am 5. Jul 2012 · letzter Beitrag vom 8. Jul 2012
Antwort Antwort
RalfSi

Registriert seit: 6. Jun 2012
9 Beiträge
 
#1

delphi datenmenge weder im editier- noch im einfügemodus

  Alt 5. Jul 2012, 15:24
Datenbank: PostgreSQL • Version: 9.1 • Zugriff über: TPgTable
Hallo,

das leidige Thema im Betreff noch einmal, da ich einfach nicht erkennen kann, wo der Fehler liegt:

Code:
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;
  [...]
Ich danke schon einmal jetzt für Tipps.

Geändert von RalfSi ( 5. Jul 2012 um 15:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 5. Jul 2012, 15:39
[edit]
Mist
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 5. Jul 2012, 15:53
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 5. Jul 2012, 16:01
irgend ein ungünstig programmiertes Event z.B. in OnBeforPost, OnCalcFields o.ä.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 5. Jul 2012, 16:21
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?
Gruß, Jo
  Mit Zitat antworten Zitat
RalfSi

Registriert seit: 6. Jun 2012
9 Beiträge
 
#6

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 7. Jul 2012, 14:49
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ß
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 8. Jul 2012, 03:30
if not (dmkunden.tblkundendaten.State in [dsInsert]) then
Ich weiss nicht, ob das zur Problemlösung beiträgt, aber ich würde hier dringend umdrehen: if not (dsInsert in dmkunden.tblkundendaten.State) then 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.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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
 
#8

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 8. Jul 2012, 07:07
Delphi-Referenz durchsuchenTDataSet.State ist kein SET sondern ein ENUM und kann somit immer nur in einem Zustand sein.
Delphi-Referenz durchsuchenTDataSetState

Im ersten Beitrag bin ich etwas verwundert über das Konstrukt
Delphi-Quellcode:
try
begin

end
Wenn hier schon mit Transaktionen gearbeitet wird, dann sollte das in einem try ... except Block stehen.
Delphi-Quellcode:
MyDataSet.StartTransaction;
try
  ...
  MyDataSet.Commit;
except
  MyDataSet.Rollback;
end;
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.

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.
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
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: delphi datenmenge weder im editier- noch im einfügemodus

  Alt 8. Jul 2012, 10:35
if not (dmkunden.tblkundendaten.State in [dsInsert]) then
Ich weiss nicht, ob das zur Problemlösung beiträgt, aber ich würde hier dringend umdrehen: if not (dsInsert in dmkunden.tblkundendaten.State) then 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.)
Korrekt wäre
If Not (myTable.State in dsEditModes) then
  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 22:28 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