Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Parameter Problem (https://www.delphipraxis.net/33568-sql-parameter-problem.html)

Leon de Bar 9. Nov 2004 10:28


SQL-Parameter Problem
 
Hi,

in der folgenden SQL-Abfrage habe ich noch immer ein Problem mit dem Parameters:

Delphi-Quellcode:
 
  ADOQuery1.SQL.Text :=
    'SELECT Mitgliedsnummer, Vorname, Name, Strasse, Land, PLZ, ' +
      'Ort, Tel_1, Fax_1, Tel_2, Fax_2, Handy, email, GebDat, Saldo, ' +
      'Eintritt, Austritt, Spielernummer, Trikot, Spielerposition.Spielerpos, '+
      'Anrede FROM ID LEFT JOIN ' +
      '(Spielerposition RIGHT JOIN (Anrede RIGHT JOIN (((((Mitglied LEFT ' +
      'JOIN Kontakt ON Mitglied.ID=Kontakt.ID) LEFT JOIN GebDatList ON ' +
      'Mitglied.ID=GebDatList.ID) LEFT JOIN MG_Saldenliste ON ' +
      'Mitglied.ID=MG_Saldenliste.ID) LEFT JOIN Mitgliedsstatus ON ' +
      'Mitglied.ID=Mitgliedsstatus.ID) LEFT JOIN Spielerdaten ON ' +
      'Mitglied.ID=Spielerdaten.ID) ON Anrede.AID=Mitglied.AID) ON ' +
      'Spielerposition.SID=Spielerdaten.Spielerpos) ON ID.ID=Mitglied.ID ' +
      'WHERE ID.ID =: apptype';
  ParamByName('apptype').Value:=DSID;
Ich erhalte die Meldung, dass es ein UNDEFINIERTER BEZEICHNER ParamByName ist. Sicher muss ich den irgendwie noch einrichten aber wie und wo?

Thx.

Robert_G 9. Nov 2004 10:29

Re: SQL-Parameter Problem
 
mach das mal so: :mrgreen:
SQL-Code:
WHERE Feld = :Parameter

Leon de Bar 9. Nov 2004 10:36

Re: SQL-Parameter Problem
 
Hi,

wenn ich es so eingebe:

Delphi-Quellcode:
      'WHERE ID.ID = :apptype';
  ParamByName('apptype').Value:=DSID;
dann habe ich den selben effekt. Muss ich unter type noch irgendetwas eingeben? ich bin Newbie deswegen die dummen fragen. Oder habe ich dich falsch verstanden?

Danke schon mal für die prompte Antwort.

Sharky 9. Nov 2004 10:38

Re: SQL-Parameter Problem
 
hai Leon,

Du hast nicht engegeben von welchem TDataSet das ParamByName ist ;-)

Delphi-Quellcode:
  ADOQuery1.ParamByName ('apptype').Value := DSID

Robert_G 9. Nov 2004 10:39

Re: SQL-Parameter Problem
 
Die Query sollte Prepared auf true haben. ;)
Damit wird autom. das Statement nach Paramtern durchsucht. Diese werden dann na die ParameterCollection angehängt.

Leon de Bar 9. Nov 2004 10:40

Re: SQL-Parameter Problem
 
Hi Sharky, hab dich schon vermisst... :-D

Also eben habe ich auch meinen fehler gefunden... musste es aber so eintragen:

Delphi-Quellcode:
  AdoQuery1.Parameters.ParamByName('apptype').Value:=DSID;
aber die ergebnismenge bleibt leer. Obwohl der richtige Wert in DSID eingetragen wird... :gruebel:

Robert_G 9. Nov 2004 10:46

Re: SQL-Parameter Problem
 
Zitat:

Zitat von Leon de Bar
...aber die ergebnismenge bleibt leer. Obwohl der richtige Wert in DSID eingetragen wird... :gruebel:

Ich kann dir mit der gleichen Sicherheit sagen, dass entweder in deinem Statement oder in deinem Wert der wurm steckt, wie ich dir sagen kann, dass 1+1==2 ist. ;)

Ich habe mal dein Statement von meiner oracle IDE formatieren lassen.
SQL-Code:
SELECT Mitgliedsnummer
      ,Vorname
      ,Name
      ,Strasse
      ,Land
      ,PLZ
      ,Ort
      ,Tel_1
      ,Fax_1
      ,Tel_2
      ,Fax_2
      ,Handy
      ,email
      ,GebDat
      ,Saldo
      ,Eintritt
      ,Austritt
      ,Spielernummer
      ,Trikot
      ,Spielerposition.Spielerpos
      ,Anrede
FROM  ID
       Left  JOIN(Spielerposition
       right JOIN(Anrede
       right JOIN(((((Mitglied
       Left  JOIN Kontakt ON Mitglied.ID = Kontakt.ID)
       Left  JOIN GebDatList ON Mitglied.ID = GebDatList.ID)
       Left  JOIN MG_Saldenliste ON Mitglied.ID = MG_Saldenliste.ID)
       Left  JOIN Mitgliedsstatus ON Mitglied.ID = Mitgliedsstatus.ID)
       Left  JOIN Spielerdaten ON Mitglied.ID = Spielerdaten.ID) ON Anrede.AID = Mitglied.AID)
        ON Spielerposition.SID = Spielerdaten.Spielerpos) ON ID.ID = Mitglied.ID
WHERE ID.ID = :apptype
:shock: Bist du dir sicher, dass du die Tabellen so verknüpfen willst?
Du verschachtelst die Joins inneinander -> Das kann man nicht nur verdammt schwierig lesen, das dürfte auch zuwenige Ergebnisse liefern. ;)

