AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi PostgreSQL - Keine ID nach Insert

PostgreSQL - Keine ID nach Insert

Ein Thema von NetSonic · begonnen am 1. Aug 2009 · letzter Beitrag vom 12. Aug 2009
Antwort Antwort
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#1

PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 09:03
Datenbank: PostgreSQL • Version: 8.3 • Zugriff über: TADO und ODBC
Hallo!

Ich habe hier ein Problem mit meinem Programm und der PostgreSQL-Datenbank.
Ich nutzte zur Verbindung mit der Datenbank den PostgreSQL ODBC-Treiber und die TADO-Komponenten (TADOConnection, TADODataSet und TADOQuery). Wenn ich jetzt in meine Kundendatenbank schreiben will, gehe ich wie folgt vor:

- Ich lade die Tabelle "tblcustomer" in eine DBGrid.
- Ich mache ein TADOQuery.Insert
- Ich lasse den Benutzer alle bekannten Daten eingeben.
- Anschließend mache ich ein TADOQuery.Post

Der Datensatz wird erfolgreich angelegt, allerdings ist das Feld "ID" (serial) immer 0, auch bei weiteren Inserts. Erst wenn ich die Query schließe und einen neuen SELECT mache, sind die Werte korrekt. Bekomme deswegen auch häufig den Fehler "Die zum aktualisieren angegebene Zeile ist nicht vorhanden oder wurde gelöscht".

Ich befürchte, dass es etwas mit den Transaktionen der PostgreSQL-Datenbank zu tun hat, aber ich hab zur Zeit überhaupt keine Idee, wie ich dafür sorgen kann, dass nach einem TADOQuery.Post sofort die Daten geschrieben werden und ich eine gültige ID erhalte.

Vielleicht hat da jemand von Euch einen Tipp?

Danke und Gruß
NetSonic
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 09:35
Ich würde mal native Zugriffskompos wie von Microolap testen. Bei dem riesen Umweg über ADO und ODBC ist die Gefahr sehr hoch das Probleme auftauchen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 09:48
Danke für den Hinweis, aber ich kann mir nicht wirklich vorstellen, dass das Problem auf die ODBC-Treiber und ADO zurückzuführen sein soll, wobei ich es natürlich keinesfalls ausschließen möchte!

Ich befürchte, dass ich die Transaktion nach einem Insert manuell anstoßen muss. Nur fehlt mir gerade der Ansatz, wie ich das machen könnte...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 09:50
Zitat:
Ich befürchte, dass ich die Transaktion nach einem Insert manuell anstoßen muss. Nur fehlt mir gerade der Ansatz, wie ich das machen könnte...
Wenn dann vorher. Aber innerhalb einet Transaktion müsste die ID sofort vergeben werden/verfügbar sein.
Markus Kinzler
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 10:02
Naja, ich denke die ID ist auch verfügbar. Nur wird Sie mir erst nach einem schließen und komplett neuen SELECT-Statement angezeigt. Habe mittlerweile herausgefunden, dass, wenn ich TADOQuery.CursorLocation von clUseClient auf clUseServer setze, dann bekomme ich die ID sofort angezeigt. Allerdings werden dann meine Zeilenfärbungen im DBGrid nicht mehr angezeigt, die ich im OnDrawColumnCell eingestellt habe...?!?!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 10:06
Versuche mal nach dem Insert die Daten neu zu fetchen
Markus Kinzler
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: PostgreSQL - Keine ID nach Insert

  Alt 1. Aug 2009, 10:15

Ähm, was meinst Du jetzt mit Fetchen?
Also Reload oder Refresh mit ADOQuery helfen leider auch nicht, falls Du das meinst.
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#8

Re: PostgreSQL - Keine ID nach Insert

  Alt 12. Aug 2009, 15:56
Hey Leute,

ich muss das Problem nochmal wieder aufgreifen. Wenn ich also nach einem Post die Query schließe und neu lade, dann habe ich die ID. Das macht bei ein paar Datensätzen auch nichts, allerdings wird es zum Problem sobald ich mehr als 1000 Zeilen habe. Dann dauert es einfach länger und für den Kunden zu lange.

Mit MySQL hatte ich immer sofort die ID, die mir dann auch nach dem Post z.B. gleich in einer TDBGrid angezeigt wurde. Aber mit Postgre bekomme ich das nicht hin... eben nur, wenn ich TADOQuery.CursorLocation von clUseClient auf clUseServer setzte, dann geht es... aber dann gibt's halt Probleme beim färben der Zeilen in der DBGrid. Das macht er dann nicht mehr...

Hat vielleicht noch jemand einen Tipp für mich?

Gruß NetSonic
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:06 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