给位大虾看看我的代码是那里出了错!一个奇怪的问题,谢谢各位了!

wellshddelphi 2003-08-22 10:47:21

我在用DELPHI5.0做数据库开发的时候,出现以下问题;我用的是ACCESS数据库,代码如下
with searchQry do
close;
Sql.clear;
Sql.add('select * from :bm where ps=:psb);
searchQry.parambyname('bm').asstring:=edit1.text;//通过参数传递要查询的表名;
searchQey.parambyname('psb').asstring:=edit2.text;//传递条件值;
open;

抱错如下:
General Sql Error
ACCParam0指定了所需资料表名的位置! (或者是资料表已经存在什么的)

我对以上很是纳闷,用过变量传递,直接赋值等好多办法都没有解决,都包错,实在受不了,所以只好向大家讨教了。
...全文
39 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dphiwarrior 2003-08-23
  • 打赏
  • 举报
回复
楼上说的对,format是完全可以做到的.
madyak 2003-08-23
  • 打赏
  • 举报
回复
var
SqlStr:string;
begin
SqlStr:='select * from %s where ps=''%s'' ';
with searchQry do
begin
close;
Sql.Text:=Format(SqlStr,[Edit1.Text,Edit2.Text]);
open;
end;
end;
wellshddelphi 2003-08-23
  • 打赏
  • 举报
回复
uery1.sql.add('select * from '+edit1.text); //这个语句编译不能通过!

说到这里不能通过,其实是这样的.我在上面语句中用的是一个函数处理效果,所以包错,不过方法是一样的.
我的原始代码是这样的,我是用提取一个 datetimepicker 的时间数字来做为表名的。我的程序中的代码如下:

sql.add('select * from '+formatdatetime('yyyymmdd',datetimepicker.datetim);
//format函数先提取控件datetimepicker的时间数字值做为表名 'yyyymmdd'是提取值的显示格式: 如 '20030823'
wellshddelphi 2003-08-23
  • 打赏
  • 举报
回复
to: dickeybird888(于伟刚)
这样的话,在编译的时候他就抱错,

query1.sql.add('select * from '+edit1.text); //这个语句编译不能通过!

楼上的我这是动态生成的呀,不过还是没办法,还是谢谢你们了.
大家还有没有更好的办法呢?
zhangxinji 2003-08-23
  • 打赏
  • 举报
回复
表名不能作为参数传递
想别的办法
动态生成sql语句
可以的
dickeybird888 2003-08-23
  • 打赏
  • 举报
回复
表名不可做为参数来传递!你可以这样
query1.close;
query1.sql.clear;
query1.sql.add('select * from '+edit1.text);
query1.sql.aDD(' where ps=:psb');
query1.parambyname('psb').asstring:=edit2.text;//传递条件值;
query1.open;
wellshddelphi 2003-08-23
  • 打赏
  • 举报
回复
楼上的好象不行呀,你这个用法我试过了,我原来的代码是这样的,跟你的效果应该是一样的:
with searchQry do
close;
Sql.clear;
Sql.add('select * from :bm where ps=:psb);
searchQry.parambyname('bm').asstring:=edit1.text;//通过参数传递要查询的表名;
searchQey.parambyname('psb').asstring:=edit2.text;//传递条件值;
try
open;
finally
ExecSql;
end;
是一样的包错的.!没办法呀,那位大哥可以救救我呀?
还有,表名做参数传递在sql server 里面是可以的,为什么在access里面会不行呢?????????????????
tiexinliu 2003-08-23
  • 打赏
  • 举报
回复
这样如何:
with searchQry do
begin
close;
Sql.clear;
Sql.add(' Exec(select * from :bm where ps=:psb)');
searchQry.parambyname('bm').asstring:=edit1.text;//通过参数传递要查询的表 名;
searchQey.parambyname('psb').asstring:=edit2.text;//传递条件值;
open;
end;
呵呵,sql server中是可以的,ACCESS没试过.
wellshddelphi 2003-08-23
  • 打赏
  • 举报
回复
to: dickeybird888(于伟刚)
你的方法是对的,是我在用的时候出现了问题;
to: xuejinlong(-@判官@-)
你提供的空格方式很好。我用这种方式通过了运行,

问题终于解决了。再次谢谢大家;由于分给的太少。所以见者有份了。
lxh00789 2003-08-23
  • 打赏
  • 举报
回复
with searchQry do
close;
Sql.clear;
Sql.add('select * from '''+Edit1.Text+''' where ps=:psb);
// searchQry.parambyname('bm').asstring:=edit1.text;//通过参数传递要查询的表名;
searchQey.parambyname('psb').asstring:=edit2.text;//传递条件值;
open;
不知道这样行不行,如果是日期的话,可在前面将EDIT1.text数据转换一下
monkey80110 2003-08-23
  • 打赏
  • 举报
回复
yujohny 2003-08-23
  • 打赏
  • 举报
回复
这样可以,我编译通过
query1.close;
query1.sql.clear;
query1.sql.add('select * from '+edit1.text);
query1.sql.aDD(' where 名称=:psb');
query1.parambyname('psb').value:=edit2.text;//传递条件值;
query1.open;
xuejinlong 2003-08-23
  • 打赏
  • 举报
回复
with searchQry do
close;
Sql.clear;
Sql.add('select * from ' + FormatDateTime('yyyymmdd',datetimepicker.date) + ' where ps = ''' + Edit2.Text + '''');
open;
end;

这个应该是没有问题的,关键是format出来的表在数据库里要存在,不存在当然报错。

比如出来的是 20030805,那么你要保证这个表存在于你的数据库中,不然肯定是出错的。
martinloyee 2003-08-23
  • 打赏
  • 举报
回复
表名不能用:param的方式传递。
wellshddelphi 2003-08-23
  • 打赏
  • 举报
回复
我再次声明一下: 我用的access 97 已经是非常低的版本了.公司的一个老程序要我修改,实在是没有办法, 要是在SQL SERVER环境下早就解决了. 哎.......!!!??????????????
wellshddelphi 2003-08-23
  • 打赏
  • 举报
回复
楼上的format代码有问题,虽然在编译的时候通过了.但是在运行的时候就报如下的错误:

format '%$' invalid or incompatible with argument;
是不是在语句中它又不识别符号'%$'呢?
madyak 2003-08-22
  • 打赏
  • 举报
回复
Sql.add('select * from :bm where ps=:psb);
中的...from :bm ...没见过这种用法,
表名不可做为参数来传递!

2,496

社区成员

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

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