Thema: Delphi SQL Parameterübergabe

Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: SQL Parameterübergabe

  Alt 28. Jun 2005, 07:53
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.
  1. der SQL Befehl LIKE funktioniert nur mit Strings. Das steht in jedem SQL Buch. Dieser Operand vergleicht Zeichenfolgen mit Wildcards (%).
  2. 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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat