假设你有一个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的数据类型吗?
答案 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