奇怪,我写的SQL语句执行成功了,但是数据库中的记录并没有发生改变!
我用ADOQUERY组件执行一个数据更新的操作代码,并且执行了ADOQUERY1.EXECSQL的语句,编译也成功了。可是执行完了,数据库并没有更新。奇怪的是我做的insert和delete都可以成功!大家帮帮想以下是什么原因? 问题点数:15、回复次数:12Top
1 楼caiso(十年磨一剑)回复于 2005-03-02 13:38:14 得分 0
顶一下Top
2 楼qixp231(漫步者)回复于 2005-03-02 13:40:39 得分 0
把你的sql语句贴出来,肯定是你语句的问题了Top
3 楼jxc001(烟灰菜)回复于 2005-03-02 13:42:03 得分 0
ADOQUERY.CLOSE一下,可能是事物没有提交
或者
ADOQuery.Sql.SaveToFile('c:\sql.txt');
ADOQuery.ExecSql;
在去C盘下看看SQL有没有写对,可以COPY到数SQL调试器里执行一下看.Top
4 楼jewen_delphi(DELPHI代码)回复于 2005-03-02 13:54:42 得分 0
procedure TForm_operator.BitBtn1Click(Sender: TObject);
var
adoquery1:Tadoquery;
begin
adoquery1:=Tadoquery.Create(self);
adoquery1.Connection :=adoconnection1;
adoquery1.close ;
if radiobutton2.Checked then
begin
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update operator set pword=code,type=usertype,qx1=q1,qx2=q2,qx3=q3,qx4=q4,lasttime=ltime where username=userid');
adoquery1.Parameters.Clear ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[0].Name :='userid';
adoquery1.Parameters[0].DataType:=ftstring;
adoquery1.Parameters[0].Direction :=pdinput;
adoquery1.Parameters[0].Value :=edit1.Text ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[1].Name :='code';
adoquery1.Parameters[1].DataType:=ftstring;
adoquery1.Parameters[1].Direction :=pdinput;
adoquery1.Parameters[1].Value :=edit2.Text ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[2].Name :='usertype';
adoquery1.Parameters[2].DataType:=ftstring;
adoquery1.Parameters[2].Direction :=pdinput;
adoquery1.Parameters[2].Value :=edit3.Text ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[3].Name :='q1';
adoquery1.Parameters[3].DataType:=ftboolean;
adoquery1.Parameters[3].Direction :=pdinput;
adoquery1.Parameters[3].Value :=checkbox1.Checked ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[4].Name :='q2';
adoquery1.Parameters[4].DataType:=ftboolean;
adoquery1.Parameters[4].Direction :=pdinput;
adoquery1.Parameters[4].Value :=checkbox2.Checked;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[5].Name :='q3';
adoquery1.Parameters[5].DataType:=ftboolean;
adoquery1.Parameters[5].Direction :=pdinput;
adoquery1.Parameters[5].Value :=checkbox3.Checked ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[6].Name :='q4';
adoquery1.Parameters[6].DataType:=ftboolean;
adoquery1.Parameters[6].Direction :=pdinput;
adoquery1.Parameters[6].Value :=checkbox4.Checked ;
adoquery1.Parameters.AddParameter;
adoquery1.Parameters[7].Name :='ltime';
adoquery1.Parameters[7].DataType:=ftdatetime;
adoquery1.Parameters[7].Direction :=pdinput;
adoquery1.Parameters[7].Value :=strtodate(maskedit1.Text) ;
adoquery1.ExecSQL ;
application.MessageBox('修改该操作用户成功!','信息提示框',mb_ok);
adoquery1.Close ;
end
else
.......
后面就省略了。。。Top
5 楼zzlazio(sritsb)回复于 2005-03-02 13:59:30 得分 5
adoquery1.SQL.Add('update operator set pword=code,type=usertype,qx1=q1,qx2=q2,qx3=q3,qx4=q4,lasttime=ltime where username=userid');
>>>>>>>>>>>>>>>
应该都用 =:Top
6 楼Blakhawk(黑鹰)回复于 2005-03-02 14:03:49 得分 0
自己SQL语句都不会写,好好去看看怎么写SQL语句的书吧。
如楼上所说:要这么写SQL描叙
adoquery1.SQL.Text:='update operator set pword=:code,type=:usertype,qx1=:q1,qx2=:q2,qx3=:q3,qx4=:q4,lasttime=:ltime where username=:userid';
Top
7 楼cdsgajxlp(起名很难)回复于 2005-03-02 14:31:21 得分 0
adoquery1.SQL.Text:='update operator set pword=:code,type=:usertype,qx1=:q1,qx2=:q2,qx3=:q3,qx4=:q4,lasttime=:ltime where username=:userid';Top
8 楼jewen_delphi(DELPHI代码)回复于 2005-03-02 15:32:07 得分 0
哈哈!我修改看看!我没有用冒号在执行select的时候怎么就能成功呢?比如用adodataset组件来判断登入系统的用户名是否存在时,怎么就能执行好判断呢?
procedure Tchangepassword.Edit1Exit(Sender: TObject);
var
adodataset1:Tadodataset;
begin
adodataset1:=Tadodataset.Create(self);
adodataset1.Connection :=adoconnection1;
adodataset1.Close ;
adodataset1.CommandType :=cmdtext;
adodataset1.CommandText :='select * from operator where username=s0';
adodataset1.Parameters.Clear;
adodataset1.Parameters.AddParameter ;
adodataset1.Parameters[0].Name:='s0';
adodataset1.Parameters[0].DataType :=ftstring;
adodataset1.Parameters[0].Direction :=pdinput;
adodataset1.Parameters[0].Value :=edit1.Text ;
adodataset1.Active :=true;
if adodataset1.Recordset.RecordCount=1 then
begin
edit2.SetFocus ;
end
else
begin
application.MessageBox('FAAFDSAFSD啊',mb_ok);
edit1.Text :='';
edit1.SetFocus ;
end;
end;
-----------------------------
其实我在看别人的作品时,他们也都有用冒号,也许是自己受SQL2000的影响吧!把习惯带进来了。Top
9 楼yiyideyi(一一得一)回复于 2005-03-02 15:46:28 得分 5
晕,你正常的sql语句当然不用=:,那是在使用外部参数时才用到冒号的。Top
10 楼jewen_delphi(DELPHI代码)回复于 2005-03-02 15:47:10 得分 0
大哥,我试过了,但还是没有更新数据库。我在猜想会不会少写了行关于adoquery组件的执行代码。Top
11 楼zzlazio(sritsb)回复于 2005-03-02 16:00:27 得分 5
procedure TForm_operator.BitBtn1Click(Sender: TObject);
var
adoquery1:Tadoquery;
begin
adoquery1:=Tadoquery.Create(self);
adoquery1.Connection :=adoconnection1;
if radiobutton2.Checked then
begin
with adoquery1 do
begin
close;
SQL.Clear;
SQL.Add('update operator set pword=:code,type=:usertype,qx1=:q1,qx2=:q2,qx3=:q3,qx4=:q4,lasttime=:ltime where username=:userid');
parameters.parambyname('code').value:=Trim(edit2.Text);
parameters.parambyname('usertype').value:=Trim(edit3.Text);
parameters.parambyname('q1').value:=checkbox1.Checked;
parameters.parambyname('q2').value:=checkbox2.Checked;
parameters.parambyname('q3').value:=checkbox3.Checked;
parameters.parambyname('q4').value:=checkbox4.Checked;
parameters.parambyname('ltime').value:=strtodate(maskedit1.Text);
parameters.parambyname('userid').value:=Trim(edit1.Text);
ExecSQL ;
application.MessageBox('修改该操作用户成功!','信息提示框',mb_ok);
end;
end;
Top
12 楼jewen_delphi(DELPHI代码)回复于 2005-03-03 10:08:29 得分 0
问题已经解决啦!谢谢各位了!Top




