新做一系统,delphi6+ado+sql server2000 运行一星期发现以下两问题:
(以下故障都只出现一次,请问是什么原因造成?用什么办法可以避免?)1:其中有一条记录添加成功,但当时查询不到,过了一个小时又自动出现了.2:其中有一个操作显示'保存成功',但两个表中却没有反应,该添加的没有,该删除的没有删除,代码如下
  try
    DM.ADOCnctn.BeginTrans ;   //其中一个表添加记录,一个表删除记录
   .
   .
   .   DM.ADOCnctn.CommitTrans ;
   showmessage('保存成功');
  except
   DM.ADOCnctn.RollbackTrans ;
   showmessage('保存失败');
  end;

解决方案 »

  1.   

    1:确定添加成功了又查不到,应该是资源锁定了,还在独占状态。(你可以强行退出与数据库的连接,直接看是否可查询来核定)2:你的保存函数里的代码可能有问题了,比如delta无意中被清空了。最好贴一点代码出来。
      

  2.   

    procedure TMainForm.BtBtn_SaveClick(Sender: TObject);
    var
    SQL_insert:WideString;
    begin//
    try
    DM.ADOCnctn.BeginTrans ;
       //保存记录jilu
       SQL_insert:='insert into jilu (xuhao,huodan,hetong,tihuofangshi,tihuoren,jinchu,kuwei,riqi,shijian,riqi1,riqi2,shijian1,shijian2,chehao,kehu,huowu,zhongliang,zongzhong,pizhong,jingzhong,jianshu,tongzongzhong,tongleibie,tongdanzhong,caozuo) ';
       SQL_insert:=SQL_insert+'values (:xuhao,:huodan,:hetong,:tihuofangshi,:tihuoren,:jinchu,:kuwei,:riqi,:shijian,:riqi1,:riqi2,:shijian1,:shijian2,:chehao,:kehu,:huowu,:zhongliang,:zongzhong,:pizhong,:jingzhong,:jianshu,:tongzongzhong,:tongleibie,:tongdanzhong,:caozuo)';
       DM.ADOCmnd.CommandText:=SQL_insert;
       DM.ADOCmnd.Parameters.ParamByName ('xuhao').Value :=Edt_xuhao.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('huodan').Value :=CmbBx_huodan.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('hetong').Value :=CmbBx_hetong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tihuofangshi').Value :=CmbBx_tihuofangshi.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tihuoren').Value :=CmbBx_tihuoren.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('jinchu').Value :=Edt_jinchu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('kuwei').Value :=CmbBx_kuwei.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('riqi').Value :=mdate;
       DM.ADOCmnd.Parameters.ParamByName ('shijian').Value :=mtime;
       if huicheng=false then begin
       DM.ADOCmnd.Parameters.ParamByName ('riqi1').Value :=mdate;
       DM.ADOCmnd.Parameters.ParamByName ('riqi2').Value :='';
       DM.ADOCmnd.Parameters.ParamByName ('shijian1').Value :=mtime;
       DM.ADOCmnd.Parameters.ParamByName ('shijian2').Value :='';
       end
       else begin
       DM.ADOCmnd.Parameters.ParamByName ('riqi1').Value :=riqi_weihui;
       DM.ADOCmnd.Parameters.ParamByName ('riqi2').Value :=mdate;
       DM.ADOCmnd.Parameters.ParamByName ('shijian1').Value :=shijian_weihui;
       DM.ADOCmnd.Parameters.ParamByName ('shijian2').Value :=mtime;
       end;
       DM.ADOCmnd.Parameters.ParamByName ('chehao').Value :=CmbBx_chehao.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('kehu').Value :=CmbBx_kehu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('huowu').Value :=CmbBx_huowu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('zhongliang').Value :=floattostr(mem_zhongliang);
       DM.ADOCmnd.Parameters.ParamByName ('zongzhong').Value :=Edt_zongzhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('pizhong').Value :=Edt_pizhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('jingzhong').Value :=Edt_jingzhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('jianshu').Value :=Edt_jianshu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tongzongzhong').Value :=Edt_tongzongzhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tongleibie').Value :=Cmbbx_tongleibie.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tongdanzhong').Value :=Edt_tongdanzhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('caozuo').Value :=Edt_CaoZuo.Text ;   DM.ADOCmnd.Execute ;   if huicheng=false then begin
       //ZzyDM.qry_weihui.sql.add('insert into weihui (huodan,hetong,tihuofangshi,tihuoren,kuwei,riqi,riqi1,shijian1,chehao,kehu,huowu,zhongliang,jianshu,tongzongzhong,tongleibie,tongdanzhong,caozuo)');
       SQL_insert:='insert into weihui (huodan,hetong,tihuofangshi,tihuoren,kuwei,riqi1,shijian1,chehao,kehu,huowu,zhongliang,jianshu,tongzongzhong,tongleibie,tongdanzhong,caozuo) ';
       SQL_insert:=SQL_insert+'values (:huodan,:hetong,:tihuofangshi,:tihuoren,:kuwei,:riqi1,:shijian1,:chehao,:kehu,:huowu,:zhongliang,:jianshu,:tongzongzhong,:tongleibie,:tongdanzhong,:caozuo)';
       DM.ADOCmnd.CommandText:=SQL_insert;
       DM.ADOCmnd.Parameters.ParamByName ('huodan').Value :=CmbBx_huodan.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('hetong').Value :=CmbBx_hetong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tihuofangshi').Value :=CmbBx_tihuofangshi.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tihuoren').Value :=CmbBx_tihuoren.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('kuwei').Value :=CmbBx_kuwei.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('riqi1').Value :=mdate;
       DM.ADOCmnd.Parameters.ParamByName ('shijian1').Value :=mtime;
       DM.ADOCmnd.Parameters.ParamByName ('chehao').Value :=CmbBx_chehao.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('kehu').Value :=CmbBx_kehu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('huowu').Value :=CmbBx_huowu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('zhongliang').Value :=floattostr(mem_zhongliang);
       DM.ADOCmnd.Parameters.ParamByName ('jianshu').Value :=Edt_jianshu.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tongzongzhong').Value :=Edt_tongzongzhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tongleibie').Value :=CmbBx_tongleibie.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('tongdanzhong').Value :=Edt_tongdanzhong.Text ;
       DM.ADOCmnd.Parameters.ParamByName ('caozuo').Value :=Edt_caozuo.Text ;   DM.ADOCmnd.Execute ;
       end
       else begin
       DM.ADOCmnd.CommandText:='delete from weihui where id=:id';
       DM.ADOCmnd.Parameters.ParamByName ('id').Value :=ID_WeiHui;
       DM.ADOCmnd.Execute ;
       end;DM.ADOCnctn.CommitTrans ;
    showmessage('保存成功');
    except
    DM.ADOCnctn.RollbackTrans ;
    showmessage('保存失败');
    end;////////////////////////////////////
    //读取打印磅单资料
    P_HuoDan:=CmbBx_HuoDan.Text ;
    P_HeTong:=CmbBx_HeTong.Text  ;
    P_TiHuoFangShi:=CmbBx_TiHuoFangShi.Text ;
    P_KuWei:=CmbBx_KuWei.Text ;
    P_TiHuoRen:=CmbBx_TiHuoRen.Text ;
    P_JianShu:=Edt_JianShu.Text ;
    P_XuHao:=Edt_XuHao.Text ;
    if huicheng=false then begin
        P_RiQi1:=mdate;
        P_RiQi2:='';
        P_ShiJian1:=mtime;
        P_ShiJian2:='';
         end
       else begin
         P_RiQi1:=riqi_weihui;
         P_RiQi2:=mdate;
         P_ShiJian1:=shijian_weihui;
         P_ShiJian2:=mtime;
         end;P_CheHao:=CmbBx_CheHao.Text ;
    P_KeHu:=CmbBx_KeHu.Text ;
    P_HuoWu:=CmbBx_HuoWu.Text ;
    P_ZongZhong:=Edt_ZongZhong.Text ;
    P_PiZhong:=Edt_PiZhong.Text;
    P_TongZongZhong:=Edt_TongZongZhong.Text ;
    P_JingZhong:=Edt_JingZhong.Text ;
    P_Caozuo:=Edt_CaoZuo.Text ;////////////////////////////////////
    BtBtn_Cancel.Click ;end;
      

  3.   

    DM.ADOCmnd.Execute ;???
    改成DM.ADOCmnd.Exesql ;试试另外你说的看不见结果是从哪里看的?
      

  4.   

    to heixiu1980:
       我是从DBGrideh中看的.
      

  5.   

    另外好像没看见你刷新DBGrideh的语句?
      

  6.   

    对呀,好像没看见你刷新DBGrideh的语句?
      

  7.   

    我的DBGrideh在另一个窗口,窗口打开时刷新。
    我做了一个改动:
       adodataset1.active:=false;   
       adodataset1.active:=true;
       改为
       adodataset1.close;
       adodataset1.open;
    然后发给客户使用,希望不会再出现上面的情况。
    现在开始给分,多谢各位!