Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [mySQL]: Fehler in der Abfrage, aber wo? (https://www.delphipraxis.net/21883-%5Bmysql%5D-fehler-der-abfrage-aber-wo.html)

Robert_G 9. Mai 2004 16:56

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Außerdem sollte es knallen, wenn sich dein DBGrid aktualisiert.
Schließlich liefert dein DELETE-Statement keine Ergebnismenge zurück, aber du lässt dieses Statement in der Query. ;)

Ich habe wenig Erfahrung mit den DB Aware Kompos, aber das sollte IMHO gehen:
Delphi-Quellcode:
Var
  ActiveID :integer;
Begin
  ActiveID := ZQuery2.FieldByName ('id').AsInteger;

  With [DeineQueryKlasse].Create(self) Do
  Try
    Session := ZQuery2.Session; //kA wie das bei dem ZEOS-Zeugs heißt
    SQL.Text :=
      'DELETE FROM Bestellungen' + #10 +
      'WHERE DeinPrimKey = :i_PrimKey';
    // Werte an Query Parameter übergeben...
    ParamByName('i_PrimKey').AsInteger    := ActiveID;
    ExecSQL;
  Finally
    free;
  End;
End;

yankee 9. Mai 2004 19:11

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
So funzt es:
Delphi-Quellcode:
var ITitel, ILehrer, IVerlag, IBestellnr:string;
    IPreis: Double;
    IAnzahl: Integer;
begin
    ITitel :=ZQuery2.fieldbyname('Titel').AsString;
    IAnzahl :=ZQuery2.fieldbyname('Anzahl').AsInteger;
    ILehrer :=ZQuery2.fieldbyname('Lehrer').AsString;
    IVerlag :=ZQuery2.fieldbyname('Verlag').AsString;
    IBestellnr :=ZQuery2.fieldbyname('Bestellnr').AsString;
    IPreis :=ZQuery2.fieldbyname('Preis').AsFloat;

    ZQuery2.SQL.Text :='DELETE FROM `bestellungen` WHERE `Titel` = :ITitel AND `Anzahl` =:IAnzahl AND `Lehrer` =:ILehrer AND `Verlag` =:IVerlag AND `Bestellnr` =:IBestellnr AND CONCAT( `Preis` ) =:IPreis LIMIT 1';
    ZQuery2.ParamByName('ITitel').Value :=ITitel;
    ZQuery2.ParamByName('IAnzahl').Value :=IAnzahl;
    ZQuery2.ParamByName('ILehrer').Value :=ILehrer;
    ZQuery2.ParamByName('IVerlag').Value :=IVerlag;
    ZQuery2.ParamByName('IBestellnr').Value :=IBestellnr;
    ZQuery2.ParamByName('IPreis').Value :=IPreis;
    ZQuery2.ExecSQL;
    LoadAlreadyOrdered;
Die Procedure LoadAlreadyOrdered läd einfach das DBGrid neu. Thx für eure Hilfe!!

Sharky 10. Mai 2004 05:32

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Hai yankee,

warum machst Du es denn nicht über den Primärschlüssel (ID) der Tabelle :?:
Bitte nicht falsch verstehen aber so wirst Du keine Freude an der DB-Programmierung haben ;-)

yankee 10. Mai 2004 06:07

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Das Problem dabei ist, dass ich die Daten IMMER nach Titeln sortiert ausgeben will. Und da fand ich esa ganz sinnig, alles dierekt richtig abzuspeichern, da ich so den Server ja auch Arbeit erspare...
Grundsätzlich könntest du aber recht haben.
Habe aber bis jetzt außer in Feinheiten (kürzere Abfragebefehle) noch keinen Vorteil gesehen...

Sharky 10. Mai 2004 06:30

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Du speicherst ja nichts sonder möchtest einen Eintrag löschen. Und über einen Primärschlüssel ist es am sichersten dies zu machen. Denn der Server stellt sicher das jeder Datensatz eine eindeutigen ID hat. Somit ist es unmöglich versehentlich etwas falsches zu löschen.
Mit der Sortierung hat das ja nichts zu tun.

yankee 10. Mai 2004 09:32

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Aber wenn ich ein Feld mit allem anspreche, ist das doch auch eindeutig, oder? Selbst wenn es zwei Felder gibt, die exakt gleich sind, dann löscht der Punkt LIMIT 1 nur eins...

Sharky 10. Mai 2004 09:51

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Zitat:

Zitat von yankee
...Selbst wenn es zwei Felder gibt, die exakt gleich sind, dann löscht der Punkt LIMIT 1 nur eins...

Und welches von beiden?

grayfox 10. Mai 2004 09:53

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Zitat:

Selbst wenn es zwei Felder gibt, die exakt gleich sind
falls du mit 'feld' datensatz meinst, dann hast du ein ernstes design-problem :mrgreen:

es gibt nichts eindeutigeres, um einen datensatz zu kennzeichnen, als einen primary key.
somit ersparst du dir den ganzen wust an unnötigen parametern.

mfg, stefan

yankee 10. Mai 2004 10:03

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Ich habe diese Datensätze:

Bezeichnung User Ort

Baum DAU Dorf-Wald
Baum DAU Dorf-Wald

Wenn ich von den beiden Datensätzen nun den falsch lösche, würde doch keinem was auffallen, oder?

Aber im Grunde habt ihr Recht, mit 'ner ID wird's wohl leichter sein. Das mache ich das nächste mal machen...

grayfox 10. Mai 2004 15:05

Re: [mySQL]: Fehler in der Abfrage, aber wo?
 
Zitat:

Ich habe diese Datensätze:

Bezeichnung User Ort
Baum DAU Dorf-Wald
Baum DAU Dorf-Wald
doch ein designproblem? :mrgreen:
falls es sich um eine tabelle der registrierten user handelt schon.
bei einer anderen tabelle braucht man nur ein feld mit einem fremdindex einrichten, welches auf den eindeutigen eintrag in der usertabelle verweist.
na stell dir vor, der user Dau (ihr habt auch einen Dau? unserer heisst 'Leonhard Dau'. kein witz ;) ) übersiedelt von Dorf-Wald nach Ackerstadt. das gibt jede menge aktualisierungen :mrgreen:

mfg, stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.
Seite 2 von 3     12 3      

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