Delphi 重用TSQLQuery缺少参数
我正在使用DelphiXe2和一个TSQLQuery对象。我第一次使用它时它就起作用了。如果我立即重用它,那么它不会解析新SQL的参数并重建qry.Params列表: 不管我做什么,它都不会解析第二条SQL语句的参数,所以我不能按名称绑定'valueY'参数 我可以想出两个变通办法: 我自己手动构建qry.Params列表。 在两个命令之间销毁并重新创建qry对象。 我不应该做这两件事。也许qry对象上有一个属性或某些东西,每次将新SQL语句分配给它的CommandText属性时,都会导致它重新分析参数?使用TSQLQuery.SQL属性而不是TSQLQuery.CommandText属性:Delphi 重用TSQLQuery缺少参数,delphi,parsing,parameters,delphi-xe2,Delphi,Parsing,Parameters,Delphi Xe2,我正在使用DelphiXe2和一个TSQLQuery对象。我第一次使用它时它就起作用了。如果我立即重用它,那么它不会解析新SQL的参数并重建qry.Params列表: 不管我做什么,它都不会解析第二条SQL语句的参数,所以我不能按名称绑定'valueY'参数 我可以想出两个变通办法: 我自己手动构建qry.Params列表。 在两个命令之间销毁并重新创建qry对象。 我不应该做这两件事。也许qry对象上有一个属性或某些东西,每次将新SQL语句分配给它的CommandText属性时,都会导致它重新
qry.SQL.Text := 'select field1 from table1 where fieldX = @valueX';
...
qry.SQL.Text := 'select field2 from table2 where fieldY = @valueY';
无需调用参数。清除中间值,SQL属性将为您处理此问题。使用TSQLQuery.SQL属性而不是TSQLQuery.CommandText属性:
qry.SQL.Text := 'select field1 from table1 where fieldX = @valueX';
...
qry.SQL.Text := 'select field2 from table2 where fieldY = @valueY';
无需调用参数。如果在这两者之间清除,SQL属性将为您处理该问题。结果是语法问题。参数必须以:而不是@开头。我在第一个查询中使用了本地SQL变量,因此在整个SQL中混合了@param和:param变量。通过对所有绑定参数使用:param语法,TSQLQuery每次都会正确解析参数,就像它应该做的那样
var
qry: TSQLQuery;
begin
qry := TSQLQuery.Create(nil);
try
qry.MaxBlobSize := -1;
qry.SQLConnectin := AnExistingConnection;
qry.CommandText := 'select field1 from table1 where fieldX = :valueX';
qry.ParamByName('valueX').Value := 1;
qry.Open;
// ... use data ...
qry.Close;
qry.CommandText := 'select field2 from table2 where fieldY = :valueY';
qry.ParamByName('valueY').Value := 2;
qry.Open;
finally
FreeAndNil(qry);
end;
end;
结果是一个语法问题。参数必须以:而不是@开头。我在第一个查询中使用了本地SQL变量,因此在整个SQL中混合了@param和:param变量。通过对所有绑定参数使用:param语法,TSQLQuery每次都会正确解析参数,就像它应该做的那样
var
qry: TSQLQuery;
begin
qry := TSQLQuery.Create(nil);
try
qry.MaxBlobSize := -1;
qry.SQLConnectin := AnExistingConnection;
qry.CommandText := 'select field1 from table1 where fieldX = :valueX';
qry.ParamByName('valueX').Value := 1;
qry.Open;
// ... use data ...
qry.Close;
qry.CommandText := 'select field2 from table2 where fieldY = :valueY';
qry.ParamByName('valueY').Value := 2;
qry.Open;
finally
FreeAndNil(qry);
end;
end;
谢谢@Remy。我试过了,但没人知道,但没用。然而,我在最后几分钟发现了问题。我会发布答案。。。谢谢你的时间!谢谢@Remy。我试过了,但没人知道,但没用。然而,我在最后几分钟发现了问题。我会发布答案。。。谢谢你的时间!