ODBC管理程序设置DSN的秘密在注册表中,不信可以到HKEY_LOCAL_MACHINE\Software\ODBC

去看看,肯定让你感觉已经成功了一半.

首先来看看系统中已安装的ODBC数据库驱动程序.在HKEY_LOCAL_MACHINE\Software\ODBC\ ODBCInst.INI

中,存放着已经安装了的ODBC数据库驱动程序的信息,从这里可以查到已安装的ODBC数据库

驱动程序对应的DLL文件等信息.在ODBCInst.INI\ODBC Drivers的各个键值中,键名是驱动

程序名称(如Microsoft Access Driver(*.mdb)),键值为“Installed”,表示驱动程序已

安装.在 ODBCInst.INI\DriverName(DriverName为一个驱动程序名称,如Microsoft Access Driver(*.mdb))

中,有驱动程序的详细信息,我们主要从这里获得ODBC驱动程序对应的DLL文件的路径和文

件名,即键名Driver的键值,一般为"C:\WINDOWS\SYSTEM\FileName.DLL".

然后来看系统DSN的注册信息,在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中,

存放着系统DSN的注册信息,我们在ODBC管理面板设置的DSN参数就在这里.

下面来看看创建一个ODBC系统DSN的步骤,即我们在ODBC管理面板中完成参数设置后,

ODBC管理程序是怎么在注册表中注册DSN信息的.以创建一个名称为MyAccess的

Ms Access97类型的系统DSN为例,我们指定的参数主要有数据库类型

(Microsoft Access Driver(*.mdb))、数据源名称(MyAccess)、数据源描述(我的ACCESS)

、数据库路径(C:\Inetpub\wwwroot\Test.mdb),其它参数如用户名称、用户密码、独占、

只读、系统数据库、默认目录、缓冲区大小、扫描行数、页超时等采用系统缺省参数.

这时,注册系统DSN一般应有以下几个步骤:

1.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources中增加

一个字符串键值,为MyAccess = Microsoft Access Driver(*.mdb),其中分别为数据

源名称和数据库类型.这是在注册表中注册一个系统DSN名称.

2.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中创建一个子键(SubKey)

MyAccess,即创建一个键为HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess,

然后在其下创建一些键值,详细描述一个系统DSN的配置信息,主要信息有([]中的内容

为笔者注释):

DBQ=C:\Inetpub\wwwroot\Test.mdb [字符串,表示数据库路径]

Description=我的ACCESS [字符串,表示数据库描述]

Driver=C:\PWIN98\System\odbcjt32.dll [字符串,表示驱动程序,可见ODBCINST.INI]

DriverId=0x00000019(25) [数字,表示驱动程序标识,不能改变]

FIL=Ms Access; [字符串,可能与过滤Filter有关]

SafeTransaction=0x00000000 [数字,可能表示支持事务性操作的个数]

UID="" [字符串,表示用户名称,此处为空字符串]

3.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess中创建一个子键

(SubKey)Engines,再在其下创建子键(SubKey)Jet,即创建一个键为

HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess\Engines\Jet,然后在其下创

建一些键值,详细描述一个系统DSN的数据库引擎配置信息,主要信息有([]中的内容为

笔者注释):

ImplicitCommitSync=Yes [字符串,可能表示是否立即反映数据修改]

MaxBufferSize=0x00000200(512) [数字,表示缓冲区大小]

PageTimeout=0x00000005(5) [数字,表示页超时]

Threads=0x00000003(3) [数字,可能表示支持的最大线程数目]

UserCommitSync=Yes [字符串,可能表示是否立即将数据修改反映到用户]

以上是建立一个系统DSN的基本信息(其它信息如选项或高级选项等信息也在这里

设置,只不过因采用默认信息,注册表里没有列出),我们在程序中按上述步骤操作注

册表,同样也能增加一个系统DSN或修改其配置.

在下面的例子程序中,将按以上步骤建立一个系统DSN,请注意程序中的注释.

{*******************************************************

在本程序中,将创建一个ODBC系统数据源(DSN),

数据源名称:MyAccess 数据源描述:我的新数据源

数据库类型:ACCESS97

对应数据库:C:\Inetpub\wwwroot\test.mdb

*******************************************************}

{ 注意应在USES语句中包含Registry }

