Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Parameter-Problem beim PreparedStatement (https://www.delphipraxis.net/103237-parameter-problem-beim-preparedstatement.html)

sunny-andy 12. Nov 2007 23:47

Datenbank: Ms Sql Server • Version: 2000 • Zugriff über: Ado

Parameter-Problem beim PreparedStatement
 
Hallo liebe Leute!

Mit der TAdoCommand bereite ich einen Sql-Befehl vor, in welchen ich einen Parameter einsetzen möchte:

Delphi-Quellcode:
FAdoCommand.Parameters.ParamByName(Parameter).Value := Inhalt;
Mein Sql-Befehl sieht folgendermaßen aus:
SQL-Code:
select * from kundenliste
where kamkampagne_id = :kamkampagne_id
ORDER BY k1kunden_id
Nun habe ich folgendes Problem:
Es gibt Fälle, bei denen der Parameter "kamkampagne_id" eingesetzt werden soll. Das ist ein int-Wert.

Es gibt aber auch Fälle, bei denen ich die where-Abfrage gern "ausschalten" würde. Am einfachsten (wenn auch nicht am schnellsten) kann man ja notfalls folgendes einsetzen:

SQL-Code:
select * from kundenliste
where kamkampagne_id = kamkampagne_id
ORDER BY k1kunden_id
Dort habe ich einfach dieselbe Spalte sozusagen als Parameter eingesetzt -> Also werden alle Datensätze angezeigt.

Wenn ich dies über die AdoCommand machen möchte und ich dort "kamkampagne_id" einsetze mit obigem Befehl, dann setzt er das als String ein. Die Folge ist, es gibt natürlich einen Fehler, da nur integer-Werte zulässig sind. Aber ich möchte ja eigentlich, dass kein String eingesetzt werden soll, sondern dass mit "kamkampagne_id" die Spalte gemeint ist. Dies funktioniert ja auch in der zweiten Anweisung.

Ich hoffe, ich habe mich deutlich genug ausgedrückt.
Wenn ihr mir helfen könnt, dann her mit den Tipps :-)
Danke, Andy

PS: Ich habe die Sql-Anweisungen in externe Dateien ausgelagert, deswegen kann ich da auch im Quelltext nicht mal eben die where-Abfrage auslassen.

mkinzler 12. Nov 2007 23:52

Re: Parameter-Problem beim PreparedStatement
 
Nimm ein like statt = dann kannst du durch setzen von % alle anzeigen

sunny-andy 12. Nov 2007 23:58

Re: Parameter-Problem beim PreparedStatement
 
Hallo,

ich habe es mal eben ausprobiert:

SQL-Code:
select * from kundenliste
where kamkampagne_id LIKE :kamkampagne_id
ORDER BY k1kunden_id
Die AdoComponente meldet: "Die Anwendung verwendet für den aktuellen Vorgangn einen Wert vom falschen Typ"

Ich habe nämlich folgendes eingesetzt:
Delphi-Quellcode:
FAdoCommand.Parameters.ParamByName('kamkampagne_id').Value := '%';
War doch so gemeint oder?

mkinzler 13. Nov 2007 00:00

Re: Parameter-Problem beim PreparedStatement
 
Delphi-Quellcode:
AdoCommand.Parameters.ParamByName('kamkampagne_id').asString:= '%';

sunny-andy 13. Nov 2007 00:16

Re: Parameter-Problem beim PreparedStatement
 
Juhu, es funktioniert!

So habe ich es im Endeffekt gelöst. Ich glaube das "asString" hast du mit einer anderen Komponente verwechselt ;-) Aber das war der richtige Weg!
Denn im AdoCommand findet er die Property bei mir nicht.

Delphi-Quellcode:
FAdoCommand.Parameters.ParamByName(Parameter).DataType := ftString;
  FAdoCommand.Parameters.ParamByName(Parameter).Value := Inhalt;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr.

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 by Thomas Breitkreuz