Zitat von
Luciano:
(SN ist ein Integerwert)
Delphi-Quellcode:
if RadioButton1.Checked = True
then
begin
with Q_SUCHE
do
begin
Close;
SQL.Clear;
SQL.Add('
SELECT * FROM CKIII ');
SQL.Add('
WHERE SN LIKE :v_SUCHE ');
Prepared := True;
Parameters.ParamByName('
v_SUCHE').Value := Edit1.Text+'
%';
Open;
end;
end;
Die Fehlermeldung lautet " Die Anwendung verwendet für den aktuellen Vorgang einen Wert vom falschen Typ "
Es gibt 2 Dinge die zu Deinem Problem führen.
- der SQL Befehl LIKE funktioniert nur mit Strings. Das steht in jedem SQL Buch. Dieser Operand vergleicht Zeichenfolgen mit Wildcards (%).
- Wenn SN in der Datenbank ein String ist, dann sollte der Parameter auch auf String eingestellt werden.
Delphi-Quellcode:
...
// Beispiel mit Tabelle CLients aus DBDEMOS (TQuery aus BDE Pallette verwendet)
with query1
do
begin
sql.Text := '
select * from clients where last_name like :last_name;';
Params.ParamByName('
last_name').ParamType := ptInput;
// Params.ParamByName('last_name').DataType := ftString; // <-- wichtig !
// Params.ParamByName('last_name').Value := Edit1.Text + '%';
// oder besser
// Mit AsString zuweisen um DataType auf ftString automatisch zu setzen
Params.ParamByName('
last_name').AsString := Edit1.Text + '
%';
Open;
end;
...
wenn SN in der Datenbank Integer ist könnte man das so lösen:
Delphi-Quellcode:
...
if RadioButton1.Checked = True
then
begin
with Q_SUCHE
do
begin
Close;
SQL.Clear;
SQL.Add('
SELECT * FROM CKIII ');
SQL.Add('
WHERE SN > :v_SUCHE ');
// kein LIKE, sondern =, >, =>, < und <=
Prepared := True;
Parameters.ParamByName('
v_SUCHE').ParamType := ptInput;
Parameters.ParamByName('
v_SUCHE').DataType := ftInteger;
Parameters.ParamByName('
v_SUCHE').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('
v_SUCHE').AsInteger := StrToInt(Edit1.Text);
Open;
end;
end;
...
Zitat von
Luciano:
Wie kann das sein? Ich glaube ich rate meinem Chef wieder zu Delphi 6!!!
Wieso das ? IN Delphi 6 hast Du das gleiche Problem.