我用adoquery连接oracle,
我的程序在sybase下均通过,换成oracle数据库后,查询可以,但插入不行,而我直接用插入命令在oracle客户端执行也行,换了各种数据驱动都是这样,也装了Microsoft Data Access Components 2.7,请教可能会是什么原因!!???1)
以下程序是在oracle执行;
Provider=OraOLEDB.Oracle.1;Password=pass111;Persist Security Info=True;User ID=usr999;Data Source=ORACLE;adoquery1.close;
ADOquery1.SQL.text:=sqlstr;
ADOquery1.open;我用DBGrid组件能看到查询的数据2)
sqlstr:= ..(语句略,该语句在showmessage显示出来的sql命令在oracle终端执行通过)
showmessage(sqlstr);
memo2.lines.add(sqlstr);
memo2.lines.savetofile('日志.log');
adoquery1.close;
ADOquery1.SQL.text:=sqlstr;
ADOquery1.execsql;运行后程序一直停在那里,什么反应都没有,该程序在sybase 下通过;不知道为什么会这样

解决方案 »

  1.   

    这个问题很多人问过了,虽然是针对不同的数据库但是方式是类似的。
    首先,视图的修改是有条件的,不是所有的视图都能修改。其次,ADO虽然能修改一些视图,但是是非常有限的,具体我的我不知道,BDE的知道些。BDE在视图的更新方面提供了TUpdateSQL控件,这个控件理论上可以修改任何你想修改的视图。
    ADO和其后的DBX没提供这个控件,但是VCL却提供了另外的方法。ADOQuery -> DataSetProvider -> ClientDataSet利用Clientdataset来修改数据,
    DataSetProvider 提供了一个事件 BeforeUpdateRecord,你看看他的help,你可以在里面写自己的SQL来实现TUpdateSQL的功能,用它来修改视图。
      

  2.   

    to jinjazz(近身剪(N-P攻略)) :
    执行后也是一样,程序没有反应,我设了commandtimeout值为5
    try
    showmessage(sqlstr);
    adoquery1.close;
    ADOquery1.SQL.text:=sqlstr;    //执行到这一步,在这一步停住了;
    s:=ADOquery1.execsql;
    showmessage('sql成功!s 值为'+inttostr(s));
    except
    showmessage('数据库链接出错,s值为'+inttostr(s));
    end;
      

  3.   

    adoquery1.close;
    AdoQuery1.SQL.Clear;      //加上这一句试试
    ADOquery1.SQL.text:=sqlstr;
      

  4.   

    to smiler007(笑一笑) 
    结果也一样。我正式写的时候有clear;
      

  5.   

    sqlstr里面是什么,拿出来看一下
      

  6.   

    问题解决了,谢谢各位!!我开了一个叫Toad oracle客户端程序查询数据库,同时又运行我的程序,这样程序执行insert时就会停着不动,但查询又可以,用bde,ado访问都是如此,后来关了这个客户端程序就行了.不关连接数的事,因为可以同时开几个客户端程序,不知为什么.
      

  7.   

    Toad查询时加了共享锁,其他程序可以读取,但不能更新