| Autor |
Beitrag |
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Di 25.03.08 15:13
Hallo,
Ich glaub ich stell mich grad ein bisschen dumm.
Es geht um die Eigenschaft Params von TQuery.
- Stimmt es, dass ich die Parameter in der Eigenschaft SQL dann einfach verwenden kann - dass also der Name des Parameters dann durch den entsprechenden Wert ersetzt wird?
- Wie mache ich zur Laufzeit einen neuen Parameter? Geht das auch wenn TQuery.Active False ist?
Danke schon mal
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Di 25.03.08 15:19
Am Besten .ParamCheck auf True stellen, dann werden Parameter automatisch anhand der Abfrage erzeugt:
SQL-Anweisung 1:
| select <Feldliste> from <Tabelle> where <Feld1> = :Parameter1; |
erzeugt automatisch den Parameter Parameter1
auf den du dann z.B. per
query.ParamByName('Parameter1').Value zugreifen kannst.
_________________ Markus Kinzler.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Di 25.03.08 15:41
Ah, Vielen Dank!
Das wars eigentlich auch schon.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mi 26.03.08 11:58
Jetzt hab ich doch noch eine Frage.
Mein Parameter muss für die Abfrage den richtigen Typ haben (sonst gibt es eine Exception).
Wie lege ich fest, dass der Parameter Integer sein soll?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 26.03.08 12:37
Sollte eigentlich automatisch anhand des Feldtype der Datenbank erkannt werden. Sonst
Delphi-Quelltext 1:
| Query.ParamByName('<Name>').asInteger := ... |
_________________ Markus Kinzler.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mi 26.03.08 15:03
ParamCheck ist True;
Der Parameter heißt SchiessenID
den Parameter habe ich auf diese Weise erstellt:
Delphi-Quelltext 1:
| Query.ParamByName('SchiessenID').AsInteger := Value; |
in Query.SQL steht:
SQL-Anweisung 1: 2: 3: 4:
| SELECT Schuetzen.Name, Vereine.Vereinsname, Schuetzen.Geburtsdatum FROM Schuetzen, zSchuetzenVereine, Vereine WHERE (Schuetzen.ID = zSchuetzenVereine.SchuetzenID) AND (zSchuetzenVereine.VereineID = Vereine.ID) AND (zSchuetzenVereine.VereineID IN ( SELECT VereineID FROM zSchiessenVereine WHERE (SchiessenID = :SchiessenID) )) ORDER BY Name, Verein |
Einloggen, um Attachments anzusehen!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 26.03.08 15:29
Der Parameter wird durch setzen der Abfrage erzeugt! Zuweisung ist erst später möglich
_________________ Markus Kinzler.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mi 26.03.08 19:17
mkinzler hat folgendes geschrieben: | | Der Parameter wird durch setzen der Abfrage erzeugt! Zuweisung ist erst später möglich |
oh, aber er muss doch schon vor der Abfrage definiert sein!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 26.03.08 20:45
Nein.
Delphi-Quelltext 1: 2: 3:
| Query.SQL.Text :'select * from Foo where Field = :Bar'; Query.Params.ParamByName('Bar').AsInteger := 123; Query.Active := True; |
_________________ Na denn, dann. Bis dann, denn.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Mi 26.03.08 22:02
Delphi-Quelltext 1: 2: 3:
| Query.SQL.Text :'select * from Foo where Field = :Bar'; Query.Params.ParamByName('Bar').AsInteger := 123; Query.Active := True; |
am besten ich probier das ganze nochmal in einem kleinen Testprojekt aus, mal schaun ob ich dann draufkomme...
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 26.03.08 22:16
Vielleicht hilft es, den Datentypen des Parameters auch explizit zur Entwurfszeit zu setzen. Ich jedenfalls hab damit keine Probleme.
_________________ Na denn, dann. Bis dann, denn.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 27.03.08 13:36
alzaimar hat folgendes geschrieben: | | Vielleicht hilft es, den Datentypen des Parameters auch explizit zur Entwurfszeit zu setzen |
das wäre wahrscheinlich das Beste, aber das geht irgendwie nicht:
in dem Editor für Params sind alle Schaltflächen grau, egal ob die Datenmenge geschlossen oder geöffnet ist...
Einloggen, um Attachments anzusehen!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Do 27.03.08 13:41
Hast du die Abfrage auch vorher zugewiesen?
_________________ Markus Kinzler.
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 27.03.08 13:48
ja, die eigenschaft SQL habe ich auch schon zur entwurfszeit festgelegt.
|
|
Erichgue
      
Beiträge: 86
Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
|
Verfasst: Do 27.03.08 13:57
Jakob Schöttl hat folgendes geschrieben: | | ja, die eigenschaft SQL habe ich auch schon zur entwurfszeit festgelegt. |
ParamCheck auf True?
Erich
|
|
Jakob Schöttl 
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 27.03.08 14:06
ah! jetzt seh ichs! Der Parameter entsteht automatisch, wenn ich die Eigenschaft SQL setze. Dann kann ich dem Parameter als DataType ftInteger zuweisen!
Ich hab erst gedacht, der Parameter wird erst bei der Abfrage selbst (also Open) erzeugt.
Dann schau ich mal weiter...
Vielen Dank für eure Bemühungen!
|
|