获取QueryString的Params及其数据类型

时间:2014-09-01 13:56:53

标签: sql-server delphi sqlparameters

假设你有一个delphi接口,它有一个用户输入和SQL查询的TEdit

SELECT * FROM X WHERE   X.A = :A and  X.B = :B and X.C= :C

有没有办法获得:A,:B,:C Params的类型?我设法得到了Params的名字。使用此代码

procedure TfrmA.Button1Click(Sender: TObject);
var
    queryInput, queryOutput , aux : string;
    pozitie : Integer;
    param : string;
    Ch,Chx : Char;
begin
    queryInput :=  TEdit.Text;
    queryOutput := StringReplace(queryInput,':','@',[rfReplaceAll, rfIgnoreCase]);
    aux := Copy(queryOutput,AnsiPos('@',queryOutput),200);
    while Length(aux ) > 0 do   begin
    if   AnsiPos('@',aux ) = 0 then break;
    for Ch in aux do
    begin
      if Ch = ' ' then begin
      param := param + ' ';
      break
      end else param := param + Ch;
    end;
    ShowMessage(param);
    test := Copy(test,2,200);
    test := Copy(test,AnsiPos('@',test),200);
    end;
end;

Param字符串现在将包含:@A @B @C

无论如何我能找到params的数据类型吗?

1 个答案:

答案 0 :(得分:1)

如果您能够使用Adodataset,您可以使用它来获取所需的信息。     使用TypInfo;

procedure TForm5.Button1Click(Sender: TObject);
var
 i:Integer;
begin
  Ads.CommandText := 'Update Adressen set geboren=:birthdate where name=:n and ID=:i';
  Memo1.Lines.Clear;
  for I := 0 to Ads.Parameters.Count - 1 do
      begin
         Memo1.Lines.Add(Ads.Parameters[i].Name + ' : ' + GetEnumName(TypeInfo(TDataType), Integer(Ads.Parameters[i].DataType)) + ' : '+ IntToStr(Ads.Parameters[i].Size) )
      end;
end;

示例的输出将是:

birthdate : ftDateTime : 16
n : ftWideString : 40
i : ftInteger : 4