Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO mehrere gleiche Parameter in SQL String (https://www.delphipraxis.net/125265-ado-mehrere-gleiche-parameter-sql-string.html)

brechi 3. Dez 2008 10:11

Datenbank: MS SQL 2000 • Version: 2000 • Zugriff über: Ado

ADO mehrere gleiche Parameter in SQL String
 
Folgende SQL Abfrage:

SQL-Code:
select * from Str where
GueltigVon >= :Datum and GueltigBis < :Datum
Mit Datum1 und Datum2 funktioniert es ohne Probleme wenn ich dann im Programm das gleiche Datum setzte.


Habe ich 2x "Datum" in der Parameters Liste und setzt das mit ParamByName 1x bzw. 2x:
'Parameter was inproperly defined. Inconsistent or incomplete information was provided'

Habe ich 1x "Datum" in der Parameters Liste und setzt das mit ParamByName:
'No value given for one or more required parameters'

Wie kann ich einen Parameter definieren der ALLE vorkommen im SQL String ersetzt (Delphi 2005)

nahpets 3. Dez 2008 10:19

Re: ADO mehrere gleiche Parameter in SQL String
 
Hallo,

nimm :DatumVon und :DatumBis und weise diesen den gleichen Wert zu, also zwei Parameterzuweisungen. In der von Dir genutzten Form ist mir das noch nicht gelungen, auch wenn es die durchaus einfachere Methode zu sein scheint.
Alternative: :Datum durch Stringersetzung gegen den gewünschten Wert austauschen, was ich aber für unelegant halte.
Die Ersetzungsroutine für die ParamByName scheint nicht so ganz klever implementiert zu sein ;-)

mkinzler 3. Dez 2008 10:25

Re: ADO mehrere gleiche Parameter in SQL String
 
Ich kenne mich mit MSSQL nicht so aus aber vielleicht ginge auch

SQL-Code:
select
    * 
from
    Str
where
    :datum between GueltigVon and GueltigBis;

DeddyH 3. Dez 2008 10:32

Re: ADO mehrere gleiche Parameter in SQL String
 
Daran hatte ich auch gedacht, aber IIRC ist BETWEEN inklusive, d.h. er erhält zuviele Datensätze (GueltigBis soll ja nicht enthalten sein).

nahpets 3. Dez 2008 10:40

Re: ADO mehrere gleiche Parameter in SQL String
 
Zitat:

Zitat von DeddyH
Daran hatte ich auch gedacht, aber IIRC ist BETWEEN inklusive, d.h. er erhält zuviele Datensätze (GueltigBis soll ja nicht enthalten sein).

Da sollte dann aber
SQL-Code:
select
    * 
from
    Str
where
    :datum between GueltigVon and (GueltigBis - 1);
funktionieren.

DeddyH 3. Dez 2008 10:44

Re: ADO mehrere gleiche Parameter in SQL String
 
Abhängig vom internen Datumsformat könnte das klappen. Aber MSSQL bietet doch bestimmt auch Datumsfunktionen an (DATEADD oder so), dann sollte man das IMHO besser damit machen.

brechi 3. Dez 2008 10:57

Re: ADO mehrere gleiche Parameter in SQL String
 
das Datum wird öfter als 2 mal verwendet (4 bzw 6)

ich habs momentan so:

SQL-Code:
DECLARE @Datum datetime;
SET @Datum = :Datum;

SELECT ...
(a.GueltigVon <= @Datum) AND (a.GueltigBis > @Datum) AND ...
Find ich jetzt aber net so schön. Insbesondere weiß ich nicht obs anschließend auch auf mySQL / Oracle etc. läuft

Worauf ich aber hinauswollte: Die Ado Parametersetzung erlaubt es also nicht?

nahpets 3. Dez 2008 11:02

Re: ADO mehrere gleiche Parameter in SQL String
 
Hallo,
Zitat:

Zitat von brechi
das Datum wird öfter als 2 mal verwendet (4 bzw 6)

ich habs momentan so:

SQL-Code:
DECLARE @Datum datetime;
SET @Datum = :Datum;

SELECT ...
(a.GueltigVon <= @Datum) AND (a.GueltigBis > @Datum) AND ...
Find ich jetzt aber net so schön. Inbesondere weiß ich nicht obs anschließend auch auf mySQL / Oracle etc. läuft

mySQL weiß ich nicht, Oracle nein, da ist Syntax der Variabelendefinition anders, möchte aber nicht ausschließen, dass die Parameterersetzung dort besser funktioniert.

shmia 3. Dez 2008 17:16

Re: ADO mehrere gleiche Parameter in SQL String
 
Also bei ADO muss jeder Parameter einen anderen Namen haben!
Dies gilt auch dann, wenn man genau den gleichen Parameter mehrmals verwenden möchte.
Nicht schön, aber ist halt so.
Wobei das wahrscheinlich eher an der ADO-Kapselung der VCL liegt, als an ADO selber.

brechi 6. Mär 2009 12:41

Re: ADO mehrere gleiche Parameter in SQL String
 
So ich upps nochmal.
Ich habe immer noch das selbe Problem.
In MSSQL funktioniert obige Abfrage ja ohne Probleme, mySQL kann (wohl) keine lokalen Variablen in einer Abfrage definieren (-> nur in stored procedures) und Access wohl auch nicht.

Kennt jemand eine andere (schönere) Möglichkeit obiege Abfrage mit einem Parameter unter mssql / mysql und Access zum laufen zu bekommen? Es ist echt grauenhaft, wenn ich 6 mal auf eine gleiche Variable prüfe, dass ich dann in ADO 6 verschiedene Parameter setzen muss.

Und eine Variablendefinition die dann in Access (mssql, oracle etc.) funktioniert, gibts ja anscheindend auch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.
Seite 1 von 2  1 2      

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