我是用ACCESS数据库,用ODBC。我的系统是WIN2000,打包的步骤如下,但在有些98上安装是正常,有的98上安装会破坏ODBC驱程。1.启动程序设置有关文件目录路径,进入Setup Checklist;
  2.在Set the Visual Design中设置程序名、程序目录、安装程序主窗口等;
  3.在Specify Components and Files中设置Groups and Files项,在Program Files中加入用户的所有程序文件和数据库表文件,以及下列文件:Idbat32.dll、Usa.btl、Idapi.cfg、Charset.cvb、Bantam.dll、BLW32.dll、Idapi32.dll、Fareast.btl、Iddao32.dll、Idr20009.dll、Idsql32.dll、Idodbc32.dll(以上文件必须含目录路径);
  4.在Dialog Boxes中设置所需安装对话框;
  5.在Make Registry Changes中设置Keys项,在HKEY_LOCAL_MACHINE中加入software\borland\blw32和software\borland\database engine两项,并且在blw32值中加入
  “Blapipath ‘以上文件目录’”、“LOCALE_LIB0 ‘以上文件目录’\Fareast.bll”和“LOCALE_LIB1 ‘以上文件目录’\Usa.bll”,在database engine值中加入“Dllpath ‘以上文件目录’”、“Configfile01 ‘以上文件目录’\Idapi.cfg”;

解决方案 »

  1.   

    我用的是ODBC+ACCSS。当我在有些98上安装上去的时候。会提示说odbccp32.cpl错误!!
      

  2.   

    不再安装里做手脚,通过程序自建用Delphi动态建立ODBC数据源    以连接MS-Access数据库为例。一、步骤1、打开Delphi,建立一个新的应用程序:Project1。
    2、依次添加ToolBar1、ADOConnection1、ADOTable1、DataSource1、DBGrid1、OpenDialog1各一个。
    3、在ToolBar1添加ToolButton1、ComboBox1各一个。
    4、设置:
       ADOTable1.Connection:=ADOConnection1;
       DataSource1.DataSet:=ADOTable1;
       DBGrid.DataSource:=DataSource1;二、完整的源代码unit Unit1;
    interface
    uses
      Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,Registry,ExtCtrls,DBCtrls,ImgList,ComCtrls,ToolWin,Grids,DBGrids,Db,ADODB,StdCtrls;type
    TForm1 = class(TForm)
    ADOConnection1:TADOConnection;
    ADOTable1:TADOTable;
    DataSource1:TDataSource;
    DBGrid1:TDBGrid;
    OpenDialog1:TOpenDialog;
    ToolBar1:TToolBar;
    ToolButton1:TToolButton;
    ImageList1:TImageList;
    DBNavigator1:TDBNavigator;
    ComboBox1:TComboBox;procedure ToolButton1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);private
    {Private declarations}public
    {Public declarations}end;var
    Form1:TForm;
    Function ReadODBCDriver(Name: String):String;
    Function CreateMsAccess(Path: String; driver:String):Boolean;implementation
    {$R *.DFM}//读取驱动程序位置
    Function ReadODBCDriver(Name: String):String;
    var
      registerTemp: TRegistry;
    begin  registerTemp:=TRegistry.Create;
      //读取MS-ACCESS驱动程序位置
      if Name='Access' then
      begin
        with registerTemp do
        begin
          RootKey:=HKEY_LOCAL_MACHINE;
          if OpenKey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver(*.mdb)',True) then
          begin
            ReadODBCDriver:=ReadString('Driver');
            CloseKey;
            Free;
            Exit;
          end;
        end;
      end;
      registerTemp.Free;
      ReadODBCDriver:=''; end;Function CreateMsAccess(Path: String; driver: String):Boolean;
    var
      registerTemp:TRegistry;
      bData:array[0..0] of byte;
    begin  if Driver='' then
      begin
        ShowMessage('读取ODBC驱动程序失败,请重新安装ODBC!');
        Exit;
      end;
      
      registerTemp:=TRegistry.Create;
      CreateMsAccess:=True;
      with registerTemp do
      begin
        RootKey:=HKEY_LOCAL_MACHINE;
        if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
        begin
          //注册一个DSN名称
          WriteString('TemAccess','Microsoft Access Driver(*.mdb)');
        end
        else
        begin
          CreateMsAccess:=False;
          Exit; 
        end;
        CloseKey;
        
        //找到或创建Software\ODBC\ODBC.INI\TemAccessDataBase, 写入DSN配置信息
        if OpenKey('Software\ODBC\ODBC.INI\TemAccess',True) then
        begin
          //数据库目录,连接你的数据库
          WriteString('DBQ',Path);
         
          //数据源描述
          WriteString('Description','AccessDataBase');      //驱动程序DLL文件
          WriteString('Driver',Driver);      //驱动程序标识
          WriteInteger('DriverId',25);      //Filter依据
          WriteString('FIL','Ms Access;');      //支持的事务操作数目
          WriteInteger('SafeTransaction',0);      //用户名称
          WriteString('UID','');
          
          bData[0]:=0;
          //非独占方式
          WriteBinaryData('Exclusive',bData,1);      //非只读方式
          WriteBinaryData('ReadOnly',bData,1);     
        end
        else
        begin
          CreateMsAccess:=False;
          Exit;
        end; 
        CloseKey;
        
        //找到或创建Software\ODBC\ODBC.INI\TemAccessDataBase\Engines\Jet 写入DSN数据库引擎配置信息
        if OpenKey('Software\ODBC\ODBC.INI\TemAccess\Engines\Jet',True) then
        begin
          WriteString('ImplicitCommitSync','Yes');
          //缓冲区大小
          WriteInteger('MaxBufferSize',512);      //页超时
          WriteInteger('PageTimeout',10);     //支持的线程数目
         WriteInteger('Threads',3);
        
         WriteString('UserCommitSync','Yes'); 
        end
        else
        begin
          CreateMsAccess:=False;
          Exit;
        end;
        CloseKey;
        Free;
      end;    end;procedure TForm1.ToolButton1Click(Sender: TObject);
    var
      FileName:String;
    begin
      
      if OpenDialog1.Execute then
      begin
        ADOConnection1.Connected:=False;
        FileName:=OpenDialog1.FileName;
        //创建ODBC
        CreateMsAccess(FileName,ReadODBCDriver('Access'));
       
        //连接ODBC
        ADOConnection1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=TemAccess;Mode=ReadWrite';
        ADOConnection1.Connected:=True;
        ADOConnection1.GetTableNames(ComboBox1.Items.False);
        ComboBox1.ItemIndex:=0;
        ADOTable1.Connection:=ADOConnection1;
        ADOTable1.TableName:=ComboBox1.Text;
        ADOTable1.Open;
      end;end;procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      
      ADOTable1.Active:=False;
      ADOTable1.TableName:=CoboBox1.Text;
      ADOTable1.Open;
    end;end.
      

  3.   

    备份odbc.ini,安装后copy回原位置。
      

  4.   

    我想知道什么原因导致会破坏ODBC