📄 dbfunc.bas
字号:
Attribute VB_Name = "DbFunc"
'== 声明odbc32.dll中定义的ODBC API函数 ==
Public Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer
'用来分配环境句柄,提供对全局信息的访问
Public Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal Henv&, phdbcd&) As Integer
'用来分配连接句柄,提供对一些信息的访问,如有郊语句和标识句柄
Public Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal Hdbc&, phstmt&) As Integer
'用来分配语句句柄,提供对信息的访问,如错误信息、游标名称、 SQL处理的状态
Public Declare Function SQLConnect Lib "odbc32.dll" (ByVal Hdbc&, ByVal szDSN$, _
ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szPWD$, ByVal cbPWD%) As Integer
'建立到驱动程序和数据源的连接
Public Declare Function SQLColAttributes Lib "odbc32.dll" (ByVal Hstmt&, ByVal icol%, _
ByVal fDescType%, ByVal rgbDesc As String, ByVal cbDescMax%, pcbDesc%, pfDesc&) As Integer
'在结果集中返回数据表中一列的描述符信息
Public Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal Hdbc&) As Integer
'关闭与指定连接句柄相关联的连接
Public Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal Hstmt&, ByVal szSqlStr$, _
ByVal cbSqStr&) As Integer
'直接运行参数指定的SQL语句
Public Declare Function SQLFetch Lib "odbc32.dll" (ByVal Hstmt&) As Integer
'从结果集中获取下一行数据,并返回所有字段的数据
Public Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal Hdbc&) As Integer
'用来释放连接句柄
Public Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal Henv&) As Integer
'用来释放环境句柄
Public Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal Hstmt&, ByVal fOption%) As Integer
'用来释放语句句柄
Public Declare Function SQLGetData Lib "odbc32.dll" (ByVal Hstmt&, ByVal icol%, ByVal fCType%, _
ByVal rgbValue As String, ByVal cbValueMax&, pcbValue%) As Integer
'从结果集单独的一列中获取数据,可以多次调用从而获取不同长度的数据
Public Declare Function SQLNumResultCols Lib "odbc32.dll" (ByVal Hstmt&, pccol%) As Integer
'返回结果集中列的数量
Public Declare Function SQLGetDiagRec Lib "odbc32.dll" (ByVal HandleType%, ByVal Handle&, _
ByVal RecNumber%, Sqlstate%, NativeErrorPtr%, MessageText As String, _
ByVal Bufferlenchgth%, TextlenchgthPtr%)
'
'== 标记数据库是否连接 ==
Private IsConnect As Boolean
'== 标记执行Connect()函数后,访问数据库的次数 ==
Private Connect_Num As Integer
Private Henv As Long '环境句柄
Private Hdbc As Long '连接句柄
Private Rc As Long
Public Hstmt As Long
'连接数据库
Private Sub Connect()
Dim TmpStat As Long 'SQLConnect()函数的返回值
'如果连接标记为真,则返回。否则会出错
If IsConnect = True Then
Exit Sub
End If
'分配环境句柄,保存在变量Henv中
If SQLAllocEnv(Henv) Then
MsgBox "无法初始化ODBC环境!", , "ODBC API执行错误"
End
End If
'根据环境句柄,分配连接句柄,保存在变量Hdbc中
If SQLAllocConnect(Henv, Hdbc) Then
MsgBox "无法连接ODBC!", , "ODBC API执行错误"
End
End If
'根据连接句柄、数据源、用户名和密码连接指定的数据库
TmpStat = SQLConnect(Hdbc, DSN, Len(DSN), DB_USER_NAME, _
Lench(DB_USER_NAME), DB_PASSWORD, Len(DB_PASSWORD))
'如果连接不成功则退出程序
If TmpStat <> SQL_SUCCESS And _
TmpStat <> SQL_SUCCESS_WITH_INFO Then
MsgBox "无法获得连接句柄!", , "ODBC API执行错误"
IsConnect = True
Disconnect
End
End If
'设置连接标记
IsConnect = True
End Sub
'断开与数据库的连接
Private Sub Disconnect()
Dim Rc As Long
'如果连接标记为假,标明已经断开连接,则直接返回
If IsConnect = False Then
Exit Sub
End If
'断开连接
Rc = SQLDisconnect(Hdbc)
'释放连接句柄
Rc = SQLFreeConnect(Hdbc)
'释放环境句柄
Rc = SQLFreeEnv(Henv)
IsConnect = False
End Sub
'使用Connect_Num控制数据库连接
Public Sub DB_Connect()
Connect_Num = Connect_Num + 1
Connect
End Sub
Public Sub DB_Disconnect()
If Connect_Num >= CONNECT_LOOP_MAX Then
Connect_Num = 0
Disconnect
End If
End Sub
'强制关闭api方式访问的数据库,计数器复位
Public Sub DBapi_Disconnect()
Connect_Num = 0
Disconnect
End Sub
'执行ODBC数据库操作语句
Public Sub OdbcExt(ByVal TmpSQLstmt As String)
'根据连接句柄,分配语句句柄
If SQLAllocStmt(Hdbc, Hstmt) Then
MsgBox "句柄分配失败", , "ODBC API执行错误"
DBapi_Disconnect
End
End If
'执行SQL语句,Lench是用户自定义函数,计算包含汉字的字符串长度
If SQLExecDirect(Hstmt, TmpSQLstmt, Lench(TmpSQLstmt)) Then
MsgBox "数据库访问语句执行失败", , "ODBC API执行错误"
MsgBox TmpSQLstmt
DBapi_Disconnect
End
End If
End Sub
'使用Data控件连接数据库,将执行指定的SQL语句
Public Sub DBdataExt(TmpData As Data, ByVal TmpSource As String)
'关闭已有的ODBC连接
DBapi_Disconnect
'Data控件连接数据库
TmpData.Connect = "ODBC;DATABASE=" + DATABASE _
+ ";UID=" + DB_USER_NAME + ";PWD=" _
+ DB_PASSWORD + ";DSN=" + DB_NAME
TmpData.RecordSource = TmpSource
TmpData.Refresh
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -