小妹的毕业设计眼看就要交了,可是一个问题始终解决不了。问了好几个师兄都没没辙。情急之下,只好来这里求教高人。问题简述如下:delphi和oracle之间采用BDE连接。对于oracle下的表ziliao进行删除操作。控件是
datasoure,table,一个edit1,用于输入想删除的记录的名字,一个button按钮。
单击button,加入代码procedure TForm1.Button1Click(Sender: TObject);
begin
    with table1 do
    begin
     indexfieldnames:='article_name';
     if findkey([edit1.text])then
     begin
      if messagedlg('你确定要删除这条记录么',mtconfirmation,[mbyes,mbno],0)=mryes then delete;
     end
    else
       messagedlg('没有找到该纪录',mterror,[mbcancel],0);
    end;
end;程序运行后,在edit1中输入想删除的文章的名字,点击按钮弹出“你确定要删除这条记录么”的box,至此都正确,可是当点击确定按钮后,即报错:prject delproject1.exe raised exception class EAccessViolation with message'Access violation at address 4DAO64AD in module 'IDODBC32.DLL'.Read of address 00000014'.若后台数据库不用oracle,譬如以delphi自带的DBDEMOS,同样的程序,运行起来就没有问题。初步怀疑是BDE的问题,要不就是我的电脑太烂了?求教,求教,再解决不了,真要郁闷死了!

解决方案 »

  1.   


          findkey([edit1.text])
    改用
    table.locate('article_name',edit1.text,[]);
    运行一下哎 我有一个MM的毕业设计还没解决呢
      

  2.   

    小强同志,你给的方案不行啊,还是报同样的错。sigh…………再帮忙想想吧
      

  3.   

    这样吧,把BDE换成TADOTable 试试
      

  4.   

    我做到现在都用的是BDE,ADO从来就 没有摸过,现在从头再来似乎来不及了。
      

  5.   

    我想这里有两个问题:
    一个是用findkey方法,应该用locate更加好,因为locate可以定位到查找到的记录,所以删除
    的一定是所需要的记录。还有,table.active 应该设为true, 你也可以加入一个判定条件试试:
    begin
        with table1 do
        begin
         table1.active:=true;
         if locate('article_name',[edit1.text],[])=true then
         begin
          if messagedlg('你确定要删除这条记录么',mtconfirmation,[mbyes,mbno],0)=mryes    then delete;
         end
        else
           messagedlg('没有找到该纪录',mterror,[mbcancel],0);
        end;
    end;