2

我有一些包含参数的 SQL 命令:(请注意,myID 在 SQL 中具有“int”类型)

vSqlString :='Select * From myTable where myID= :paramID';

并使用 ParseSQL 命令执行此命令:

myADOQuery.Parameters.ParseSQL(vSqlString , True);

现在 myADOQuery.Parameters.ParamByName('paramID').DataType 是 smallint 类型,它不能接受负整数值。

我可以准确地向编译器显示我的 Parameter[0].DataType 是 ftInteger 并且它可以正常工作,但是对于这个问题有什么好的解决方案?

4

2 回答 2

3

我的问题是imanShadabi 先生在这里提出的:Using TAdoQuery.ParseSql and hassolved by user1008646

于 2014-01-21T08:10:08.433 回答
0

希望这会有所帮助。

如果要在运行时参数中创建,可以使用如下内容:

ADOQuery1.Close;
ADOQuery1.SQL.Text := vSqlString;
ADOQuery1.Parameters.Clear;
ADOQuery1.Parameters.CreateParameter('paramID', ftInteger, pdInput, 10, vIntegerValue);
ADOQuery1.Open;

或者,您可以将值连接到查询。例如:

//For Integer values:
vSqlString: = 'Select * From myTable Where myID =' + IntToStr (vIntegerValue); 

//For String values:
vSqlString: = 'Select * From myTable Where myID =' + QuotedStr (vStringValue); 

//For float values: 
//Be careful with this, usually in a query, the comma is separator values, 
//so make sure that the decimal separator is '.'
vDS := DecimalSeparator; //I keep the value it had 
DecimalSeparator := '.'; 
try
  ADOQuery1.close;
  ADOQuery1.SQL.Text := 'Select * From myTable Where myID='+FloatToStr(vFloatValue);
  ADOQuery1.Open;
finally
  DecimalSeparator := vDS; //Restore the value that had
end;

第三个选项是在设计时设置参数。但我认为这不是你想要的。

于 2014-01-21T07:54:35.733 回答