rt

解决方案 »

  1.   

    function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';建立SQLSERVER的ODBC:SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,'SQL Server','DSN=Record_ODBC'+ chr(0) +'Server=(local)'+ chr(0) +'Database=master'+ chr(0) +'Description=DragonPC SQLServer ODBC Source'+ chr(0));
      

  2.   

    这个我也没有找到好的方法,以前我通过写注册表的方法,可以把各种类型的odbc信息放到一个odbc中,这样通过读配置文件信息然后在写到注册表中.
    HKEY_LOCAL_MACHINE\Software\odbc\odbc.ini,你看看就知道了.
      

  3.   

    我要的就是写注册表的,有没有函数?我以前写过动态创建Access数据源,可惜代码找不到了。
      

  4.   

    有,我考份例子给你吧:
    procedure TFrmMain.InstallDb(i: integer);
    var
      reg:TRegistry;
      iniFile:TIniFile;
      filename,tmps:string;
    begin
      fileName:=ExtractFileDir(Application.ExeName)+'\data\sysdb.ini';
      reg:=Tregistry.Create;
      iniFile:=TIniFile.Create(fileName);
      reg.RootKey:=HKEY_LOCAL_MACHINE;
      try
        reg.DeleteKey('\SoftWare\ODBC\Odbc.ini\sysdb');
      except
      end;
      reg.OpenKey('\SoftWare\ODBC\Odbc.ini\sysdb',true);
      if (i=1) then  //Sql数据库
      begin
        tmps:=iniFile.ReadString('sql服务器','Database','sysdb');
        reg.WriteString('Database',tmps);    tmps:=iniFile.ReadString('sql服务器','Driver','c:\sql\x86\system\sqlsrv32.dll');
        reg.WriteString('Driver',tmps);    tmps:=iniFile.ReadString('sql服务器','Lastuser','');
        reg.WriteString('Lastuser',tmps);    tmps:=iniFile.ReadString('sql服务器','pw','sysdb');
        reg.WriteString('pw',tmps);    tmps:=iniFile.ReadString('sql服务器','server','');
        reg.WriteString('server',tmps);
        reg.WriteString('dbtype','sql');
      end
      else
      begin
        tmps:=iniFile.ReadString('sybase服务器','ApplicationName','');
        reg.WriteString('ApplicationName',tmps);    tmps:=iniFile.ReadString('sybase服务器','ApplicationUsingThreads','1');
        reg.WriteString('ApplicationUsingThreads',tmps);    tmps:=iniFile.ReadString('sybase服务器','ArraySize','50');
        reg.WriteString('ArraySize',tmps);    tmps:=iniFile.ReadString('sybase服务器','Charset','');
        reg.WriteString('Charset',tmps);    tmps:=iniFile.ReadString('sybase服务器','CursorCacheSize','1');
        reg.WriteString('CursorCacheSize',tmps);    tmps:=iniFile.ReadString('sybase服务器','Database','sysdb');
        reg.WriteString('Database',tmps);    tmps:=iniFile.ReadString('sybase服务器','Databases','');
        reg.WriteString('Databases',tmps);    tmps:=iniFile.ReadString('sybase服务器','DefaultLongDataBuffLen','1024');
        reg.WriteString('DefaultLongDataBuffLen',tmps);    tmps:=iniFile.ReadString('sybase服务器','Description','');
        reg.WriteString('Description',tmps);    tmps:=iniFile.ReadString('sybase服务器','DirectoryServiceProvider','');
        reg.WriteString('DirectoryServiceProvider',tmps);    tmps:=iniFile.ReadString('sybase服务器','Driver','C:\WINNT\system32\SYSYBNT.DLL');
        reg.WriteString('Driver',tmps);    tmps:=iniFile.ReadString('sybase服务器','EnableQuotedIdentifiers','0');
        reg.WriteString('EnableQuotedIdentifiers',tmps);    tmps:=iniFile.ReadString('sybase服务器','InitializationString','');
        reg.WriteString('InitializationString',tmps);    tmps:=iniFile.ReadString('sybase服务器','InterfacesFile','');
        reg.WriteString('InterfacesFile',tmps);    tmps:=iniFile.ReadString('sybase服务器','Language','');
        reg.WriteString('Language',tmps);    tmps:=iniFile.ReadString('sybase服务器','lastuser','dbreport');
        reg.WriteString('lastuser',tmps);    tmps:=iniFile.ReadString('sybase服务器','LogonID','dbreport');
        reg.WriteString('LogonID',tmps);    tmps:=iniFile.ReadString('sybase服务器','OptimizePrepare','2');
        reg.WriteString('OptimizePrepare',tmps);    tmps:=iniFile.ReadString('sybase服务器','PacketSize','0');
        reg.WriteString('PacketSize',tmps);    tmps:=iniFile.ReadString('sybase服务器','PasswordEncryption','0');
        reg.WriteString('PasswordEncryption',tmps);    tmps:=iniFile.ReadString('sybase服务器','pw','tianjin');
        reg.WriteString('pw',tmps);    tmps:=iniFile.ReadString('sybase服务器','RaiseerrorPositionBehavior','0');
        reg.WriteString('RaiseerrorPositionBehavior',tmps);    tmps:=iniFile.ReadString('sybase服务器','SecurityServiceProvider','');
        reg.WriteString('SecurityServiceProvider',tmps);    tmps:=iniFile.ReadString('sybase服务器','SelectMethod','1');
        reg.WriteString('SelectMethod',tmps);    tmps:=iniFile.ReadString('sybase服务器','ServerName','tjs3');
        reg.WriteString('ServerName',tmps);    tmps:=iniFile.ReadString('sybase服务器','Servers','');
        reg.WriteString('Servers',tmps);    tmps:=iniFile.ReadString('sybase服务器','WorkStationID','');
        reg.WriteString('WorkStationID',tmps);    reg.WriteString('dbtype','sysdb');
      end;
      reg.CloseKey;  reg.OpenKey('\SoftWare\ODBC\Odbc.ini\ODBC Data Sources\',true);
      if (i=1) then //Sql
        reg.WriteString('sysdb','SQL Server')
      else
        reg.WriteString('sysdb','Sybase System 11');
      reg.CloseKey;
      reg.Destroy;
      iniFile.Destroy;
    end;
    我这个函数实现了sql和sybase数据库的转换,希望对你有点帮助,如果你要加其他类型的数据库的odbc数据源,可以先用odbc工具配一个,得到相关信息.
      

  5.   

    老大,自己先用windows建立一个,然后看看注册表有什么变化就行了。
      

  6.   

    l_jia(我爱善柔),老大你敲诈啊!!!
    l_xiaofeng(≈流水≈不腐≈) 兄的方法最简便,一条语句就搞定了,hoho...const
      ODBC_ADD_DSN = 1;
    var
      SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)',
                          'DSN=TianCai' + Chr(0) +
                          'Server=(local)' + Chr(0) +
                          'DBQ=e:\TianCai.mdb' + Chr(0) +
                          'Description=Alex');
      

  7.   

    晕,又写错了。
    const
      ODBC_ADD_DSN = 1;
    var
    ...
    begin
      SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)',
                          'DSN=TianCai' + Chr(0) +
                          'Server=(local)' + Chr(0) +
                          'DBQ=e:\TianCai.mdb' + Chr(0) +
                          'Description=Alex');
    ...