我用了三個控件,DBGrid,DBNavigator,ADOQuery,都設置在同一個數據源,datasource。
ADOQuery寫了一個插入數據的代碼和一個顯示數據的方法:
      with ADOQuery1 do
      begin
       ADOQuery1.close;
       ADOQuery2.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add('insert into xginfomation values');
       ADOQuery1.SQL.Add('('''+bname+''','''+bcard+''','''+bsex+''','''+bportment+''','''+bphe+''','''+bpostid+''','''+xaddress+''','''+bpwd+''','''+bcardid+''')');
       ADOQuery1.ExecSQL;
       showmessage('用戶信息輸入成功!');
       DBNavigator1.Refresh;
       //刷新DBGrid11
     with ADOQuery2 do
       begin
        close;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Add('select XGid,XGname,XGcardid,XGsex,XGdepartment,XGphe,p.postXG,XGaddress,cardid  from ');
        ADOQuery2.SQL.Add('xginfomation  xg join post p on xg.XGpostid=p.pid');
        ADOQuery2.Open;
       end;
         begin
         //清空輸入的內容
         editXGname.Clear;
         editcard.Clear;
         editphe.Clear;
         edtdepartment.Clear;
         eidtxgpwd.Clear;
         richedit.Clear;
         end;
=================================
我使用DBNavigator的刪除功能,程序報錯,提示內容“找不到要跟新的資料列,最好讀取的值已被變更”。確定這個提示框后,
再在sqlserver2000中查詢數據,數據竟然被刪除了好幾行數據。。
各位大哥,大姐門。。幫幫偶。。 

解决方案 »

  1.   

    首先,你的问题就不对.
    如果是删除问题,就不会涉及到DBNavigator的工作失败;
    应该是ADOQuery工作失败才对;
    你对join得到的TDataSet进行删除;
    ADOQuery会根据你的要求,做SQL解析;
    而且ADOQuery对于Join表的SQL解析是很不稳定的;
    有时候它会只删除Join左表所对应的记录,
    有时候它会只删除Join右表所对应的记录,
    有时候它会删除Join多个表所对应的记录,
    -------------------------------------------------------------------------
    建议把你的Inner Join改成Left Outer Join或者是 Right Outer Join;
    还要通过SQL事件查看器看看ADOQuery解析的到底是什么SQL;
    或者使用MDAC控件!
      

  2.   

    行吧,,我試試。。SQL事件查看器ADOQuery解析sql我已經解釋過了。
    控件我還是只能用ADOQuery和DBNavigator因為我不會用別的控件,我是新手。
    我改sql語句吧。按你方法用Left Outer Join或者是 Right Outer Join; 
    看下會有什麽結果。
    謝謝了。
    等下散分給你啊。。
      

  3.   

    老兄:按你的方法。我把sql語句改為
    =========================================================
     ADOQuery2.SQL.Add('select  xg.XGid,xg.XGname,xg.XGcardid,xg.XGsex,xg.XGdepartment,xg.XGphe,p.postXG,xg.XGaddress,xg.cardid  from ');
       ADOQuery2.SQL.Add('xginfomation  xg left outer join post p on xg.XGpostid=p.pid');
    =========================================================
    還是刪除了好多行,我才點擊了幾下,數據庫的那個表的數據就差不多刪除沒了。
    提示的錯誤還是“找不到要跟新的資料列,最好讀取的值已被變更”。
    請再看看。謝謝了。
      

  4.   

    你有在表裡定Key嗎?如果沒有,就有可能是把你選擇的相同的全部刪除!
      

  5.   

    Key是主鍵嗎?是那個表的主鍵呢?還是在DBGird里定主鍵呢?
    我有啊。我在主表XGinfomation有個主鍵,我定的是自動增長列。
    其他的我就不太明白