我用installshield professional6.22打包用delphi做的数据库程序,我用的数据库是oracle,我用odbc连接数据库,
database1.DriverName:='Oracle ODBC Driver';
database1.AliasName:='aaa';
database1.DatabaseName:='yz';
database1.Params.Add('USER NAME=test');
database1.Params.Add('PASSWORD=test');
database1.LoginPrompt:=false;
database1.Connected:=true;
database1.KeepConnection:=true;出现下面问题,报错说“unknown database alias name 'yz',这是怎么回事,请各位帮忙,我已经郁闷好多天了,我在线等待,谢谢

解决方案 »

  1.   

    就是说在安装该程序的机器上面除了安装我的打包程序之外还要安装oracle的客户端是吗?那是不是安装了客户端之外,还要在该机器上配置odbc
      

  2.   

    安装客户端即可,odbc配置可以在你的应用程序中动态配置(用代码写即可)。
      

  3.   

    如果服务器是oracle,客户端得安装客户端,不然无法监听服务器信息。
      

  4.   

    unit UnitSysSet ;interface
    uses Windows,Registry;function ExistAccessDSN(aDSN:string;aDBName:string):boolean;function ConfigAccessODBC(aDSN:string;aDBName:string):boolean;implementationfunction ExistAccessDSN(aDSN:string;aDBName:string):boolean;
    var
       Reg: TRegistry;
       StrOdbcIni:string;
    begin
      StrOdbcIni:='Software\ODBC\ODBC.INI\';
      Reg := TRegistry.Create;
      ExistAccessDSN:=false;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey(StrOdbcIni+'ODBC Data Sources',True) then
          if (Reg.ReadString(aDSN)='Microsoft Access Driver (*.mdb)') then
            begin
             Reg.CloseKey;
             if (Reg.KeyExists(StrOdbcIni+aDSN)) then
               begin
                 if Reg.OpenKey(StrOdbcIni+aDSN,false) then
                   if Reg.ReadString('DBQ')=aDBName then
                     ExistAccessDSN:=true
                   else
                     ExistAccessDSN:=false;
               end
             else
               ExistAccessDSN:=false;
            end
          else
            ExistAccessDSN:=false
        else
          ExistAccessDSN:=false;
        finally
           Reg.Closekey;
           Reg.Free;
        end;
     end;
    function ConfigAccessODBC(aDSN:string;aDBName:string):boolean;
    var
      reg: TRegistry;
      bData : array[ 0..0 ] of byte;
      DrvPath : string;
    begin
      reg:= TRegistry.Create;
      with reg do
      begin
        RootKey:=HKEY_LOCAL_MACHINE;
        if OpenKey('SOFTWARE\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',false) then
        begin
          DrvPath:=ReadString('Driver');
        end
        else
        begin //创建键值失败
          //ShowMessage('公共信息'+':'+chr(10)+chr(10)+'您没有正确安装驱动程序Microsoft Access Driver (*.mdb),请重新安装!','错误信息', mb_applmodal+mb_iconerror+mb_ok+mb_defbutton1);
          ConfigAccessOdbc:=false;
          exit;
        end;
        Reg.CloseKey;
        //找到Software\ODBC\ODBC.INI\ODBC Data Sources
        if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
        begin
          WriteString(aDSN, 'Microsoft Access Driver (*.mdb)' );
        end
        else
        begin //创建键值失败
          //application.MessageBox('公共信息'+':'+chr(10)+chr(10)+'配置ODBC数据源失败!','错误信息', mb_applmodal+mb_iconerror+mb_ok+mb_defbutton1);
          ConfigAccessOdbc:=false;
          exit;
        end;
        CloseKey;
       //找到或创建Software\ODBC\ODBC.INI\msac_infodb,写入DSN配置信息
       if OpenKey('Software\ODBC\ODBC.INI\'+aDSN,True) then
       begin
         WriteString( 'DBQ', aDBName);//数据库目录,连接您的数据库
         WriteString( 'Description','系统信息数据库数据源' );//数据源描述
         //WriteString( 'Driver', 'C:\WINNT\System32\odbcjt32.dll' );
         WriteString( 'Driver', DrvPath );//驱动程序DLL文件
         WriteInteger( 'DriverId', 25 ); //驱动程序标识
         WriteString( 'FIL', 'Ms Access;' );//Filter依据
         WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
         WriteString( 'UID', '' );//用户名称
         bData[0] := 0;
         WriteBinaryData( 'Exclusive', bData, 1 ); //非独占方式
         WriteBinaryData( 'ReadOnly', bData, 1 ); //非只读方式
       end
       else//创建键值失败
       begin
         //application.MessageBox('公共信息'+':'+chr(10)+chr(10)+'配置ODBC数据源失败!','错误信息', mb_applmodal+mb_iconerror+mb_ok+mb_defbutton1);
         ConfigAccessOdbc:=false;
         exit;
       end;
       CloseKey;
      //找到或创建Software\ODBC\ODBC.INI\msac_infodb\Engines\Jet
      //写入DSN数据库引擎配置信息
       if OpenKey('Software\ODBC\ODBC.INI\'+aDSN+'\Engines\Jet',True) then
       begin
         WriteString( 'ImplicitCommitSync', 'Yes' );
         WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
         WriteInteger( 'PageTimeout', 10 );//页超时
         WriteInteger( 'Threads', 3 );//支持的线程数目
         WriteString( 'UserCommitSync', 'Yes' );
       end
       else//创建键值失败
       begin
         //application.MessageBox('公共信息'+':'+chr(10)+chr(10)+'配置ODBC数据源失败!','错误信息', mb_applmodal+mb_iconerror+mb_ok+mb_defbutton1);
         ConfigAccessOdbc:=false;
         exit;
       end;
       CloseKey;
       ConfigAccessOdbc:=True;
       Free;
      end;
    end;
    end.
      

  5.   

    我已经安装了oracle的客户端,还是出现
    报错说“unknown database alias name 'yz'.
      

  6.   

    客户端得监听配置好了没有?是否能够链接到oracle服务器?
      

  7.   

    上面代码是程序中动态配置odbc的,它是for access的,for oralce的自己改造一下。
      

  8.   

    我已经安装了oracle的客户端,还是出现
    报错说“unknown database alias name 'yz'.
    我不想动态配置odbc,那只有手工配置odbc了
      

  9.   

    这样看来用installshield打包主要是程序代码及bde部分,oracle客户端要装,odbc要配置
      

  10.   

    软件打包建议使用wise Install 9.0处理比较简单。