procedure TForm1.Button1Click(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;

以上程序在PWIN98+DELPHI3.0下调试通过.

下面是创建常见数据库类型的DSN需要设置的信息([]为注释内容,除特殊注释外

,各参数可见前面说明):

1.Access(Microsoft Access Driver(*.mdb))

DBQ、Description、Driver[odbcjt32.dll]、DriverID[25]、FIL[Ms Access;]、

SafeTransaction[默认为0]、UID[默认为空]、

Engines\Jet\ImplicitCommitSync[默认为Yes]、Engines\Jet\MaxBufferSize[默认512]、

Engines\Jet\PageTimeout[默认为512]、Engines\Jet\Threads[默认为3]、

Engines\Jet\UserCommitSync[默认为Yes]

可选设置:SystemDb[字符串,系统数据库的路径]、

ReadOnly[二进制,是否以只读方式打开,1为是,默认为0]、

Exclusive[二进制,是否以独占方式打开,1为是,默认为0]、

PWD[字符串,用户密码]

2.EXCEL(Microsoft Excel Driver(*.xls))

DBQ[Excel97(=path\xxx.xls)、5.0/7.0(=path\xxx.xls)、4.0(=path)、3.0(=path)]、

Description、Driver[odbcjt32.dll]、

DefaultDir[Excel97(<>DBQ)、5.0/7.0(<>DBQ)、4.0(=DBQ)、3.0(=DBQ)]、

DriverID[790(Excel97)、22(5.0/7.0)、278(4.0)、534(3.0)]、

FIL[Excel5.0;]、ReadOnly、SafeTransaction、UID、

Engines\Excel\ImplicitCommitSync、Engines\Excel\MaxScanRows[数字,扫描行数,

默认为8]、

Engines\Excel\Threads、Engines\Excel\UserCommitSync、

Engines\Excel\FirstRowHasName[二进制,第一行是否是域名,1表示是,默认为1]

注: Excel97和Excel7.0/5.0的DBQ对应一个XLS文件,而Excel4.0和Excel3.0则对应一

个目录;

DefaultDir对应一个目录,在Excel97和Excel7.0/5.0中是DBQ所对应的路径,而在

Excel4.0和Excel3.0下则与DBQ相同;各个版本的DriverID不同.

3.dBase(Microsoft dBase Driver(*.dbf))

DefaultDir[字符串,数据库文件所在目录]、Description、Driver[odbcjt32.dll]、

DriverID[277(IV)、533(5.0)]、FIL[dbase III;]、SafeTransaction、UID、

Engines\Xbase\ImplicitCommitSync、

Engines\Xbase\Collating[字符串,排序依据,可为ASCII、International、Norwegian-Danish、

Swedish-Finnish]、

Engines\Xbase\Deleted[二进制,是否不显示被软删除的记录,0表示显示,默认为1]、

Engines\Xbase\PageTimeout[默认为600]、Engines\Xbase\UserCommitSync、

Engines\Xbase\Threads、Engines\Xbase\Statistics[二进制,是否用大约的行数,1为是,默认0]

注:(dBaseIV和dBase5.0两个版本的DriverId有不同)

4.Foxpro(Microsoft Foxpro Driver(*.dbf))

DefaultDir[数据库文件所在目录]、Description、Driver[odbcjt32.dll]、

DriverID[536(2.6)、280(2.5)]、FIL[Foxpro 2.0;]、SafeTransaction、UID、

Engines\Xbase\Collating[字符串,排序依据,可为ASCII、International]、

Engines\Xbase\Deleted[二进制,是否不显示被软删除的记录,0表示显示,默认为1]、

Engines\Xbase\PageTimeout[默认为600]、Engines\Xbase\UserCommitSync、

Engines\Xbase\Threads、Engines\Xbase\Statistics[二进制,是否用大约的行数,1为是,默认0]

注:(Foxpro2.5和Foxpro2.6两个版本的DriverId有不同)还有一种方法就是用API函数的方法

odbc 动态创建 mysql_如何动态创建ODBC数据源相关推荐

  1. 使用命令创建mysql_用命令创建MySQL数据库

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u roo ...

  2. eclipse 创建maven 项目 动态web工程完整示例

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...

  3. 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )

    文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...

  4. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )

    文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  5. 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )

    文章目录 前言 一.静态代理的弊端 二.动态代理的优势 三.动态代理使用流程 1.目标对象接口 2.被代理对象 3.调用处理程序 4.客户端 四.动态生成 代理对象 类 的 字节码 文件数据 前言 代 ...

  6. linux 动态链接库的创建和使用--动态连接

    linux 动态链接库的创建和使用--动态连接 分类: C 编程 2012-03-25 17:01 568人阅读 评论(0) 收藏 举报 linuxreferencefunctiondatec /* ...

  7. c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序

    引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...

  8. 23.vs2015创建Qt界面动态库

    趟了一个坑,记录一下 1 新建动态库 由于没有提示,将qt的include路径包含进来. 创建界面类 创建ui类TestWidget对头文件进行修改 编译生成动态库,此时没有任何毛病,问题出在调用ui ...

  9. C++中使用模板,new创建2维动态数组

    1 // 使用模板和new创建2维动态数组 2 3 #include<iostream> 4 #include<exception> 5 #include<cstdlib ...

最新文章

  1. 微软为什么从 C/C++ 转向了 Rust?
  2. oracle dataguard延迟,Oracle DataGuard延迟应用归档归档日志
  3. 并发容器CopyOnWriteArrayList
  4. EXCEL如何验证重复数据?
  5. 李幸原:看好实时音视频在教育与医疗的前景
  6. Qt数据库sqlite
  7. 35岁老程序员因身体原因没加班,老板:不想干就滚蛋
  8. php mysql注册登录界面_php实现登录注册界面
  9. 关于游戏排行榜设计开发的一些总结
  10. golang.org/x/net包的安装方法
  11. 「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块
  12. 【英语学习】【English L06】U04 Adventure L3 The city playground and some famous museums
  13. java实现.net中的枚举
  14. window安装python报错_win10下Python安装pycrypto报错
  15. Linux环境安装redis
  16. C#中 JSON 序列化 与 反序列化
  17. matlab语言的特点,Matlab语言的特点
  18. 用R语言做单方程的误差修正模型(ECM)
  19. 空白页删不掉怎么办,wps怎么删除一页?
  20. 词根词缀 按字母划分

热门文章

  1. cts测试之安装编译的APK出现DEXPREOPT报错
  2. 05mycat父子表
  3. 洛谷P2568 GCD(莫比乌斯反演)
  4. mysql中的union用法以及子查询综合应用
  5. nginx配置二级域名
  6. Queue 输出数据
  7. clone oracle ebs
  8. 【EhCache】Java缓存框架使用EhCache结合Spring AOP
  9. 没有mysql支持时的替代方案
  10. Ubuntu 8.04 Hardy LTS 软件源设置