Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query: Parameter nicht gefunden (https://www.delphipraxis.net/101399-query-parameter-nicht-gefunden.html)

guidok 12. Okt 2007 13:56

Datenbank: MSSQL Express • Zugriff über: ADO

Query: Parameter nicht gefunden
 
Warum funktioniert das nicht?
Delphi-Quellcode:
procedure TSQLConnection.CreateDB(DBName: string);
const
  csql='DECLARE @DBNAME VARCHAR(255)'#13
      +'SET @DBNAME=:PDBNAME'#13
      +'USE MASTER'#13
      +'IF DB_ID (N @DBNAME) IS NULL'#13
      +'CREATE DATABASE @DBNAME';
begin
  if Connection.Connected then
  try
    Query.Active:=False;
    Query.SQL.Clear;
    Query.SQL.Text:=csql;
    Query.Prepared:=True;
    Query.Parameters.ParamValues['PDBNAME']:=DBName;
    Query.ExecSQL;
  except
    //nichts zu tun
  end;
end;
Ich bekomme die Meldung "Parameter PDBNAME nicht gefunden. Gibt es eine andere Möglichkeit Werte in den SQL Text zu bekommen?

mkinzler 12. Okt 2007 13:58

Re: Query: Parameter nicht gefunden
 
Indem du das beim zusammenbauen des Statements setzt

guidok 12. Okt 2007 14:10

Re: Query: Parameter nicht gefunden
 
In der Art?

Delphi-Quellcode:
  +'CREATE DATABASE '+DBName;
Das wird mir spätestens dann zu unübersichtlich, wenn Parameter dazukommen die in Hochkommas stehen, dann lieber Parameter. Muss ich eigentlich zu Beginn Prepared auf False setzen?

mkinzler 12. Okt 2007 14:17

Re: Query: Parameter nicht gefunden
 
Die weiteren Parameter kannst du ja verwenden.

guidok 26. Okt 2007 06:09

Re: Query: Parameter nicht gefunden
 
Ich hänge mich noch einmal an meine urspüngliche Frage an, weil sie sich im Prinzip nicht verändert hat.

Warum funktioniert das:
Delphi-Quellcode:
    SQL.Add('SELECT * FROM '+Tablename+';');
und nicht das:
Delphi-Quellcode:
    SQL.Add('SELECT * FROM :PTNAME;');
    Parameters.ParamValues['PTNAME']:=Tablename; //Parameter nicht gefunden
Ich verwende gerne Parameter, weil das den SQL-Text wesentlich übersichtlicher macht, aber leider weigert es sich in manchen Fällen beharrlich zu funktionieren. Gibt es da etwas zu beachten, was ich noch nicht weiß?

Wie bastelt ihr eure SQL Syntax zusammen? Was ist die beste Lösung?

Bernhard Geyer 26. Okt 2007 06:19

Re: Query: Parameter nicht gefunden
 
Zitat:

Zitat von guidok
Ich verwende gerne Parameter, weil das den SQL-Text wesentlich übersichtlicher macht, aber leider weigert es sich in manchen Fällen beharrlich zu funktionieren. Gibt es da etwas zu beachten, was ich noch nicht weiß?

Für das obige Beispiel kann die Datenbank keine Queryplan erzeugen bzw. Parameter verwenden denn die dafür nötige Angabe der Quelltabelle ist variabel.

Zitat:

Zitat von guidok
Wie bastelt ihr eure SQL Syntax zusammen? Was ist die beste Lösung?

Für diesen Fall würde ich nehmen:
Format('SELECT * FROM %s;', [Tablename]);
Oder versuchen eine SP zu erzeugen. Aber hier könnte das Problem sein das die Feldanzahl des Ergebnisses bei der Speicherung der SP nicht fest ist und damit die SP nicht angelegt werden kann.

guidok 26. Okt 2007 06:26

Re: Query: Parameter nicht gefunden
 
Zitat:

Für das obige Beispiel kann die Datenbank keine Queryplan erzeugen bzw. Parameter verwenden denn die dafür nötige Angabe der Quelltabelle ist variabel.
D.h. es muss erst ein Tabellenname feststehen, bevor Parameter verwendet werden können? Aha!

marabu 26. Okt 2007 06:39

Re: Query: Parameter nicht gefunden
 
Moin,

die korrekte Verwendung von Parametern in Verbindung mit OLE DB (ADO) ist in der Dokumentation genau erklärt:

[equote="OLE DB Programmer's Reference :: Using Parameters"]...
In most cases, parameter markers can legally appear only in certain positions within an SQL statement. They cannot take the place of an identifier, such as a column name in the SELECT list or a table name in the FROM clause, and are not allowed in data definition language (DDL) statements. ...
[/equote]
Grüße vom marabu

guidok 26. Okt 2007 06:42

Re: Query: Parameter nicht gefunden
 
Danke an den Marabu. Ich weiß bescheid.

RavenIV 26. Okt 2007 08:38

Re: Query: Parameter nicht gefunden
 
Zitat:

Zitat von marabu
Moin,

die korrekte Verwendung von Parametern in Verbindung mit OLE DB (ADO) ist in der Dokumentation genau erklärt:

[equote="OLE DB Programmer's Reference :: Using Parameters"]...
In most cases, parameter markers can legally appear only in certain positions within an SQL statement. They cannot take the place of an identifier, such as a column name in the SELECT list or a table name in the FROM clause, and are not allowed in data definition language (DDL) statements. ...
[/equote]
Grüße vom marabu

Also:
Parameter nur bei WHERE oder ORDER oder JOIN einsetzen.
Denn nur dort machen sie Sinn.

z.B.
Delphi-Quellcode:
SELECT * FROM Benutzertabelle
WHERE UserName = :Benutzer
ORDER BY :Nummer


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