AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensatz in Query einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatz in Query einfügen

Ein Thema von BlueStarHH · begonnen am 24. Mär 2006 · letzter Beitrag vom 24. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#1

Datensatz in Query einfügen

  Alt 24. Mär 2006, 15:16
Datenbank: MySQL • Zugriff über: TZQuery
Ich habe ein TQuery, das mit einem TUpdateSQL verbunden ist. Die Daten werden in einem Grid angezeigt.

Beim Hinzufügen eines neuen Datensatzes tritt folgendes Problem auf. Der Ablauf ist wie folgt:

1. AQuery.Insert;
2. Anwender füllt DBEdit-Felder aus
3. AQuery.Post;

Nun sind die Daten in der Datenbank. Jedoch zeigt das Grid nur die vom Anwender eingegebenen Daten. Daten die mit dem Query berechnet werden, werden nicht angezeigt. Also führe ich nach dem Post ein AQuery.Refresh aus. Nun werden aus die berechneten Daten angezeigt. Dadurch ergibt sich folgendes Problem:

Durch das AQuery.Refresh wird der letzte Datensatz im Query ausgewählt und im Grid selektiert. Dadurch werden in den DBEdit-Feldern die Daten dieses letzten Datensatzes angezeigt. Das ist sehr verwirrend für den Benutzer. Wenn er seien Daten eingibt und nach dem speichern (post) wird plötzlich ein anderer Datensatz angezeigt. Wie kann ich dies verhindern?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 16:29
Vor dem Post akteuelln Datensatz merken und nach dem Refresh diesen wieder zum aktuellen machen (ID des neuen Datensatz sollte reichen für Locate) oder verschiedene Objekte für Anzeige/Änderung.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 17:20
Der Datensatz hat ein Feld ID. Diese ist der Primärschlüssel. Diesen Feld könnte man sich merken und dann anspringen. ABER: Das Feld ist ein autoinc-Feld, wird also von der Datenbank automatisch um einen hochgezählt. Daher wird für dieses Feld kein Wert in meinem SQL-Insert-Statement angegeben und ich kenne diesen Wert auch nicht. Kann man den irgendwie abfragen? Er wird ja erst nach dem AQuery.Post erzeugt oder nicht? Wenn ich dann z.B. mit AQuery.FieldByName('ID').AsString den Wert abfragen möchte, bekomme ich eine leere ID da Delphi von den Änderungen in der DB noch nichts mitbekommen hat. Deswegen der Refresh im oberen Posting. Durch den Refresh wird aber der aktuelle Datensatz geändert. Wo wir wieder bei meinem Problem sind.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 17:20
Zitat von mkinzler:
oder verschiedene Objekte für Anzeige/Änderung.
Was meinst Du damit? Danke.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 17:27
Zitat von BlueStarHH:
Zitat von mkinzler:
oder verschiedene Objekte für Anzeige/Änderung.
Was meinst Du damit? Danke.
2 verschiedene Queries für select und Insert/Update usw. Hilft dir in diesem fall aber nicht wirklich weiter. Vielleicht könnte es etwas bribgen, den Select-Befehl etwas zu modifizieren. z.b mit ... ORDER BY ID dann ist sichergestellt, das der neue datensatz der Letzte ist und daher nach dem Refresh aktiv ist.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 17:34
Zitat von mkinzler:
Vielleicht könnte es etwas bribgen, den Select-Befehl etwas zu modifizieren. z.b mit ... ORDER BY ID dann ist sichergestellt, das der neue Datensatz der Letzte ist und daher nach dem Refresh aktiv ist.
Das geht leider auch nicht, weil das Grid nicht nach der ID sortiert sein muss. Außerdem wird die DB von mehreren Personen gleichzeitig genutzt. Es kann also sein, dass zwischen Post und Refresh noch ein anderer User seine Daten in die DB schreibt. Daher könnte dann der neue Datensatz, den der andere User angelegt hat, der letzte sein. Dieser würde dann fälschlicherweise angesprungen werden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 17:39
Verwendest du schon, die neueste Version der ZeosLib? Dort gibt es die Möglichkeit mit Sequences zu arebeiten so das man vor dem Einfügen schon die ID, die verwendet wird, ermitteln kann. Ich habe aber keine Erfahrung damit.
Noch eine Möglichkeit, die allerdings alles andere als optimal ist, wäre es die ID durch vollständige Abfrage über den neu eingefügten Datensatz zu ermitteln.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 17:56
Zitat von mkinzler:
Verwendest du schon, die neueste Version der ZeosLib? Dort gibt es die Möglichkeit mit Sequences zu arebeiten so das man vor dem Einfügen schon die ID, die verwendet wird, ermitteln kann. Ich habe aber keine Erfahrung damit.
Ich schaue es mir mal an. Aber das wird wohl auch ein Problem geben. Denn wenn ich die ID bereits vor dem Posten eines neuen Datensatz kenne und mich dann entscheide den neuen Datensatz doch nicht zu posten müsste die ID verbraucht werden. So hat man dann eine Lücke in der Nummerierung. Die ID müsste verbraucht werden, damit ein zweiter User der ebenfalls zur selben Zeit eine ID anfordert eine eindeutige andere bekommt.

Zitat von mkinzler:
Noch eine Möglichkeit, die allerdings alles andere als optimal ist, wäre es die ID durch vollständige Abfrage über den neu eingefügten Datensatz zu ermitteln.
Auch keine gute Idee. Denn der Datensatz kann nur über die ID eindeutig identifiziert werden. Alle anderen Felder können z.B. in mehreren Datensätzen gleich sein.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 18:04
Sequences machen nur bei Datenbanken mit Transaktionen Sinn, was bei Mysql nicht immer sichergestellt ist. Ich würde aber den wert auch erst abfragen, wenn ich mir sicher bin das Post erfolgen soll, also wirklich direkt vor dem Insert.
Aber Mysql hat doch eine Funktion (zumindset in php; mysql_insert_id) um die id des eingefügten Datensatzes nach dem Insert zu ermitteln.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Datensatz in Query einfügen

  Alt 24. Mär 2006, 18:09
Zitat von mkinzler:
Aber Mysql hat doch eine Funktion (zumindset in php; mysql_insert_id) um die id des eingefügten Datensatzes nach dem Insert zu ermitteln.
Wie kann ich diese Funktion mit der ZeosLib/Delphi nutzen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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