![]() |
Re: Löschen in DBGrid funktioniert nicht
Zitat:
ein PK (PrimaryKey) hat nichts mit der Sortierung zu tun ;-) Ein PK ist ein Index auf ein Feld der Tabelle. Da ein PK per Definition einmalig ist kann dadurch der zu löschende Datensatz genau identifiziert werden. Zitat:
Zitat:
Zitat:
Wenn im Feld "Nummer" zweimal der selbe Wert steht würden beide Datensätze gelöscht werden. Ganau darum legt man auf solch ein "ID-Feld" einen PK und lässt den Wert dafür über einen Generator vergeben oder macht es per AutoInc. Dadurch wird sichergestellt das nie zwei Datensätze den gleichen Wert in dem Feld haben. |
Re: Löschen in DBGrid funktioniert nicht
Also, noch mal zum Mitschreiben: Du packst eine ZQuery, ein ZUpdateSQL und ein Datasource (Registerkarte Datenzugriff) auf deine Form. In ObjectInspector suchst du bei ZQuery1 nach der Eigenschaft UpdateObject. Hier klappst du enfach mal die Combobox auf, als Ergebnis solltest du dein ZUpdateSQL finden und auswählen. Damit ist das ZUpdateSQL mit deiner ZQuery verbunden. Des weiteren wählst du für dein DataSource im OI unter DataSet das ZQuery aus. Diese DataSource trägst du in deinem DBGrid als DataSource im OI ein.
Im OI trägst du dann in der Eigenschaft SQL deiner ZQuery das Select-Statement ein, das dir dein Grid füllen soll. Weiter im OI trägst du in der Eigenschaft DeleteSQL deiner ZUpdateSQL das oben bereits verwandte Delete-Statement ein. Du kannst hier auch wie gewohnt Parameter verwenden, die Parameter mußt du dann in der Eigenschaft Parameters genauer definieren (nachdem sie in den Statements eingetragen wurden). Des weiteren kannst du in InsertSQL das Insert-Statement eintragen, das du einsetzen möchtest, bzw. das Update-Statement in der Eigenschaft ModifySQL. Wenn du alle SQL-Eigenschaften im ZUpdateSQL gesetzt hast, kannst du wie gewohnt mit den Methoden Edit, Append, Insert und Delete arbeiten. Ich hoffe, daß es jetzt verständlicher geworden ist. Grüße Mikhal |
Re: Löschen in DBGrid funktioniert nicht
Hai Mikhal,
so hätte ich es ja auch gedacht. Aber bei den Zeos 5.5.0 kann ich im ZZUpDateSQL zwar einen SQL-Befehl zum löschen angeben
SQL-Code:
Aber ich kann im OI keine Parameter angeben. Wenn ich ohne die Angabe von Parametern ParamCheck auf True stelle kommt sofort das der Parameter pnummer nicht vorhanden ist. Entweder liegt das jetzt an der Kombination Zeos 5.5 und Delphi 3 oder an etwas anderem :oops:
DELETE FROM tabelle WHERE nummer = :pnummer
Ich arbeite eigentlich nicht mit Delphi3, ich habe mir das nur schnell aufgebaut um Ati helfen zu können. Mit D2005 und der aktuelle Zeos-Version würde es so gehen wie von Dir beschrieben. |
Re: Löschen in DBGrid funktioniert nicht
Leider kann ich nur von der Konstellation D7 und ZEOS 6.5.1 alpha vom 13.10.2005 ausgehen, da ich keine andere Konstellation zur Verfügung habe.
Grüße Mikhal |
Re: Löschen in DBGrid funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
@mikhal
das Prinzip hatte ich erkannt, nur die Umsetzung klappte nicht. Gott sei Dank hatte Sharky auch Probleme mit dem Umsetzen, sonst hätte ich wieder an mir gezweifelt!! @Sharky Meine Delete-Anweisung sah vorher so aus:
Delphi-Quellcode:
Danach kam eine Fehlermeldung wie im Anhang!!!!
qrMain.sql.text:='Delete from vim where nummer='+delnum+' AND name='+delnam+';';
Aber sei es drum. Ich weiß ja das man ein ID-Feld gebrauchen sollte. Jetzt hatte ich hier im Forum einen Thread gefunden das ein ID-Feld, welches automatisch befüllt wird, bei Firebird nur mit einem Trigger zu bewerkstelligen sei. Stimmt das??? |
Re: Löschen in DBGrid funktioniert nicht
Hai Ati,
versuche mal in deinem SQL-Befehl ... AND name = " + QuotedStr(delname); ... zu verwenden. Wegen der ID in FireBird mache aber bitte einen neuen Thread auf. Sonst blickt bald niemand mehr durch ;-) |
Re: Löschen in DBGrid funktioniert nicht
Zitat:
Zitat:
Danke Ati |
Re: Löschen in DBGrid funktioniert nicht
Im DBGrid kann man direkt löschen wenn:
nur auf eine Tabelle zugegriffen wird die Datenbank im Editiermodus ist dann einfach den Datensatz markieren, Strg+Entf drücken. Du kannst die Datenbank nachträglich nur in den read/write Modus setzen wenn active:= false; connectionString:= 'bla,bla,read/write' active:= true; mfg, silence |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz