动态配置ODBC数据源
敬业的IT人
互联网
佚名
2008-1-8 16:23:43
∩衔奈颐翘致哿巳绾卧贠DBC数据源里配置数据库,通过这种方式,应用程序的编写变的简单。只需要在应用程序里面指定已经配置好的数据源就可以连接,访问数据库。但是,这种方式也有一定的局限性,需要手工的在ODBC数据源里面配置。需要教会程序的使用者如何去配置,而且,如果一不小心更改了ODBC数据源的配置(也许是无意的)。就会造成连接数据库失败。这时候,程序的使用人员也许会一筹莫展,束手无策。
自然的,读者就会提出这样一个问题,能不能不通过ODBC数据源的配置,而在程序里面,根据程序安装的环境,自动的配置数据库连接。答案是肯定的,下面我们就介绍一种在程序中通过修改Window注册表的办法来动态的配置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″=″MicrosoftAccessDriver (*.mdb)″
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostMdb]
″Driver″=″C:\\WINDOWS\\SYSTEM\\ODBCJT32.DLL″
″DBQ″=″c:\\My Documents\\db1.mdb? r>
″Descripti(ByVal
hstmt&, ByVal icol%, ByVal fDescType%, ByVal rgbDesc As String, ByVal cbDescMax%,
pcbDesc%, pfDesc&) As Integer
Declare Functi"ODBC数据源名称UID = "UserID" "用户帐号PWD = "Password" "用户口令rc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD, Len(PWD)) "建立连接
3、存取数据用户对ODBC数据源的存取操作,都是通过SQL语句实现的。在这个过程中,应用程序将通过连接向ODBC数据库提交SQL语句,完成用户请求的操作,具体步骤如下:调用SQLAllocStmt函数获取语句句柄,例如Dim hstmt As Longrc = SQLAllocStmt(hdbc, hstmt)执行SQL语句。执行SQL语句的方法比较多,最简单明了的方法是调用SQLAllocStmt函数,例如:Dim SQLstmt As StringSQLstmt = "SELECT * FROM authors"rc = SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
4、 检索结果集 如果SQL语句顺利提交并正确执行,那么就会产生一个结果集。检索结果集的方法很多,最简单、最直接的方法是调用SQLFetch和SQLGetData函数。SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录,SQLGetData函数的功能是提取结果集中当前记录的某个字段值。通常可以采用一个循环提取结果集中所有记录的所有字段值,该循环重复执行SQLFetch和SQLGetData函数,直至SQLFetch函数返回SQL_NO_DATA_FOUND,这表示已经到达结果集的末尾。
Dim ColVal As String * 225ColVal = String(255, 0)Do Until SQLFetch(hstmt) = SQL_NO_DATA_FOUNDrc = SQLGetData(hstmt, i, SQL_C_CHAR, ColVal, Len(ColVal), SQL_NULL_DATA Loop
5、 结束应用程序 在应用程序完成数据库操作、退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的步骤如下:调用SQLFreeStmt函数释放语句句柄及其相关的系统资源。例如:rc = SQLFreeStmt(hstmt, SQL_DROP) 调用SQLDisconnect函数关闭连接,例如:rc = SQLDisconnect(hdbc) 调用SQLFreeConnect函数释放连接句柄及其相关的系统资源,例如:rc = SQLFreeConnect(hdbc) 调用SQLFreeEnv函数释放环境句柄及其相关的系统资源,停止ODBC操作,例如: rc = SQLFreeEnv(henv)
自然的,读者就会提出这样一个问题,能不能不通过ODBC数据源的配置,而在程序里面,根据程序安装的环境,自动的配置数据库连接。答案是肯定的,下面我们就介绍一种在程序中通过修改Window注册表的办法来动态的配置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″=″MicrosoftAccessDriver (*.mdb)″
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostMdb]
″Driver″=″C:\\WINDOWS\\SYSTEM\\ODBCJT32.DLL″
″DBQ″=″c:\\My Documents\\db1.mdb? r>
″Descripti(ByVal
hstmt&, ByVal icol%, ByVal fDescType%, ByVal rgbDesc As String, ByVal cbDescMax%,
pcbDesc%, pfDesc&) As Integer
Declare Functi"ODBC数据源名称UID = "UserID" "用户帐号PWD = "Password" "用户口令rc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD, Len(PWD)) "建立连接
3、存取数据用户对ODBC数据源的存取操作,都是通过SQL语句实现的。在这个过程中,应用程序将通过连接向ODBC数据库提交SQL语句,完成用户请求的操作,具体步骤如下:调用SQLAllocStmt函数获取语句句柄,例如Dim hstmt As Longrc = SQLAllocStmt(hdbc, hstmt)执行SQL语句。执行SQL语句的方法比较多,最简单明了的方法是调用SQLAllocStmt函数,例如:Dim SQLstmt As StringSQLstmt = "SELECT * FROM authors"rc = SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
4、 检索结果集 如果SQL语句顺利提交并正确执行,那么就会产生一个结果集。检索结果集的方法很多,最简单、最直接的方法是调用SQLFetch和SQLGetData函数。SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录,SQLGetData函数的功能是提取结果集中当前记录的某个字段值。通常可以采用一个循环提取结果集中所有记录的所有字段值,该循环重复执行SQLFetch和SQLGetData函数,直至SQLFetch函数返回SQL_NO_DATA_FOUND,这表示已经到达结果集的末尾。
Dim ColVal As String * 225ColVal = String(255, 0)Do Until SQLFetch(hstmt) = SQL_NO_DATA_FOUNDrc = SQLGetData(hstmt, i, SQL_C_CHAR, ColVal, Len(ColVal), SQL_NULL_DATA Loop
5、 结束应用程序 在应用程序完成数据库操作、退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的步骤如下:调用SQLFreeStmt函数释放语句句柄及其相关的系统资源。例如:rc = SQLFreeStmt(hstmt, SQL_DROP) 调用SQLDisconnect函数关闭连接,例如:rc = SQLDisconnect(hdbc) 调用SQLFreeConnect函数释放连接句柄及其相关的系统资源,例如:rc = SQLFreeConnect(hdbc) 调用SQLFreeEnv函数释放环境句柄及其相关的系统资源,停止ODBC操作,例如: rc = SQLFreeEnv(henv)
- 最新文章
- JDBC2.0扩展API[01-08]
- 紧急救援:用户自定义的数据库修复[01-08]
- 数据库学习:多类型业务处理设计技巧[01-08]
- 编程入门:九大数据仓库特点比较[01-08]
- UDF在层次型数据处理中的妙用之一[01-08]
- UDF在层次型数据处理中的妙用之二[01-08]
- 相关文章
- VFP中焦点行的动态显示[01-08]
- VFP动态链接库的调用[01-08]
- 利用VFP在INTERNET上制作数据库动态查询[01-08]
- 用VFP在INTERNET上制作数据库动态查询[01-08]
- 卡拉OK字幕着色动态显示[01-08]
- 基于Oracle高性能动态SQL程序开发[01-07]
