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

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指定了所需资料表名的位置! (或者是资料表已经存在什么的)

我对以上很是纳闷,用过变量传递,直接赋值等好多办法都没有解决,都包错,实在受不了,所以只好向大家讨教了。
...全文
36 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 ...没见过这种用法,
表名不可做为参数来传递!
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

2,495

社区成员

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

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