捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:动态创建ODBC连接的演示程序
daima 36752 2009/2/13 14:46:40
flylg991、blowfish都不错,学习了。
不管是API或者注册表,写的很严谨很完整!
panbq 18540 2005/10/19 22:26:37
我根据你的例子改成了INFORMIX的,,感觉不错,不是很慢。谢谢了。
flylg991 17274 2005/8/28 21:01:49
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';   // Test Access Rights (Axes = Access)
  hLib := LoadLibrary( 'ODBCCP32.dll' );    // load from default path
  if( hLib <> NULL ) then
  begin
    @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
    if( @pFn <> nil ) then
    begin
      // force (re-)create 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( 'Create DSN (Datasource) failed!' );

      // test/create MDB file associated with DSN
      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( 'Create MDB (Database file) failed!' );
      end;
      FindClose( srInfo );

      end;

    FreeLibrary( hLib );
  end
  else
  begin
    ShowMessage( 'Unable to load ODBCCP32.DLL' );
  end;
blowfish 14944 2005/5/19 14:50:42
我已经测试了,呵呵,正常ing。
yang_huafeng 14941 2005/5/19 12:50:57
谢谢blowfish的大力支持,我把代码加上去,可惜的是我没测试环境。
blowfish 14932 2005/5/19 10:01:41
我已经,修改了你的程序,添加了oracle数据源的添加办法,其实和sql server差别不是很大。代码如下,希望你们也更新。呵呵,我比较喜欢这个论坛。
function createOracleDSN(const FDSN,FServer,Fuser:string):boolean;
var
RegisterTemp:TRegistry;
s:string;
begin
RegisterTemp:=Tregistry.Create;

RegisterTemp.RootKey:=HKEY_LOCAL_MACHINE;

//首先判断此DSN是否已经存在,如在,则不用继续下去
if registertemp.OpenKey('Software\ODBC\ODBC.INI\' + FDSN, False) then
   begin
        RegisterTemp.CloseKey;
        Result := True;
        RegisterTemp.Free;
        exit;
  end;
RegisterTemp.CloseKey;
//判断Oracle的驱动程序是否已经安装
if RegisterTemp.OpenKey('Software\ODBC\ODBCINST.INI\ODBC Drivers', False) then
  begin
        s := RegisterTemp.ReadString('Oracle ODBC Driver');
        if UpperCase(S) <> 'INSTALLED' then
          begin
          RegisterTemp.CloseKey;
          Result := False;
          RegisterTemp.Free;
          exit;
          end;
  end
  else
  begin
    RegisterTemp.CloseKey;
    Result := True;
    RegisterTemp.Free;
    exit;
  end;
  RegisterTemp.CloseKey;
//寻找oracle的驱动程序路径
if RegisterTemp.OpenKey('Software\ODBC\ODBCINST.INI\Oracle ODBC Driver', False) then
begin
  s := RegisterTemp.ReadString('Driver');
  if S = ' then
  begin
    RegisterTemp.CloseKey;
    Result := False;
    RegisterTemp.Free;
    exit;
  end;
end
else
begin
  RegisterTemp.CloseKey;
  Result := True;
  RegisterTemp.Free;
  exit;
end;
RegisterTemp.CloseKey;
//注册一个DSN名称
if RegisterTemp.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
  RegisterTemp.WriteString(FDSN, 'Oracle ODBC Driver')
else
begin
  RegisterTemp.CloseKey;
  Result := True;
  RegisterTemp.Free;
  exit;
end;
RegisterTemp.CloseKey;
if RegisterTemp.OpenKey('Software\ODBC\ODBC.INI\' + FDSN, True) then
begin
  RegisterTemp.WriteString('Driver', S);
  RegisterTemp.WriteString('UserID', FUser);
  RegisterTemp.WriteString('Server', FServer);
  RegisterTemp.WriteString('Application Attributes','T');
  RegisterTemp.WriteString('Attributes','W');
  RegisterTemp.WriteString('CloseCursor','F');
  RegisterTemp.WriteString('Description',');
  RegisterTemp.WriteString('DisableMTS','F');
  RegisterTemp.WriteString('Failover','T');
  RegisterTemp.WriteString('FailoverDelay','10');
  RegisterTemp.WriteString('FailoverRetryCount','10');
  RegisterTemp.WriteString('Lobs','T');
  RegisterTemp.WriteString('Longs','F');
  RegisterTemp.WriteString('PrefetchCount','10');
  RegisterTemp.WriteString('QueryTimeout','T');
  RegisterTemp.WriteString('ResultSets','T');
  RegisterTemp.WriteString('Translation DLL',');
  RegisterTemp.WriteString('Translation Option','0');
  
  Result := True;
end
else
begin
  RegisterTemp.CloseKey;
  Result := False;
  RegisterTemp.Free;
  exit;
end;
RegisterTemp.CloseKey;
RegisterTemp.Free;


end;
guoweb 14694 2005/5/11 11:00:43
你的代码是通过写注册表来创建ODBC的,其实WINDOWS API本来就有方法可以创建和删除,我觉得比你这个来得方便。
第一页 上一页 下一页 最后页 有 7 条纪录 共1页 1 - 7
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号 更新RSS列表