Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme bei Datenänderungen mit TQuery (https://www.delphipraxis.net/32272-probleme-bei-datenaenderungen-mit-tquery.html)

jryan 21. Okt 2004 08:32


Probleme bei Datenänderungen mit TQuery
 
Hallo allerseits!

Eigentlich dachte ich bisher ich habe das DB-Handling der BDE verstanden aber aktuell beisse ich mir die Zähne an einem eigentlich recht simplen Problem aus und hoffe mir kann irgendjemand helfen. Also zu meinem Problem:
In einer bestehden Delphi5-Applikation, welche über die BDE auf eine SYBASE-Datenbank zurückgreift soll eine einfache Maske zur Pflege von Stammdaten eingebaut werden. Diese Maske wollte ich eigentlich, um den Programmieraufwand so gering wie möglich zu gestalten weitestgehend von den Delphi-BDE-Komponenten "steuern" lassen. Die Daten werden per TQuery aus der Datenbank gezogen und die Steuerung soll per TDBNavigator erfolgen. Zur Speicherung von eventuellen Veränderungen bzw. neuen Datensätzen habe ich an das TQuery-Object ein TUpdateSQL gebunden, in welchen ein "delete ...", "update ..." und "insert ..."-Statement definiert sind, welche auf der Sybase-Konsole ohne Probleme gehen. Soweit so gut. In der bestehenden Version kann ich auch ohne Probleme Datensätze zufügen und ändern. Beim löschen dann allerdings bekomme ich beim Aufruf von ApplyUpdates die Exception "Tabelle ist schreibgeschützt" und bei der Kontrolle per SQLMonitor kann ich erkennen, das er zwar mein SQL-Statement abschickt aber alle Parameter mit NULL belegt, obwohl die WHERE-Klausel eine direkte Kopie aus dem sauber funktionierenden UPDATE-Statement ist. Wie bekomme ich nun das Programm dazu ohne alzu grossen aufwwand dazu mein DELETE doch sauber auszuführen?

MfG
-jryan

MrSpock 21. Okt 2004 12:35

Re: Probleme bei Datenänderungen mit TQuery
 
Hallo jryan,

wie sieht denn dein Delete SQL Statement aus? Der Effekt ist schon komisch, da TUpdateSQL gerade für ansonsten schreibgeschützte Datenmengen eine Möglichkeit bieten soll, die Tabelle zu bearbeiten.

jryan 25. Okt 2004 08:17

Re: Probleme bei Datenänderungen mit TQuery
 
Hallo MrSpock!

Ich hatte leider die letzten Tage dann plötzlich eine andere Aufgabe die unbedingt zwischen durch erledigt werden musste, so dass ich erst heute hier wieder rein geschaut habe! Also meine SQL-Statements sind folgende:

Delete:
SQL-Code:
  delete STM_VERTRAG
  where   VERTRAGS_ID   = :VERTRAGS_ID
Insert:
SQL-Code:
  insert   STM_VERTRAG( VERTRAGS_ID, VERTRAGSART, BEZEICHNUNG, BEGINN, ENDE, BEMERKUNG)
  values   ( :VERTRAGS_ID, :VERTRAGSART, :BEZEICHNUNG, :BEGINN, :ENDE, :BEMERKUNG)
Modify:
SQL-Code:
  update   STM_VERTRAG
  set   VERTRAGSART   = :VERTRAGSART,
   BEZEICHNUNG   = :BEZEICHNUNG,
   BEGINN      = :BEGINN,
   ENDE      = :ENDE,
   BEMERKUNG      = :BEMERKUNG
  where   VERTRAGS_ID   = :VERTRAGS_ID
PRIMARY KEY der Tabelle ist das Feld VERTRAGS_ID und sowohl das INSERT- als auch das UPDATE-Statement lassen sich beim SQL-Monitor eindeutig indentifizieren (zusätzliche Kommentare). Achso zur Info, die Tabelle STM_VERTRAG ist die Basistabelle (FOREIGN KEY) für eine weitere Tabelle. Die Daten dieser Tabelle lasse ich in der selben Maske darstellen und nutze die Delphi-Synchronisation (Datasource-Eigenschaft der abhängigen Tabelle verweist auf STM_VERTRAG). Im endgültigen Delete Statement muss ich also auch noch das löschen dieser abhängigen Tabelle unterbringen. Allerdings habe ich jetzt im Rahmen der Test immer nur versucht DS zu löschen, wo der Schlüssel nicht in der abhängigen Tabelle in Benutzung war.
Ich hoffe ich konnte jetzt alles vernünftig erklären und irgendjemand kann mir helfen. Ansosnsten bleibt mir wohl nichts anderes übrig und ich muss das komplette Handling der Datensätze doch wieder "händisch" programmieren!

MfG
-jryan

MrSpock 27. Okt 2004 05:01

Re: Probleme bei Datenänderungen mit TQuery
 
Hallo jryan,

gibt es unter Sybase auch bei den Parametern die Möglichkeit, den unvereänderten "alten" Wert aus der Tabelle anzusprechen? In Firebird würde ich

SQL-Code:
delete STM_VERTRAG
  where VERTRAGS_ID = :OLD_VERTRAGS_ID
schreiben, um den "alten" Wert anzusprechen.

Jelly 27. Okt 2004 09:32

Re: Probleme bei Datenänderungen mit TQuery
 
Zitat:

Zitat von jryan
Delete:
SQL-Code:
  delete STM_VERTRAG
  where   VERTRAGS_ID   = :VERTRAGS_ID

Hallo,
muss das nicht heissen
SQL-Code:
  delete FROM STM_VERTRAG
  where   VERTRAGS_ID   = :VERTRAGS_ID
[/quote]

Gruß,
Tom


Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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