Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TParams und SQL Strings *heul* (https://www.delphipraxis.net/2766-tparams-und-sql-strings-%2Aheul%2A.html)

FlatG 6. Feb 2003 10:36


TParams und SQL Strings *heul*
 
Boah alter Schwede ich kriegs einfach net hin

Code:
procedure TFenster_Main.ComboBox1Change(Sender: TObject);
var
    stmtParams : TParams;
begin
    Query1.SQL.Clear;
    stmtParams := TParams.Create;
    stmtParams.CreateParam(ftString, 'Abfrage', ptInput   );
    stmtParams.ParamByName('Abfrage').AsString := 'Word';
    Query1.SQL.Add( ' SELECT * FROM T_Text_Typ WHERE (Name = '':Abfrage'') ');
    Query1.Prepare;
    Query1.ExecSQL();
    Query1.Open;

    Query1.Close;
end;
es kann eigentlich nur an den Semikolons liegen, dass sich die SQL Abfrage in nichts auflöst, weil der Parameteraufbau ist doch ok, oder etwa nicht?

Gollum 6. Feb 2003 10:38

Hallo,

folgend ein Ausschnitt aus der Delphi-Hilfe:

Code:
Query2.SQL.Clear;

Query2.SQL.Add('INSERT INTO LÄNDER (NAME, HAUPTSTADT, EINWOHNER)');
Query2.SQL.Add('VALUES (:Name, :Hautpstadt, :Einwohner)');

Query2.Params[0].AsString := 'Liechtenstein';
Query2.Params[1].AsString := 'Vaduz';
Query2.Params[2].AsInteger := 420000;
Query2.ExecSQL;

sakura 6. Feb 2003 10:39

Re: TParams und SQL Strings *heul*
 
Einfach mal so ändern
Delphi-Quellcode:
procedure TFenster_Main.ComboBox1Change(Sender: TObject);
begin
    Query1.SQL.Clear;
    Query1.SQL.Add( ' SELECT * FROM T_Text_Typ WHERE (Name = '':Abfrage'') ');
    Query1.Params.ParamByName('Abfrage').AsString := 'Word';
    Query1.Prepare;
    Query1.ExecSQL();
    Query1.Open;

    Query1.Close;
end;
...:cat:...

FlatG 6. Feb 2003 10:43

hmm, also ich bin nun wirklich niemand, der hier antanzt ohne sich vorher eingehendst mit der HIlfe beschäftigt zu haben und die Zeilen, die du mir da kopiert hast, KANN ICH NICHT MEHR SEHEN

ich bin newbie und kriegs net hin, so hats jedenfalls auch net hingehauen gehabt, als ichs versucht hab auf meine select anweisung umzubasteln

könntest du mir vielleicht mal schnell ein SELECT Beispiel daraus basteln?

und wo genau ist der fehler in meinem script da oben?

Gollum 6. Feb 2003 10:45

Hallo,

in Deinem Fall macht ExexSQL keinen Sinn, also weglassen. Sollte es mit dem Parameter nicht funtionieren, kannst Du noch folgendes ausprobieren:

Code:
 Query1.SQL.Clear;
 Query1.SQL.Add('SELECT * FROM T_Text_Typ');
 Query1.SQL.Add(Format('WHERE (Name="%s")', ['Word']));
 Query1.Prepare;
 Query1.Open;
 ...
 Query1.Close;

FlatG 6. Feb 2003 10:47

@Sakura
 
eine Exception der Klasse EDatabaseError tritt auf:

Meldung: 'Query1: Parameter 'Abfrage' nicht gefunden'

Kleiner Nachtrag: Ob ich nun Open weglasse, den Parameterwert erst nach der SQL Anweisung zuordne (egal ob ich vorher paramcreate mache oder nicht) ich kriege immer eine Exception :/

Gollum 6. Feb 2003 10:57

Hallo,

generell gilt: Bei SELECT immer Query1.Open und bei Datenmanipulation wie INSERT, UPDATE immer Query1.ExecSQL.

Wie sieht es mit meinem Beispiel aus? Funtioniert dieser Weg?

FlatG 6. Feb 2003 11:02

Leider auch nicht =(

Code:
    Query1.SQL.Clear;
    Query1.SQL.Add( ' SELECT * FROM T_Text_Typ');
    Query1.SQL.Add(Format('WHERE (Name="%s")', ['Word']));
    Query1.Prepare;
    Query1.Open;
    ShowMessage(Query1.FieldByName('Name').AsString);
    Query1.Close;
Diesmal gibts folgende Exception:

Im Projekt soundso ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Allgemeiner SQL-Fehler [Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben. Prozess wurde angehalten etc.

Gollum 6. Feb 2003 11:03

Hallo,

wie sieht Dein Code jetzt aus, der die Fehlermeldung erzeugt?

Lemmy 6. Feb 2003 11:04

Re: TParams und SQL Strings *heul*
 
Hi,

Delphi-Quellcode:
procedure TFenster_Main.ComboBox1Change(Sender: TObject);
begin
    Query1.SQL.Clear;
    Query1.SQL.Add( ' SELECT * FROM T_Text_Typ WHERE (Name = '':Abfrage'') ');
    Query1.Params.ParamByName('Abfrage').AsString := 'Word';
    Query1.Prepare;
    Query1.ExecSQL();
    Query1.Open;

    Query1.Close;
end;
Was sollen die besch*** ' in der Abfrage?? So muss das aussehen:

Delphi-Quellcode:
procedure TFenster_Main.ComboBox1Change(Sender: TObject);
begin
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT * FROM T_Text_Typ WHERE (Name=:Abfrage)');
   // Query1.Prepare;
    Query1.Params.ParamByName('Abfrage').AsString := 'Word';
    Query1.Open;
    Query1.Close;
end;
Wobei ich das Prepare versuchsweise mal weglassen würde. Der Parameter Abfrage ist Bestandteil des Statements Mit den ' wird es als stink normaler Text ausgewertet, d.h ein SQL wie folgt angenommen:

SELECT * FROM T_Text_Typ WHERE (Name=':Abfrage');


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz