急用,好使就给分!!!!

解决方案 »

  1.   

    procedure TForm1.SeSkinButton3Click(Sender: TObject);
    var s:string;
    begin
    s:=extractfilepath(application.ExeName)+'temp.mdb';
    try
     SQLConfigDataSource(0, 4, 'Microsoft Access Driver (*.mdb)',
                          'DSN=temp' + Chr(0) +
                          'Server=(local)' + Chr(0) +
                          'DBQ='+s + Chr(0) +
                          'Description=lingfeng');except
      newmsg.ShowMessage('数据源创建失败!!')
    end;
      newmsg.ShowMessage('数据源创建成功!!')end;
      

  2.   

    差点忘了,得加上这个
    function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';
      

  3.   

    Sybase数据库:
    function RegOdbcSybase(OdbcName:string;Desc:string;ServerName:string;DatabaseName:string;UserName:string;Password:string;var ErrorInfo:string):Boolean;
    var
      registertemp:TRegistry;   //注册表类
    begin
      if trim(OdbcName)='' then begin
        ErrorInfo:='ODBC数据源名称不能为空!';
        RegOdbcSybase:=false;
        exit;
      end;
      if trim(DatabaseName)='' then begin
        ErrorInfo:='数据库名称不能为空!';
        RegOdbcSybase:=false;
        exit;
      end;
      if trim(ServerName)='' then begin
        ErrorInfo:='Sybase客户端服务名称不能为空!';
        RegOdbcSybase:=false;
        exit;
      end;    //以下为注册ODBC(Sybase) 和写信息到注册表
      registertemp:=Tregistry.Create;
      with registertemp do begin
        Rootkey:=HKEY_LOCAL_MACHINE;
        try
          try                             //注册Sybase
            closekey;
            if openkey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources',true) then
              writestring(OdbcName,'Sybase System 11');        closekey;
            If Openkey('SOFTWARE\ODBC\ODBC.INI\'+OdbcName,true) then
              begin
                Writestring('ApplicationName','');
                Writestring('ApplicationUsingThreads','1');
                Writestring('ArraySize','50');
                Writestring('Charset','');
                Writestring('CursorCacheSize','1');
                Writestring('Database',DatabaseName);
                Writestring('Databases',DatabaseName);
                Writestring('Description',Desc);
                Writestring('DirectoryServiceProvider','');
                Writestring('Driver','\SYSYBNT.DLL');
                Writestring('EnableQuotedIdentifiers','0');
                Writestring('InitializationString','');
                Writestring('InterfacesFile','');
                Writestring('Language','');
                Writestring('LogonID','');
                Writestring('OptimizePrepare','2');
                Writestring('PacketSize','0');
                Writestring('PasswordEncryption','0');
                Writestring('SecurityServiceProvider','');
                Writestring('SelectMethod','1');
                Writestring('ServerName',ServerName);
                Writestring('Servers',ServerName);
                Writestring('WorkStationID','');
                Writestring('UserName',UserName);
                Writestring('Password',Password);
              End;
            ErrorInfo:='创建成功!';
            RegOdbcSybase:=true;
          except
            ErrorInfo:='创建失败,写注册表失败!';
            RegOdbcSybase:=false;
          end;
        finally
          Closekey;
          Free;
        end;
      end;
    end;ACCESS数据库:
                       //注册Access ODBC数据库连接信息到注册表
    function RegOdbcAccess(OdbcName:string;Desc:string;DatabasePath:string;DatabaseUserName:string;DatabasePassword:string;var ErrorInfo:string):Boolean;
    var
      registertemp:TRegistry;   //注册表类
    begin
      if trim(OdbcName)='' then begin
        ErrorInfo:='ODBC数据源名称不能为空!';
        RegOdbcAccess:=false;
        exit;
      end;
      if trim(DatabasePath)='' then begin
        ErrorInfo:='数据库文件不能为空!';
        RegOdbcAccess:=false;
        exit;
      end;    //以下为注册ODBC(Access) 和写信息到注册表
      registertemp:=Tregistry.Create;
      with registertemp do begin
        Rootkey:=HKEY_LOCAL_MACHINE;
        try
          try
                                               //首先检测ODBC驱动程序是否安装
            if not openkey('SOFTWARE\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',FALSE) then begin
              ErrorInfo:='请按装 Microsoft Access 的ODBC驱动程序!';
              RegOdbcAccess:=false;
              Exit;
            end;
                                 //注册Access
            closekey;
            if openkey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources',true) then
              writestring(OdbcName,'Microsoft Access Driver (*.mdb)');        closekey;
            If Openkey('SOFTWARE\ODBC\ODBC.INI\'+OdbcName,true) then
              begin
                Writestring('DBQ',DatabasePath);
                Writestring('Description',Desc);
                writestring('Driver','\odbcjt32.dll');
                writeinteger('DriverID',25);
                writestring('FIL','MS Access;');
                writestring('PWD',DatabasePassword);
                writeinteger('safeTransactions',0);
                writestring('UID',DatabaseUserName);
                closekey;
                if openkey('SOFTWARE\ODBC\ODBC.INI\erp_local\Engines\Jet',true) then
                  begin
                    writestring('ImplicitCommitSync','');
                    writeinteger('MaxBurrerSize',2048);
                    writeinteger('PageTimeout',5);
                    writeinteger('Threads',3);
                    writestring('UserCommitSync','Yes');
                 end
              end;
            ErrorInfo:='创建成功!';
            RegOdbcAccess:=true;
          except
            ErrorInfo:='创建失败,写注册表失败!';
            RegOdbcAccess:=false;
          end;
        finally
          Closekey;
          Free;
        end;
      end;
    end;                   //注册SQL Server ODBC数据库连接信息到注册表
    function RegOdbcSqlServer(OdbcName:string;Desc:string;DatabaseName:string;DatabaseUserName:string;Databasepassword:string;DatabaseServerName:string;var ErrorInfo:string):Boolean;
    var
      registertemp:TRegistry;   //注册表类
    begin
      if trim(OdbcName)='' then begin
        ErrorInfo:='ODBC数据源名称不能为空!';
        RegOdbcSqlServer:=false;
        exit;
      end;
      if trim(DatabaseName)='' then begin
        ErrorInfo:='数据库名称不能为空!';
        RegOdbcSqlServer:=false;
        exit;
      end;
      if trim(DatabaseUserName)='' then begin
        ErrorInfo:='数据库用户名不能为空!';
        RegOdbcSqlServer:=false;
        exit;
      end;
      if trim(DatabaseServerName)='' then begin
        ErrorInfo:='数据库服务器名不能为空!';
        RegOdbcSqlServer:=false;
        exit;
      end;    //以下为注册ODBC(SQL SERVER) 和写信息到注册表
      registertemp:=Tregistry.Create;
      with registertemp do begin
        Rootkey:=HKEY_LOCAL_MACHINE;
        try
          try
                                               //首先检测ODBC驱动程序是否安装
            if not openkey('SOFTWARE\ODBC\ODBCINST.INI\SQL Server',FALSE) then begin
              ErrorInfo:='请按装 Microsoft SQL Server 的ODBC驱动程序!';
              RegOdbcSqlServer:=false;
              Exit;
            end;
                                 //注册SQL SERVER
            closekey;
            if openkey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources',true) then
              writestring(OdbcName,'SQL Server');        closekey;
            If Openkey('SOFTWARE\ODBC\ODBC.INI\'+OdbcName,true) then
              begin
                Writestring('driver','\SQLSRV32.dll');
                Writestring('lastuser',DatabaseUserName);
                Writestring('server',DatabaseServerName);
                Writestring('password',Databasepassword);
                Writestring('database',DatabaseName);
                Writestring('Description',Desc);
              End;
            ErrorInfo:='创建成功!';
            RegOdbcSqlServer:=true;
          except
            ErrorInfo:='创建失败,写注册表失败!';
            RegOdbcSqlServer:=false;
          end;
        finally
          Closekey;
          Free;
        end;
      end;
    end;
      

  4.   

    const
      ODBC_ADD_DSN = 1; // 添加数据源
      ODBC_CONFIG_DSN = 2; // 配置数据源
      ODBC_REMOVE_DSN = 3; // 删除数据源
      ODBC_ADD_SYS_DSN = 4; // 添加系统DSN
      ODBC_CONFIG_SYS_DSN = 5; // 配置系统DSN
      ODBC_REMOVE_SYS_DSN = 6; // 删除系统DSNtype
      TSQLConfigDataSource = function( hwndParent: HWND;
      fRequest: WORD;
      lpszDriver: LPCSTR;
      lpszAttributes: LPCSTR ) : BOOL; stdcall;
    procedure Form1.FormCreate(Sender: TObject);
    var
      pFn: TSQLConfigDataSource;
      hLib: LongWord;
      strDriver: string;
      strHome: string;
      strAttr: string;
      strFile: string;
      fResult: BOOL;
      ModName: array[0..MAX_PATH] of Char;
      srInfo : TSearchRec;
    begin
      Windows.GetModuleFileName( HInstance, ModName, SizeOf(ModName) );
      strHome := ModName;
      while ( strHome[length(strHome)] <> '\' ) do
      Delete( strHome, length(strHome), 1 );
      strFile := strHome + 'TestData.MDB'; // 检查Access权限(Axes = Access)
      hLib := LoadLibrary( 'ODBCCP32' );
      if( hLib <> NULL ) then
      begin
      @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
      if( @pFn <> nil ) then
      begin
      // 强迫重建DSN
      strDriver := 'Microsoft Access Driver (*.mdb)';
      strAttr := Format( 'DSN=TestDSN'+#0+
      'DBQ=%s'+#0+
      'Exclusive=1'+#0+
      'Description=Test Data'+#0+#0,
      [strFile] );
      fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
      if( fResult = false ) then ShowMessage( '创建DSN (Datasource)失败!' );  // 检测/创建同DSN关联的 MDB 文件
      if( FindFirst( strFile, 0, srInfo ) <> 0 ) then
      begin
      strDriver := 'Microsoft Access Driver (*.mdb)';
      strAttr := Format( 'DSN=TestDSN'+#0+
      'DBQ=%s'+#0+
      'Exclusive=1'+#0+
      'Description=Test Data'+#0+
      'CREATE_DB="%s"'#0+#0,
      [strFile,strFile] );
      fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
      if( fResult = false ) then ShowMessage( '创建MDB文件失败!' );
      end;
      FindClose( srInfo );  end;  FreeLibrary( hLib );
      end
      else
      begin
      ShowMessage( '无法加载ODBCCP32.DLL' );
      end;
    end;
    --------------------------------------------------------------------------------
     
    以下是在程序中动态创建ODBC的DSN数据源代码:
    procedure TCreateODBCDSNfrm.CreateDSNBtnClick(Sender: TObject);
    var
      registerTemp : TRegistry;
      bData : array[ 0..0 ] of byte;
    begin
      registerTemp := TRegistry.Create;
      //建立一个Registry实例
      with registerTemp do
      begin
      RootKey:=HKEY_LOCAL_MACHINE;
      //设置根键值为HKEY_LOCAL_MACHINE
      //找到Software\ODBC\ODBC.INI\ODBC Data Sources
      if OpenKey('Software\ODBC\ODBC.INI
      \ODBC Data Sources',True) then
      begin //注册一个DSN名称
      WriteString( 'MyAccess', 'Microsoft
      Access Driver (*.mdb)' );
      end
      else
      begin//创建键值失败
      memo1.lines.add('增加ODBC数据源失败');
      exit;
      end;
      CloseKey;
    //找到或创建Software\ODBC\ODBC.INI
     \MyAccess,写入DSN配置信息
      if OpenKey('Software\ODBC\ODBC.INI
      \MyAccess',True) then
      begin
      WriteString( 'DBQ', 'C:\inetpub\wwwroot
      \test.mdb' );//数据库目录,连接您的数据库
      WriteString( 'Description',
      '我的新数据源' );//数据源描述
      WriteString( 'Driver', 'C:\PWIN98\SYSTEM\
      odbcjt32.dll' );//驱动程序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
      memo1.lines.add('增加ODBC数据源失败');
      exit;
      end;
      CloseKey;
    //找到或创建Software\ODBC\ODBC.INI
    \MyAccess\Engines\Jet
      //写入DSN数据库引擎配置信息
      if OpenKey('Software\ODBC\ODBC.INI
      \MyAccess\Engines\Jet',True) then
      begin
      WriteString( 'ImplicitCommitSync', 'Yes' );
      WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
      WriteInteger( 'PageTimeout', 10 );//页超时
      WriteInteger( 'Threads', 3 );//支持的线程数目
      WriteString( 'UserCommitSync', 'Yes' );
      end
      else//创建键值失败
      begin
      memo1.lines.add('增加ODBC数据源失败');
      exit;
      end;
      CloseKey;
      memo1.lines.add('增加新ODBC数据源成功');
      Free;
      end;
    end;
      

  5.   

    啊呀不好意思,结完贴了才看到 : 5116888(呆得惊动党) 和  giftzhang(新手上路) 的的回复,这不好意思!!!下次一定给分!!!!