Autor Beitrag
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Di 25.03.08 15:13 
Hallo,

Ich glaub ich stell mich grad ein bisschen dumm.

Es geht um die Eigenschaft Params von TQuery.

  1. 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?
  2. Wie mache ich zur Laufzeit einen neuen Parameter? Geht das auch wenn TQuery.Active False ist?


Danke schon mal
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 25.03.08 15:19 
Am Besten .ParamCheck auf True stellen, dann werden Parameter automatisch anhand der Abfrage erzeugt:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Di 25.03.08 15:41 
Ah, Vielen Dank!
Das wars eigentlich auch schon.
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 26.03.08 12:37 
Sollte eigentlich automatisch anhand des Feldtype der Datenbank erkannt werden. Sonst

ausblenden Delphi-Quelltext
1:
Query.ParamByName('<Name>').asInteger := ...					

_________________
Markus Kinzler.
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mi 26.03.08 15:03 
ParamCheck ist True;

Der Parameter heißt SchiessenID

den Parameter habe ich auf diese Weise erstellt:
ausblenden Delphi-Quelltext
1:
Query.ParamByName('SchiessenID').AsInteger := Value;					

in Query.SQL steht:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mi 26.03.08 19:17 
user profile iconmkinzler 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 26.03.08 20:45 
Nein.
ausblenden Delphi-Quelltext
1:
2:
3:
Query.SQL.Text :'select * from Foo where Field = :Bar';   // 1.
Query.Params.ParamByName('Bar').AsInteger := 123;         // 2.
Query.Active := True;                                     // 3.

_________________
Na denn, dann. Bis dann, denn.
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Mi 26.03.08 22:02 
ausblenden Delphi-Quelltext
1:
2:
3:
Query.SQL.Text :'select * from Foo where Field = :Bar';   // 1. ist bei mir schon zur Entwurfszeit gesetzt
Query.Params.ParamByName('Bar').AsInteger := 123;         // 2. mach ich zur Laufzeit am Anfang
Query.Active := True;                                     // 3. mache auch, davor ist Query.Active = False


am besten ich probier das ganze nochmal in einem kleinen Testprojekt aus, mal schaun ob ich dann draufkomme...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 27.03.08 13:36 
user profile iconalzaimar 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 27.03.08 13:41 
Hast du die Abfrage auch vorher zugewiesen?

_________________
Markus Kinzler.
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 27.03.08 13:48 
ja, die eigenschaft SQL habe ich auch schon zur entwurfszeit festgelegt.
Erichgue
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 86

Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
BeitragVerfasst: Do 27.03.08 13:57 
user profile iconJakob Schöttl hat folgendes geschrieben:
ja, die eigenschaft SQL habe ich auch schon zur entwurfszeit festgelegt.


ParamCheck auf True?

Erich
Jakob Schöttl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: 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!