我用的是Windows 2000 Advanced Server、 Delphi 7 企业版、 Oracle 9i Release 2。Oracle连接字符串用UDL文件生成,连接测试成功。如下:
'Provider=MSDAORA.1;Password=mypwd;User ID=myname;Data Source=mydb;Persist Security Info=True'
用户名:myname
密码:mypwd
网络服务名:mydb主窗体上只有一个TADOConnection控件和一个TButton控件。单击TButton控件,连接数据库。程序中主窗体Unit文件如下:unit MainFrm;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, DB, ADODB, Buttons;type
  TfrmMain = class(TForm)
    cnnOracle: TADOConnection;
    btTestConn: TButton;
    procedure btTestConnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  frmMain: TfrmMain;implementation{$R *.dfm}procedure TfrmMain.btTestConnClick(Sender: TObject);
begin
cnnOracle.ConnectionString := 'Provider=MSDAORA.1;Password=mypwd;User ID=myname;Data Source=mydb;Persist Security Info=True';
    try
        if (cnnOracle.Connected) then  cnnOracle.Close;
        try
            cnnOracle.ConnectionString := ConnStr;
            cnnOracle.Open;
            ShowMessage('Connected!');
        finally
            cnnOracle.Close;
        end;
    except
        {Oracle数据库连接失败}
    end;
end;end.编译成功后,运行程序。点击btTestConn按钮后提示:
Debugger Exception Notification
Project DBConnTest.exe raised exception class EOleException with message 'ORA-06413:连接未打开'.
Process stopped. Use Step or Run to continue.而且在生成的exe文件的目录下,多出一个sqlnet.log文件,内容如下。***********************************************************************
Fatal NI connect error 6413, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=BEQ)(PROGRAM=oracle)(ARGV0=oraclemydb)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')))(CONNECT_DATA=(SID=mydb)(CID=(PROGRAM=F:\U\DTrueMaker3(Oracle)\DBConnTest\DBConnTest.exe)(HOST=SUFE-HAPPY)(USER=Administrator))))  VERSION INFORMATION:
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
  Time: 06-8月 -2003 12:25:23
  Tracing not turned on.
但是把生成的exe文件复制到其它目录下,却运行正常,能够连接到Oracle。我觉得程序可能没有问题,可能是Delphi的哪里的设置不对。哪位高人来指点一下?
分不够还可以另开帖子送分。多谢!

解决方案 »

  1.   

    procedure TfrmMain.btTestConnClick(Sender: TObject);
    begin
    cnnOracle.ConnectionString := 'Provider=MSDAORA.1;Password=mypwd;User ID=myname;Data Source=mydb;Persist Security Info=True';
        try
            if (cnnOracle.Connected) then  cnnOracle.Close;
            try
                cnnOracle.ConnectionString := ConnStr;
                cnnOracle.Open;
                if cnnOracle.Connected then
                ShowMessage('Connected!');
            finally
                cnnOracle.Close;
            end;
        except
            {Oracle数据库连接失败}
        end;
    end;