AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler mit DBNavigator

Ein Thema von khh · begonnen am 24. Jul 2015 · letzter Beitrag vom 27. Jul 2015
Antwort Antwort
Seite 2 von 2     12   
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 09:14
Ich habe jetzt mal probeweise anstatt der ZQuery eine ZTable verwendet.
Der Fehler ist identisch.
Ich geh mal davon aus, dass zu diesem Zeitpunkt die ID halt noch nicht zur Verfügung steht
Karl-Heinz
  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
 
#12

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 09:40
Ich geh mal davon aus, dass zu diesem Zeitpunkt die ID halt noch nicht zur Verfügung steht
Diesen philosophische Ansatz könntest du mit dem Debugger in eine fundierte Erkenntnis umwandeln.
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
mkinzler
(Moderator)

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

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 10:04
Die ID existiert am Server aber wahrscheinlich nicht im Client.
Ich würde wieder den Query nehmen und im InsertSQL des Updateobjektes mir diese zurückgeben lassen

insert into ... returning ID into :id; und hoffen, dass Zeos das so unterstützt.
[Edit: Natürlich im InsertSQL nicht im UpdateSQL]
Markus Kinzler

Geändert von mkinzler (26. Jul 2015 um 10:25 Uhr)
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 10:08
Die ID existiert am Server aber wahrscheinlich nicht im Client.
Ich würde wieder den Query nehmen und im UpdateSQL des Updateobjektes mir diese zurückgeben lassen

insert into ... returning ID into :id; und hoffen, dass Zeos das so unterstützt.
ich danke, dir werd ich so ausprobieren
Karl-Heinz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 10:26
Ich hatte oben in der Schnelle etwas falsches geschrieben, Code gehört in InsertSQL
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 11:21
Worin besteht eigentlich konkret der Unterschied zwischen Table und Query?
Eine Query enthält Daten, die über ein select-Statement aus einer Datenbank exportiert werden. Eine Table ist Teil einer DB.
Mit Select * from Irgendeinetable liefert Dir eine Query den Inhalt einer Table. Je nachdem wie Intelligent eine Komponente ist, kann sie eine Query wie eine Tabelle behandeln. Z.B. Updates erzeugen bzw. Durchführen.
Da beide nicht synonym sind und unterschiedliche Datenbanken sich unterschiedlich verhalten, verlasse ich mich im allgemeinen nicht auf Oberfächen, die z.B. automatisch Updates an die darunter liegende Datenbank weiterleiten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 14:08
Bei einer TTable wird automatisch die Abfrage
Code:
select * from <Tabelle>;
verwendet. Bei der Verwendung eines Queries kannst Du das selber festlegen (nicht alle Felder, Daten aus mehreren Tabellen usw.)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 14:54
Das Verständnis für die Vergabe des PK ist Grundvoraussetzung!
Wenn im Before Insert Trigger steht:
Code:
  if (new.id is null) then
    new.id = gen_id(gen_adresse_id, 1);
ist erst mal alles fein.
Lässt man die Abfrage auf "is null" weg, kann das schon ein Problem sein!

Die Query - Komponenten bieten verschiedene Lösungen an.
Bei TIBQuery und auch anderen kann man den Generator - Name angeben.
Dann wird beim Post nach einem Insert die ID von der Anwendung und nicht vom Server erzeugt.
Dadurch kennt die Query den Wert der ID und kann diesen benutzen, ohne vorher eine Synchronisation mit dem Server durchführen zu müssen.
Hätte ich hier im Trigger die Zeile "if (new.id is null) then" weggelassen, hätte ich einen netten Effekt.
Der Server vergibt auch eine ID, die in der Regel 1 höher ist als die, die die Query jetzt weiter verwendet.

Wenn du also ein Update machst, wird er keinen Datensatz finden oder im schlimmsten Fall einen Datensatz updaten, den ein anderer gerade angelegt hat.

Seit FB 2.5 gibt es das RETURNING, welches von den meisten Komponenten unterstützt wird.
Die Einstellungen sind auch hier bei den unterschiedlichen Komponenten unterschiedlich gelöst.

Ich kenne die TZQuery nicht.
Also solltest du:

- Trigger prüfen
- nachsehen, ob man bei TZQuery den Namen des Generators irgendwo hinterlegen kann
- und das Ergebnis (wie Sir Rufo ja schon sagte) mit dem Debugger überprüfen.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#19

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 18:04
Soweit mir bekannt, stellten frühere Versionen der Zeos-Komponenten lediglich unidirektionale Datenmengen bereit. Für die Bearbeitung eines selektierten Datensatzes in einem DB-Grid ist jedoch eine bidirektionale Datenmenge erforderlich. Wie das bei Zeos derzeit aussieht, vermag ich nicht zu sagen, da ich Zeos das letzte Mal wohl vor 5 Jahren verwendet hatte. In Lazarus- bzw. CodeTyphon setze ich die beiliegenden Ib-Komponenten ein, die bidirektional sind und eine Verbindung mit einer Firebird-Datenbank auf einfachste Weise ermöglichen.

Ergänzung:
Habe eben einen Thread im Delphi-Treff gefunden, der dasselbe Problem zur Grundlage hat.

Geändert von Perlsau (27. Jul 2015 um 07:30 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#20

AW: Fehler mit DBNavigator

  Alt 27. Jul 2015, 11:27
Ich geh mal davon aus, dass zu diesem Zeitpunkt die ID halt noch nicht zur Verfügung steht
Diesen philosophische Ansatz könntest du mit dem Debugger in eine fundierte Erkenntnis umwandeln.
Gleichzeitig könnte man noch die Komponente ZSQLMonitor in sein Projekt setzen.

Damit kann man elegant und ohne eine Zeile Code zu schreiben, prüfen, welche SQL-Statements an die Datenbank gesendet werden.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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