VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 如何利用VB6读取Paradox 7数据库
发表评论(0)作者:李克利, 平台:VB6.0+Win98, 阅读:11339, 日期:2001-02-15
如何利用VB6读取Paradox 7数据库

李克利

--------------------------------------------------------------------------------


编程语言中,VB和Delphi是现今非常流行的,深受编程人员的喜爱。但在很多时间需要考虑数据共用的问题, 从Delphi 4版本开始, Paradox数据库从Paradox 5升级为Paradox 7,而在VB6中只能支持Paradox 5及其以下版本数据库,那么如何利用VB6读取Paradox 7数据库呢?我们做以下实验:
建立一Paradox 7数据库kmzd.db,字段如下:
code  A 10
name  A 20
保存文件如d:\kmzd.db。
进入VB6,建立一应用程序,打开程序窗口,添加Data控件Data1,设置Data1属性:
connect Paradox 5.x;
Databasename d:\
RecordSource kmzd.db
添加DBGrid 控件DBGrid1,设置DBGrid1属性:
DataSource Data1
然后运行程序,则屏幕会出现如下提示:

外部表不是预期的格式

采用程序代码方法去实现仍然不能读取,那么应如何去读取Paradox 7 数据库呢,多方求问没有结果,于是本人埋头实验,终于发现了解决的办法,为了不使别人再讨苦吃,我将方法告诉大家,以供参考。
首先,打开控制面板,设置ODBC数据源,其Name为:Paradox7,选取数据库版本为Paradox5.x,并设置其它属性。然后进入VB,编写程序实现如何读取Paradox 7数据库。
以下介绍两种VB6读取Paradox 7数据库的方法。

一、利用ADO读取Paradox 7数据库

Dim WithEvents adoRS As Recordset
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDASQL;dsn=paradox7;uid=;pwd=;"
Set adoRS = New Recordset
adoRS.Open "select * from kmzd", db, adOpenStatic, adLockOptimistic

二、利用ODBC API读取Paradox 7数据库

Global Const SQL_SUCCESS As Long = 0
Global Const SQL_DROP As Long = 1
Declare Function SQLAllocEnv Lib _
"odbc32.dll" (phenv&) As Integer
Declare Function SQLAllocConnect Lib _  
"odbc32.dll" (ByVal henv&,phdbc&) As Integer
Declare Function SQLFreeEnv Lib
"odbc32.dll" (ByVal henv&) As Integer
Declare Function SQLConnect Lib _
"odbc32.dll" (ByVal hdbc&, ByVal szDSN$,_
ByVal cbDSN%, ByVal szUID$, ByVal cbUID%,_
ByVal szAuthStr$, ByVal cbAuthStr%) As Intege
Declare Function SQLAllocStmt Lib _
"odbc32.dll" (ByVal hdbc&, phstmt&) As Integer
Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal hstmt&,_
ByVal szSqlStr$, ByVal cbSqlStr&) As Integer
Declare Function SQLDisconnect Lib _
"odbc32.dll" (ByVal hdbc&) As Integer
Declare Function SQLFreeConnect Lib _
"odbc32.dll" (ByVal hdbc&) As Integer
Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&,_
ByVal fOption%) As Integer
Dim tmpStr$
Dim odbcrc As Integer
Dim henv As Long, hdbc As Long, hstmt As Long
Dim I As Integer, J As Integer
Dim DSN As String, UID As String, PWD As String

odbcrc = SQLAllocEnv(henv)
If odbcrc <> 0 Then
MsgBox "无法初始化ODBC"
End
End If
odbcrc = SQLAllocConnect(henv, hdbc)
If odbcrc <> 0 Then
MsgBox "无法获得连接句柄"
odbcrc = SQLFreeEnv(henv)
End
End If
DSN = "Paradox7"
UID = ""
PWD = ""
odbcrc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD, Len(UID))
If odbcrc = SQL_ERROR Then
MsgBox "无法建立与ODBC数据源的连接"
End
End If
odbcrc = SQLAllocStmt(hdbc, hstmt)
If odbcrc <> SQL_SUCCESS Then
MsgBox "无法获得SQL语句句柄"
End
End If
tmpStr = "select * FROM kmzd"
odbcrc = SQLExecDirect(hstmt, tmpStr, Len(tmpStr))
If odbcrc <> SQL_SUCCESS Then
MsgBox "SQL语句执行失败"
End
End If

上述程序段之后,可编写程序利用ODBC API函数对数据库进行操作,完成后,执行如下程序段:
odbcrc = SQLFreeStmt(hstmt, SQL_DROP)
If hdbc <> 0 Then
odbcrc = SQLDisconnect(hdbc)
End If
odbcrc = SQLFreeConnect(hdbc)
If henv <> 0 Then
odbcrc = SQLFreeEnv(henv)
End If

其中有一关键问题就是,在ODBC中的Paradox驱动程序需要较高版本,我使用的版本是4.00.4202.00,如是3.xx.xxxx.xx就不行了。

以上程序在Windows98+VB6环境下调试通过。