请看有关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。
大意是语句错误和访问冲突。我不知如何解决。
 我关机重启仍是这个问题。
 请高手诊断。 
 
...全文
68 点赞 收藏 5
写回复
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日
果然是“尘埃落定”,一出手就搞定了!谢谢。
回复 点赞
发动态
发帖子
数据库相关
创建于2007-08-02

1209

社区成员

8.8w+

社区内容

Delphi 数据库相关
社区公告
暂无公告