新闻 | 天津 | 民生 | 广电 | 津抖云 | 微视 | 读图 | 文娱 | 体育 | 图事 | 理论 | 志愿 | 专题 | 工作室 | 不良信息举报
教育 | 健康 | 财经 | 地产 | 天津通 | 旅游 | 时尚 | 购物 | 汽车 | IT | 亲子 | 会计 | 访谈 | 场景秀 | 发布系统

"津云"客户端
  您当前的位置 :北方网 > IT浪潮 > 北方学院 > 软件文库 > 系统相关 正文
关键词:

动态注册ODBC数据源的通用方法


http://www.enorth.com.cn  2001-03-15 00:00

  本文以在Delphi 5.0中利用程序,动态生成并注册ODBC数据源为例,说明了一种通用的动态注册ODBC数据源的方法。此种方法实现简单,不但适用于Delphi,也适用于其它Windows下的开发工具。

  一、引言

  ODBC是微软于1993年推出的开放性数据库接口标准,它为不同数据库产品的访问和操作提供了一个统一的解决方案。作为一个开放标准,Windows平台下的许多数据库开发工具都支持通过ODBC方式来存取数据,如:Visual C++,PowerBuiler等。其它,如Borland的Delphi虽然通过BDE(Borland Database Engine)方式来访问数据,但ODBC配置的数据源,在BDE中也可以正确识别和使用。

  一般,ODBC数据源的配置是通过Windows控制面板中ODBC管理器手工设置完成的,这一点给程序安装人员和用户都带来了许多不便。对用户来说,程序安装应该越简单越好。因此,对程序就提出了能够根据安装环境,自动注册所需ODBC数据源的要求。虽然,关于动态注册ODBC数据源的实现方法已屡见不鲜,但大多只适用于某种确定的开发工具和环境,且实现复杂,操作不便。经笔者试验,找到了一条简单有效而通用的配置ODBC数据源的方法。

  实现原理: 通过导出开发环境下注册表中ODBC数据源信息到一注册表文件中,将所导出内容作为应用程序中的字符串常量进行保存。在程序运行时,如果发现ODBC数据源未正确注册,则根据环境信息和该字符串常量动态确定正确的注册表文件内容,并写入一临时注册表文件中;利用批处理文件将该文件中ODBC数据源信息导入系统注册表中,从而实现ODBC数据源的动态注册。

  二、操作步骤

  1.运行注册表编辑器程序(Regedit.exe)。

  2.导出注册表中\HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources下数据源名称信息到Reg1.reg文件中。注:该路径下存放的是用户定义的数据源信息,如果需要系统数据源信息,则可导出HKEY_Local_Machine\Software\ODBC.INI\ODBC Data Sources到注册文件中。

  3.导出要注册的数据源名称的具体连接参数信息到db2.reg中。在此,以导出名称为“PostMdb”的数据为例,具体路径: \HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostMdb。

  4.用文本编辑器如(NotePad.exe)打开上述db1.reg文件,保留数据源名称为PostMdb的行;并将db2.reg文件内容与当前db1.reg内容合并。假设修改后“PostMdb”数据源注册信息如下:

  REGEDIT4

  [HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]

  ″PostMdb″=″Microsoft Access Driver (*.mdb)″

  [HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostMdb]

  ″Driver″=″C:\\WINDOWS\\SYSTEM\\ODBCJT32.DLL″

  ″DBQ″=″c:\\My Documents\\db1.mdb″

  ″Description″=″Post Card Mis Database″

  ″DriverId″=dword:00000019

  ″FIL″=″MS Access;″

  ″SafeTransactions″=dword:00000000

  ″UID″=″″

  [HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostMdb\Engines]

  [HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostMdb\Engines\Jet]

  ″ImplicitCommitSync″=″″

  ″MaxBufferSize″=dword:00000800

  ″PageTimeout″=dword:00000005

  ″Threads″=dword:00000003

  ″UserCommitSync″=″Yes″

  5.动态注册ODBC数据源的实现

  从上述注册信息可以看出,对于特定的数据源来说,实际上要动态确定的只是“Driver”和“DBQ”两项内容。将“Driver”=“C:\\WINDOWS\\SYSTEM\\ODBCJT32.DLL”修改为“Driver”=“%s\\ODBCJT32.DLL”,将“DBQ”=“c:\\My Documents\\db1.mdb”修改为“DBQ”=“%s\\db1.mdb”。复制修改后的注册信息到程序单元中存储为一字符串常量,命名为OdbcStr。以下以Delphi为例说明实现方法。

  为便于说明,假设主窗体名称为Form1,通过一命令钮Button1注册ODBC数据源。具体根据读者需要自行设定。

  procedure TForm1.Button1Click(Sender: TObject);

  var

   I : Integer;

   J : double;

   RegF: TextFile;

   SysDir: PChar;

   AppPath, Params, Path, DbPath: string;

  begin

   try

   //生成注册用的批处理文件

   Params := ′Regedit/s tmp.reg′; //批处理文件内容

   AppPath := ExtractFilePath(Application.ExeName); //取得应用程序当前路径

   AssignFile(RegF, AppPath + ′Reg.Bat′); //指定批处理文件路径和名称

   ReWrite(RegF); //创建和打开指定的文本文件

   WriteLn(RegF, Params); //将注册命令批处理内容写入文件

   CloseFile(RegF);

   //生成注册表文件

   GetMem(SysDir, 255);

   GetSystemDirectory(SysDir, 255); //取得Windows系统目录

   Path := String(SysDir);

   Path := InsertSplash(Path); //将类似C:\WINDOWS\SYSTEM变为C:\\WINDOWS\\SYSTEM

   Delete(AppPath, Length(AppPath), 1); //将字符串尾部′\′字符删除

   DbPath := InsertSplash(AppPath); //取得数据库存放路径

   Params := Format(OdbcStr, [Path, DbPath]);

   AssignFile(RegF, AppPath + ′Tmp.Reg′);

   ReWrite(RegF);

   WriteLn(RegF, Params);

   CloseFile(RegF);

   //通过Api函数执行reg.bat, Uses中加入对ShellApi的引用

   If ShellExeCute(Application.Handle, ′Open′,′Reg.bat′, ′′, PChar(AppPath), SW_HIDE) <= 32

   then

   Showmessage(′导入注册表文件信息失败′);

   finally

   FreeMem(SysDir);

   end;

   end;

  上述代码调用了一字符串处理函数InsertSplash,用于将路径字符串中所有的′\′处理为′\\′;这样做是必需的,否则,上述注册信息DRIVER和DBQ项无法正确注册。InsertSplash函数代码如下:

  function InsertSplash(AStr: string): string; //需要在单元公有部分进行函数声明

  var

   I : Integer;

  begin

   For I := 1 to Length(AStr) do

   case AStr[I] = ′\′ of

   True : Result := Result + ′\\′;

   False: Result := Result + AStr[I];

   end;

  end;

  三、结束语

  通过上述操作可以看出,实现ODBC数据源的动态注册并没有通过Delphi特有的功能去完成,而只是通过文件读写功能,根据具体安装环境,生成ODBC数据源注册信息和批处理文件,以完成ODBC数据源的注册。这种实现方法不依赖于某种特定的开发工具,不需要通过手工进行ODBC数据源的配置,具有通用性强和操作简单的特点。而且,用上述同样的方法,读者也可编写能够注册其它类型数据源的程序,甚至,写成ODBC注册动态连接库,以利于程序复用。

  

编辑 超级管理员
[进入IT论坛]
请您文明上网、理性发言并遵守相关规定,在注册后发表评论。
 北方网精彩内容推荐
无标题文档
天津民生资讯
天气交通 天津福彩 每月影讯 二手市场
空气质量 天津股票 广播节目 二手房源
失物招领 股市大擂台 天视节目 每日房价
热点专题
北京奥运圣火传递和谐之旅 迎奥运 讲文明 树新风
解放思想 干事创业 科学发展 同在一方热土 共建美好家园
2008天津夏季达沃斯论坛 《今日股市观察》视频
北方网网络相声频道在线收听 2008高考招生简章 复习冲刺
天津自然博物馆馆藏精品展示 2008年天津中考问题解答
带你了解08春夏服饰流行趋势 完美塑身 舞动肚皮舞(视频)
C-NCAP碰撞试验—雪佛兰景程 特殊时期善待自己 孕期检查
热点新闻排行 财经 体育 娱乐 汽车 IT 时尚 健康 教育

Copyright (C) 2000-2021 Enorth.com.cn, Tianjin ENORTH NETNEWS Co.,LTD.All rights reserved
本网站由天津北方网版权所有