高手帮我看一下这条SQL语句怎么回事啊?是不是ADOQuery的BUG啊?

aft_st_sd 2005-01-18 07:26:58
SQL.Add('Insert Into C_Keno_LSH (S_City,S_DaTing,S_Game,S_Sale_Code,');
SQL.Add('USER_ID,TZDATE,TZTIME,TZGS,XZFS,TZ1,TZ2,TZ3,TZ4,TZ5,TZ6,TZ7,TZ8,');
SQL.Add('TZ9,TZ10,TZ11,TZ12,TZ13,TZ14,TZ15,TZLX) Values ');
SQL.Add('(''01'',''01'',''01'',:S_Sale_Code,:USER_ID,');
SQL.Add('Convert(varchar(8),Getdate(),11),Convert(varchar(8),Getdate(),8),');
SQL.Add(':TZGS,:XZFS,:TZ1,:TZ2,:TZ3,:TZ4,:TZ5,:TZ6,:TZ7,:TZ8,');
SQL.Add(':TZ9,:TZ10,:TZ11,:TZ12,:TZ13,:TZ14,:TZ15,''02'')');

执行完上面最后一行就报错,还没到ExecSQL就已经报错了
是怎么回事呢?
但是如果把里面的任意一行去掉的话,就都没问题
如果你们不信的话,可以把这个语句粘贴下去试一下,不用数据库,执行完上面最后一句就已经出错了
...全文
221 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
McdullMini 2005-01-25
  • 打赏
  • 举报
回复
那你把以前的代码试试看有没有问题
先确定你的系统没有缺什么文件再说
st_charlie 2005-01-19
  • 打赏
  • 举报
回复
自己顶
st_charlie 2005-01-19
  • 打赏
  • 举报
回复
气死我了,昨天竟然一时想不起登录密码了,只能叫它把新密码发到邮箱,可竟然连当初注册时填写的邮箱也记不起来了,真是要晕死了,所以只能重新注册一个ID了,有没有什么办法把把密码找回来啊?


好了,闲话少说,我就是aft_st_sd

to Kshape
你说的没错,把那些换成参数是没有问题,可问题是我前面写过类似的代码,用的也是convert这个函数,怎么就没问题呢?到了这里就不行了呢?
没问题的语句是这样写的:
SQL.Add('Insert Into flow_ledger (USER_ID,Trade_Day,Trade_Time,Keep_Type,');
SQL.Add('Trade_Funds,Currency) Values (:USERID,Convert(varchar(8),Getdate(),11),');
SQL.Add('Convert(varchar(8),Getdate(),11),''L'',:Trade_Funds,''rmb'')');

当初设计表的那个人也真烂,我就想不明白它为什么把一个字段分成日期跟时间两个,还用varchar()型的
yytjk 2005-01-19
  • 打赏
  • 举报
回复
可能你系统里少了这个SQLOLEDB.Dll文件吧

Kshape 2005-01-18
  • 打赏
  • 举报
回复
楼主:
我试了,连接后果然有问题,报访问非法错误!
但是我想问题也找到了
主要是你SQL语句中函数的问题
我把函数去掉,也用参数就可以了
改后如下:
---------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
sql.Clear;
//sql.Add('insert into C_Keno_LSH(S_City)values(:a)');
SQL.Add('Insert Into C_Keno_LSH (S_City,S_DaTing,S_Game,S_Sale_Code,');
SQL.Add('USER_ID,TZDATE,TZTIME,TZGS,XZFS,TZ1,TZ2,TZ3,TZ4,TZ5,TZ6,TZ7,TZ8,');
SQL.Add('TZ9,TZ10,TZ11,TZ12,TZ13,TZ14,TZ15,TZLX) Values ');
SQL.Add('(''01'',''01'',''01'',:S_Sale_Code,:USER_ID,');
SQL.Add(':temp1,:temp2,');//这里哦
SQL.Add(':TZGS,:XZFS,:TZ1,:TZ2,:TZ3,:TZ4,:TZ5,:TZ6,:TZ7,:TZ8,');
SQL.Add(':TZ9,:TZ10,:TZ11,:TZ12,:TZ13,:TZ14,:TZ15,''02'')');
//ExecSQL;
end;
Showmessage('Here');//可以执行到这里---这里就可以到了
end;
---------------------------------------
所以,你也把你的函数去掉,做为参数
在后面与其他参数一起,给他赋值应该就可以了

祝你成功
aft_st_sd 2005-01-18
  • 打赏
  • 举报
回复
to Kshape
你把你的ADOQUERY的CONNECTIONSTRING配置成你的数据库试一下,
不用到ExecSQL,所以随便挂个数据库也无所谓,再看一下是不是
也报错?
Kshape 2005-01-18
  • 打赏
  • 举报
回复
楼主,我把你代码拷到我电脑里(delphi6)
虽然没有连接上数据库(你的数据库太复杂了)
但是没有象你说的
没有执行到Execsql就出错啊
是不是你的组件或delphi有问题?
我的代码是:
----------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
sql.Clear;
SQL.Add('Insert Into C_Keno_LSH (S_City,S_DaTing,S_Game,S_Sale_Code,');
SQL.Add('USER_ID,TZDATE,TZTIME,TZGS,XZFS,TZ1,TZ2,TZ3,TZ4,TZ5,TZ6,TZ7,TZ8,');
SQL.Add('TZ9,TZ10,TZ11,TZ12,TZ13,TZ14,TZ15,TZLX) Values ');
SQL.Add('(''01'',''01'',''01'',:S_Sale_Code,:USER_ID,');
SQL.Add('Convert(varchar(8),Getdate(),11),Convert(varchar(8),Getdate(),8),');
SQL.Add(':TZGS,:XZFS,:TZ1,:TZ2,:TZ3,:TZ4,:TZ5,:TZ6,:TZ7,:TZ8,');
SQL.Add(':TZ9,:TZ10,:TZ11,:TZ12,:TZ13,:TZ14,:TZ15,''02'')');
//ExecSQL;
end;
Showmessage('Here');//可以执行到这里
end;
aft_st_sd 2005-01-18
  • 打赏
  • 举报
回复
to myth8860(海风)
你能告诉我哪个字段是DATE类型的吗?
里面根本就没有一个DATE类型的,

这个设计表的人也真烂,气死人了
myth8860 2005-01-18
  • 打赏
  • 举报
回复
我的ADOQuery不能动态绑定date类型的参数啊!郁闷
那位老大知道怎么绑定吗?
aft_st_sd 2005-01-18
  • 打赏
  • 举报
回复
SQL语句肯定没问题,而且如果ADOQuery的CONNCTION不写的话,也不会报错
Kshape 2005-01-18
  • 打赏
  • 举报
回复
你先把这个sql语句东西用Message看看
是不是你要表达的意思
参数太多
难免会出问题
wozhuchuanwei 2005-01-18
  • 打赏
  • 举报
回复
应该是你操作系统或者是delphi的问题吧?
看看其他的ADOQuery能用不?
aft_st_sd 2005-01-18
  • 打赏
  • 举报
回复
难道是SQL SERVER的问题?
wozhuchuanwei 2005-01-18
  • 打赏
  • 举报
回复
看起来像是系统错误哦
aft_st_sd 2005-01-18
  • 打赏
  • 举报
回复
这是报的错
raised exception class EAccessvViolation with message 'Access
violation ast address 753A23A8 in module 'SQLOLEDB.Dll'

2,495

社区成员

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

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