【问题标题】:Using ParseSQL Command for ADO Parameters Cause Invalid Parameter DataType对 ADO 参数使用 ParseSQL 命令导致无效的参数数据类型
【发布时间】:2013-12-28 10:41:27
【问题描述】:

我有一些 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 并且它可以正常工作,但是对于这个问题有什么好的解决方案?

【问题讨论】:

  • 您是否尝试过更改数据类型:myADOQuery.Parameters.ParamByName('paramID').DataType := ftInteger;
  • 您也可以手动设置参数,而不是调用 ParseSQL。
  • 你的数据库后端是什么? Smallint 类型对于标识列是不是很奇怪?
  • @MohammadGohari 我认为这是最好的解决方案。编译器无法查询数据库以查看列数据类型是什么,因此您必须告诉它。我个人不使用 ParseSQL,我在代码中设置了参数,所以我可以完全控制。
  • 看这篇文章[ADOQuery.ParseSql][1][1]:stackoverflow.com/questions/21194122/…

标签: sql delphi ado delphi-xe4 tadoquery


【解决方案1】:

Mr. imanShadabi 在这里提出了我的问题:Using TAdoQuery.ParseSql 并已由user1008646 解决

【讨论】:

  • 很高兴我能帮上忙。我想知道我将如何收集赏金。
  • @user1008646,别担心。你会得到一个:-)
【解决方案2】:

希望这会有所帮助。

如果你想在运行时创建参数,你可以使用这样的东西:

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;

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

【讨论】:

  • 感谢 aljarafe。但我想使用 ParseSQL 并知道这个命令错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多