AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Query: Parameter nicht gefunden
Thema durchsuchen
Ansicht
Themen-Optionen

Query: Parameter nicht gefunden

Ein Thema von guidok · begonnen am 12. Okt 2007 · letzter Beitrag vom 4. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#1

Query: Parameter nicht gefunden

  Alt 12. Okt 2007, 14:56
Datenbank: MSSQL Express • Zugriff über: ADO
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Query: Parameter nicht gefunden

  Alt 12. Okt 2007, 14:58
Indem du das beim zusammenbauen des Statements setzt
Markus Kinzler
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#3

Re: Query: Parameter nicht gefunden

  Alt 12. Okt 2007, 15:10
In der Art?

  +'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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Query: Parameter nicht gefunden

  Alt 12. Okt 2007, 15:17
Die weiteren Parameter kannst du ja verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#5

Re: Query: Parameter nicht gefunden

  Alt 26. Okt 2007, 07:09
Ich hänge mich noch einmal an meine urspüngliche Frage an, weil sie sich im Prinzip nicht verändert hat.

Warum funktioniert das:
    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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Query: Parameter nicht gefunden

  Alt 26. Okt 2007, 07:19
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 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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#7

Re: Query: Parameter nicht gefunden

  Alt 26. Okt 2007, 07:26
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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Query: Parameter nicht gefunden

  Alt 26. Okt 2007, 07:39
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
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: Query: Parameter nicht gefunden

  Alt 26. Okt 2007, 07:42
Danke an den Marabu. Ich weiß bescheid.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Query: Parameter nicht gefunden

  Alt 26. Okt 2007, 09:38
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
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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