请看有关SQL动态参数的问题!!

jqmoab 2005-03-19 09:38:20
我对标准sql语法很熟悉,可是在delphi环境中的具体应用就不太熟悉了。
  我在ADOQuery的parameters属性中增加了para1和para2属性,运行如下语句:
 restr:='';
str:=DBGrid1.DataSource.DataSet.fields[i - 1].AsString;
sqlstr1:='select num into :para1 from 转换对照表 where content = :para2';
showmessage(sqlstr1);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr1);
ADOQuery1.parameters[0].value:=restr;
ADOQuery1.parameters[1].value:=str;
ADOQuery1.ExecSQL;
 可是运行到ADOQuery1.ExecSQL;时出现如下错误:
   Syntax error or access violation。
大意是语句错误和访问冲突。我不知如何解决。
 我关机重启仍是这个问题。
 请高手诊断。 
 
...全文
86 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chogo 2005-03-19
  • 打赏
  • 举报
回复
var
temp:string;
.
.
.
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select num from 转换对照表 where content = :para1');
ADOQuery1.Parameters.ParamByName('para1').Value:=restr;
ADOQuery1.Open;
string:=ADOQuery1.FieldByName('num').AsString;
jqmoab 2005-03-19
  • 打赏
  • 举报
回复
muleo(木渔):
  表名是正确的,跟踪时该句可以正常执行。
  sqlstr1:='select num into '+str+' from 转换对照表 where content = :para1'; 
  这是不行的,这样会把str的具体值代入该语句中。
  我的本意是将查询结果放至该变量中。
郁闷,多日来还没解决。
liuji10_2001 2005-03-19
  • 打赏
  • 举报
回复
into :para1 好象在DELPHI中不能这么对列声明参数把?楼上说的是一种好方法
muleo 2005-03-19
  • 打赏
  • 举报
回复
restr:='';
str:=trim(DBGrid1.DataSource.DataSet.fields[i - 1].AsString);//这里表名是否正确?
sqlstr1:='select num into '+str+' from 转换对照表 where content = :para1';
showmessage(sqlstr1);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr1);
ADOQuery1.Parameters.ParamByName('para1').Value:=restr;
ADOQuery1.ExecSQL;
jqmoab 2005-03-19
  • 打赏
  • 举报
回复
果然是“尘埃落定”,一出手就搞定了!谢谢。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