procedure TZulinForm.Button1Click(Sender: TObject);
begin
query2.Close;
query2.SQL.clear;
query2.Params.clear;
query2.Params.CreateParam(ftstring,'sj',ptinput).AsString:=sjedit.Text;
query2.Params.CreateParam(ftstring,'rq',ptinput).AsString:=rqedit.Text;
query2.Params.CreateParam(ftstring,'_id',ptinput).AsString:=idedit.Text;
query2.Params.CreateParam(ftstring,'xm',ptinput).AsString:=xmedit.Text;
query2.Params.CreateParam(ftstring,'sm',ptinput).AsString:=smedit.Text;
query2.Params.CreateParam(ftstring,'zj',ptinput).AsString:=zjedit.Text;
query2.Params.CreateParam(ftstring,'yj',ptinput).AsString:=yjedit.Text;
    showmessage('参数部分完成');
query2.SQL.Add('insert into zulinbiao values(:sj, :rq, :_id, :xm, :sm, :zj, :yj);');
query2.ExecSQL;
    showmessage('SQL语句执行完毕');
query2.Open;
    showmessage('QUERY已经打开');
query2.Close;
    showmessage('QUERY 已经关闭');
//当会员租赁了一本书之后,要对会员表的 ‘当前租赁本数’更新+1,以下是更新过程
query1.Close;
query1.SQL.clear;
query1.Params.clear;
    showmessage('开始更新会员表的 当前租赁本数');
query1.sql.add('update table huiyuanbiao set dangqianzulinbenshu=:dangqianzulinbenshu+1 where id=:_id;');
query1.ExecSQL;
query1.Open;
query1.Close;
showmessage('更新成功');
end;1.上面的代码,执行完QUERY2 的SQL语句后就出现一个错误,提示:KEY VIOLATION ,汗~~
  接着造成了QUERY1 对会员表不能进行更新
2.但是打开ZULINBIAO,发现记录确实已经写入!又汗~~~~
3.设置这么多的MESSAGE主要是为了分步调试程序,看问题到底出在那里,结果,提示了“SQL语句执行完毕”后,接着提示 KEY VIOLATION (关键字非法?)!!
4.看来程序没问题,这个错误是在操作数据库时返回的吧?
5.请帮小弟度过难关,谢谢!

解决方案 »

  1.   

    受不了
    干嘛不用一条用句直接插进去AdoQuery.sql.text := 'insert into zulinbiao values('+QuotedStr(sdf)..+','+..+')';
      

  2.   

    TO :FCU(彩色铅笔),小弟刚学DELPHI数据库,有好多东西还没接触,漫漫来吧,多谢关注^_^
    TO :ffwin() ,我把时间设置为主键了,都精确到了H M S 了,值有重复的的可能性应该不是太大了吧,可他就是还是错!我干脆不在表上设主键了,但是新的错误又出现了,郁闷!
    看来还是自己没怎么学好爬,就想着去跑了,老碰墙,算了不写了,还得从头学本书吧,那位哥哥推荐一本DELPHI书啊?不要太基本了,但也不能太高深了,最好能有一定的代码量,值得让人研究一番,然后读完此书让人有豁然开朗的感觉(很美妙的享受哦)。或者一本专门的全部是完整案例的教材也不错哦,这个样就更直接了,超爽的感觉就是好!!
    谢谢各位指点迷津^_^
      

  3.   

    我更喜欢用fieldbyname来实现,看起来舒服
      

  4.   

    第一個問題:execsql后爲什麽還要再打開?
    第二個問題:query1.sql.add('update table huiyuanbiao set dangqianzulinbenshu=:dangqianzulinbenshu+1 where id=:_id;');
    你傳了一個 :_id進去,爲什麽不對它進行
         paramerbyname('_id').value:=....