Leon de Bar 9. Nov 2004 10:56

Re: SQL-Parameter Problem
 
Ähm... also ich habe mir diesen Query gebaut damit er mir in meinem Grid alle daten anzeigt, die ich von meinen Mitgliedern brauche... wenn ich nun einen Doppelklick auf eine Zeile in meinem DBGrid mache, dann soll er mir alle Daten von dem Aktuellen Mitglied zeigen. dazu verwende ich die Variable DSID in der die ID des Datensatzes steht.

ich dachte mir in meinem "jugendlichen" Leichtsinn, dass ich mit dem Statement nur mit WHERE hinten dran die selben daten catchen kann wie im Grid auch... ist das nicht so? :pale:

Robert_G 9. Nov 2004 11:08

Re: SQL-Parameter Problem
 
Das sollte eigentlich schon gehen.
Aber liefert die Abfrage ohne WHERE-Clause wirklich alle möglichen Datensätze in denen du mit der DSID filtern willst?

Leon de Bar 9. Nov 2004 11:49

Re: SQL-Parameter Problem
 
also ohne geht es in dem grid. und ohne geht es auch in dem neuen form wo ich meine DBEdits damit fülle. aber immer nur für den ersten datensatz... egal welchen satz ich im grid anklicke, ich bekomme in meinem form3 mit dem DBEdits nur die daten des ersten satzes... :wall:

Robert_G 9. Nov 2004 11:58

Re: SQL-Parameter Problem
 
Was benutzt du denn für ein DBMS?
Manche DBs zicken bei der Kombi von Joins und WHERE-Clause rum.

Leon de Bar 9. Nov 2004 12:01

Re: SQL-Parameter Problem
 
achso, das hatte ich vergessen zu erwähnen.

arbeite mit access und den join-string habe ich mit acces oder besser von access erstellen lassen...

wie gesagt der funktioniert auch aber ich bekomme es nicht hin die daten des ausgewählten satzes anzeigen zu lassen.

ich bin mir nicht mal sicher ob ich den aktuellen satz sauber ermittel aber zumidest stimmt DSID mit der ID des satzes überein...

shmia 9. Nov 2004 12:23

Re: SQL-Parameter Problem
 
Zitat:

Zitat von Leon de Bar
arbeite mit access und den join-string habe ich mit acces oder besser von access erstellen lassen...

Die Jet-Engine hat bei bestimmten JOINS Probleme. :wall:
Du fragst dich vielleicht, warum geht's in Access wenn's mit ner ADOQuery nicht geht??
Abfragen aus Access heraus und über ADO sind zwar ähnlich aber nicht identisch!

2 Dinge müssen passen:Die Syntax ist wie folgt:
SQL-Code:
SELECT [felderliste] FROM
(TabelleA INNER JOIN TabelleB ON TabelleA.Feld1=TabelleB.Feld2)
INNER JOIN TabelleC ON TabelleC.Feld3=TabelleA.Feld4
WHERE ....
Man beachte die Klammersetzung! Hier nochmal als Kurzform mit 5 Tabellen:
SQL-Code:
FROM (((A JOIN B ON ...) JOIN C ON ...) JOIN D ON ...) JOIN E ON ....

Leon de Bar 9. Nov 2004 12:26

Re: SQL-Parameter Problem
 
nur das ich das richtig verstehe...

ein und der selbe Query funktioniert einmal und dann wieder nicht??? :shock:

shmia 9. Nov 2004 12:48

Re: SQL-Parameter Problem
 
Zitat:

Zitat von Leon de Bar
nur das ich das richtig verstehe...
ein und der selbe Query funktioniert einmal und dann wieder nicht??? :shock:

JEPP!
Vermutung: es gibt verschiedene Wege
Access -> DAO -> datenbank.mdb
Delphi -> ADO Express -> ADO -> OLE DB Provider for JET -> DAO -> datenbank.mdb
Beim Zugriff über ADO bleibt dann Performance & Funktionalität etwas auf der Strecke.

Leon de Bar 9. Nov 2004 12:52

Re: SQL-Parameter Problem
 
verfluchte .... :wall:

okay, dann muss ich mir für dieses problem einen Work-Around ausdenken...

Danke für die Info...

Robert_G 9. Nov 2004 12:54

Re: SQL-Parameter Problem
 
Zitat:

Zitat von Leon de Bar
verfluchte .... :wall:

okay, dann muss ich mir für dieses problem einen Work-Around ausdenken...

Danke für die Info...

wie wär's zur abwechslung mit einer Datenbank? :mrgreen:
Firebird würde isch in deinem Fall wohl anbieten ;)

Leon de Bar 9. Nov 2004 12:58

Re: SQL-Parameter Problem
 
ja, ne ist klar. ich bin aber anfänger und meine vorgeschichte zwingt mich erst mal dazu mit access zu arbeiten... :wall: :wall: :wall:

aber das nächste projekt mach ich dann entweder damit oder mit mysql... mal sehen. :zwinker:

Leon de Bar 10. Nov 2004 13:05

Re: SQL-Parameter Problem
 
:hello: So noch mal an alle die es interessiert.... ES FUNZT!

Es lag NICHT an der SQL-Abfrage!!! Die ist völlig in Ordnung. Es war mein Fehler! Ich habe die Abfrage einfach nur falsch plaziert. Statt im OnShow, habe ich sie ins OnCreate gepackt. das konnte nicht funktionieren.

Danke an alle die hier mitgeholfen haben. dadurch habe ich wieder einiges gelernt. :dance:

Gruß Leon.


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