本人现在正在尝试用ODAC做一个Oracle应用程序,请有过次经历的朋友说说你们的做法,谈谈ODAC的优劣之处吧。

解决方案 »

  1.   

    还有为什么我把OraSession.connected先设为true,然后再断开,我的OraQuery组件还是能访问到数据啊??好像OraSession.connected一设为true,就一直保持连接一样。这是为什么?
      

  2.   

    Oracle数据库不好用。这是最大的感觉。
    我在三层(MTS)中应用到。MTS是微软的,可能和Oracle有些抵触。最终调好了但很难用。
    OraSession.connected的问题我没遇到。
      

  3.   

    把你的源代码发出来,你的这个问题不应该出现,
    Oraclesession.connected:=false;
    就是断开连接。
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);//Button1用于控制数据库连接
    begin
      with OraSession1 do
        begin
          server:=edit1.Text;//输入"ip:1521:SID"
          username:=edit2.Text;//输入用户名
          password:=edit3.Text;//输入密码
        end;
        try
          OraSession1.connected:=true ;
          label4.Caption:='数据库已经连接';
        except
          showmessage('数据库连接错误');
        end;
    end;procedure TForm1.Button2Click(Sender: TObject);//Button2用于断开数据库连接
    begin
      OraSession1.Connected:=false;
    end;procedure TForm1.Button3Click(Sender: TObject);//Button3执行查询
    begin
      OraQuery1.Close;
      OraQuery1.SQL.Clear;
      OraQuery1.SQL.Add('select * from aircraft');//aircraft是一个表名
      OraQuery1.Prepare;
      OraQuery1.Open;
    end;
       
       以下是我的操作步骤:
       1.先用Button1连接数据库没问题,可以连接成功;
       2.然后用Button3执行查询,可以在DBGrid里看到查询结果;
       3.用Button2断开数据库连接,DBGrid里的结果消失;
       4.再用Button3执行查询,又可以在DBGrid里看到查询结果,可是此时我的数据库是断开的阿,怎么OraQuery1还能查询到数据呢???
    ( Langhong(狼.红) )你可以看看啊
      

  5.   

    是这样的,ODAC的Query会判断当前的Session是否连接,如果没有连接会自动调用OraSession进行自动连接,所以你的Button3程序可以查询到数据。
      

  6.   

    Button3的程序在执行之前可以先判断OraSession是否连接,如果没有连接就不要执行Open操作了:
     if not OraSession.Connected then exit;