对“富翁们”是小问题:ADOQuery的Update出错!谢谢“大家”!(150分)

  • 主题发起人 主题发起人 zhugm1234
  • 开始时间 开始时间
Z

zhugm1234

Unregistered / Unconfirmed
GUEST, unregistred user!
1.
with dm1.ADOQuery2 do
begin
close;
SQL.Clear;
sql.text:='update ht_user set ht_longin_flage=:login_flag where h_code='+edit_code.text;
parameters.parambyname('login_flag').value:='1';
open;
end;
正确运行。

但下面的则出错!h_login_time为datetime型 .

with dm1.ADOQuery2 do
begin
close;
SQL.Clear;
sql.text:='update ht_user set ht_longin_time=:login_time where h_code='+edit_code.text;
parameters.parambyname('login_time').value:=now;
open;
end;

2.
with dm1.ADOQuery2 do
begin
close;
SQL.Clear;
SQL.Add('insert into h_user(h_code,h_name,h_login_time,h_login_flag) values (:m_code,:m_name,:m_login_time,:m_login_flag)');
Parameters.Items[0].Value:='3';
Parameters.Items[1].Value:='zbc';
Parameters.items[2].Value:=now;
Parameters.items[3].Value:='1';
open;
end;

错误提示:[Microsoft][ODBC SQL Server Driver]Optional feature not implemented


程序环境:Delphi5.0 + Pwin98 + SQL Server7.0


错误提示:[Microsoft][ODBC SQL Server Driver]Optional feature not implemented


请“富翁们”指教。谢谢!
 
不要用OPEN,OPEN是在有返回结果的情况使用,对于执行INSERT,UPDATE,DELETE等,应该
使用ExecSQL
 
完全同意。
 
使用ExecSQL一样不行,错误信息一样。请大家在你的机器上实验一下。出错基本可定位到列
h_login_time为datetime型造成的.

with dm1.ADOQuery2 do
begin
close;
SQL.Clear;
SQL.Add('insert into h_user(h_code,h_name,h_login_flag) values (:m_code,:m_name,:m_login_flag)');
Parameters.Items[0].Value:='3';
Parameters.Items[1].Value:='zbc';
Parameters.items[2].Value:='1';
ExecSQL;// 但换成open也可以;
end;

若对 datetime列Insert,Update 就出错。 错误提示:[Microsoft][ODBC SQL Server Driver]Optional feature not implemented
 
提交用conneciton的自己的过程去做,
好象是先是begincommit(记不太清了)...
这里写想要提交的代码
最后是endcommit...
 
大虾们抽空看一下这问题。
 
在SQL语法中,日期时间不可能直接用文本表达,得用转换函数。
 
Parameters.items[2].asstring:=datetimetostr(now);行吗?
 
我试了,没有问题呀?
我想你应该将的SQL语句在SQL explore中试试,成功后再放入程序中,这样容易找到问题所在。
一般的情况下,不返回数据的还是要用EX。。。的,不要用OPEN。
 
非常感谢大虾们!
To Seoul_BJ:
SQL explore中怎样带进变量。如:update ht_user set ht_longin_time=:ff;


----------------------------------------------------------------------------

To Seoul_BJ:

----------------------------------------------------------------------------

能不能再试试以下代码:

1:
with dm1.ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('insert into h_user(h_code,h_name,h_login_time) values (:m_code,:m_name,:m_login_time)');
Parameters.Items[0].Value:='3';
Parameters.Items[1].Value:='zbc';
Parameters.items[2].Value:=now;
ExecSQL;
end;

2:
with dm1.ADOQuery2 do
begin
Close;
SQL.Clear;
Sql.text:='update ht_user set ht_longin_time=:login_time where h_code='+edit_code.text;
Parameters.Parambyname('login_time').Value:=now;
ExecSQL;
end;

程序环境:Delphi5.0 + Pwin98 + SQL Server7.0
在我的机器上,若对 datetime列Insert,Update 就出错。
错误提示:[Microsoft][ODBC SQL Server Driver]Optional feature not implemented

-----------------------------------------------------------------------------
TO: hhzh426

AdoQuery2.Parameters.items[2].asstring:=datetimetostr(now);不是这样写的。

应这样写:
AdoQuery2.parameters.parambyname('login_flag').value:='1';

AdoQuery2.Parameters.items[0].value:='1';
 
建议你这样写
SQL.Add('insert into h_user(h_code,h_name,h_login_time)
values(:m_code,:m_name,convert(datetime,:m_login_time)');
...
Parameters.items[2].asstring:=datetimetostr(now);
 
我是指你应该在SQL explore中输入你将要在执行的赋完值的SQL语句执行试试,看看是不是其它方面的错误,
如你语句
insert into h_user(h_code,h_name,h_login_time) values (:m_code,:m_name,:m_login_time)
就写成
insert into h_user(h_code,h_name,h_login_time) values ('1','zbc','2000-06-01')
这样更直观地检查SQL语句的错误所在
GOOK LUCK
 
是这样的,我不知道是不是delphi的bug,在使用ado的情况下,
若通过odbc连接数据库时使用到时间变量的时候就会出错。但是在delphi中的ado控件
的connectionstring中使用ole db provider for sql server 就可以了。其他的办法我
还不知道:-(
 
zxqlover 对. 在使用ado的情况下,通过odbc连接数据库时使用到时间变量的时候就
会出错.
用Query搞定了。

 
多人接受答案了。
 
后退
顶部