'轉(zhuǎn)別人寫的一份公共函數(shù):)
' DATABASE公用函數(shù)
'
'###########################################################################################################
'###########################################################################################################
Dim objConnection 'CONNECTION對象實例
Dim objRecordSet 'RECORDSET對象實例
Dim objCommand '命令對象實例
Dim strConnectionString '連接字符串
' ********************************************************************
' 函數(shù)說明:連接數(shù)據(jù)庫;
' 參數(shù)說明:(1)strDBType(數(shù)據(jù)庫類型:如ORACEL;DB2;SQL;ACCESS)
' (2)strDBAlias(數(shù)據(jù)庫別名)
' (3)strUID(用戶名)
' (4)strPWD(密碼)
' (5)strIP(數(shù)據(jù)庫IP地址:僅SQL SERVER 使用)
' (6)strLocalHostName(本地主機名:僅SQL SERVER 使用)
' (7)strDataSource(數(shù)據(jù)源:僅ACCESS使用;如d:\yysc.mdb)
' 返回結(jié)果:無
' 調(diào)用方法: ConnectDatabase(strDBType, strDBAlias, strUID, strPWD, strIP, strLocalHostName, strDataSource)
' ********************************************************************
Sub ConnectDatabase(strDBType, strDBAlias, strUID, strPWD, strIP, strLocalHostName, strDataSource)
Set objConnection = CreateObject("ADODB.CONNECTION" '1 - 建立CONNECTION對象的實例
Select Case UCase(Trim(strDBType))
Case "ORACLE"
strConnectionString = "Driver={Microsoft ODBC for Oracle};Server=" & strDBAlias & ";Uid="_
& strUID & ";Pwd=" & strPWD & ";" '2 - 建立連接字符串
objConnection.Open strConnectionString '3 - 用Open 方法建立與數(shù)據(jù)庫連接
Case "DB2"
strConnectionString = "Driver={IBM DB2 ODBC DRIVER};DBALIAS=" & strDBAlias & ";Uid="_
& strUID & ";Pwd=" & strPWD & ";"
objConnection.Open strConnectionString
Case "SQL"
strConnectionString = "DRIVER=SQL Server; SERVER=" & strIP & "; UID=" & strUID & "; PWD="_
& strPWD & "; APP=Microsoft Office 2003;WSID=" & strLocalHostName & "; DATABASE=" & strDBAlias & ";"
objConnection.Open strConnectionString
Case "ACCESS"
strConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & strDataSource &_
";Jet OLEDBatabase Password=" & strPWD & ";"
objConnection.Open strConnectionString
Case Else
MsgBox "輸入的數(shù)據(jù)庫類型格式有誤" & vbCrLf & "支持的數(shù)據(jù)庫類型格式:ORACLE;DB2;SQL;ACCESS;EXCEL"
End Select
If (objConnection.State = 0) Then
MsgBox "連接數(shù)據(jù)庫失??!"
End If
End Sub
' ********************************************************************
' 函數(shù)說明:查詢數(shù)據(jù)庫(查詢單列);
' 參數(shù)說明: (1)strSql:SQL語句
' (2)strFieldName:字段名
' (3)str_Array_QueryResult:數(shù)組名(用來返回單列查詢結(jié)果)
' 返回結(jié)果: intArrayLength:查詢數(shù)據(jù)庫返回的記錄行數(shù)
' str_Array_QueryResult:數(shù)組名(用來返回單列查詢結(jié)果)
' 調(diào)用方法: intArrayLength = QueryDatabase(strSql, strFieldName, str_Array_QueryResult)
' ********************************************************************
Function QueryDatabase(strSql, strFieldName, str_Array_QueryResult)
Dim intArrayLength '數(shù)組長度
Dim i
i = 0
str_Array_QueryResult = Array() '重新初始化數(shù)組為一個空數(shù)組
Set objRecordSet = CreateObject("ADODB.RECORDSET" '4 - 建立RECORDSET對象實例
Set objCommand = CreateObject("ADODB.COMMAND" '5 - 建立COMMAND對象實例
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSql
objRecordSet.CursorLocation = 3
objRecordSet.Open objCommand '6 - 執(zhí)行SQL語句,將結(jié)果保存在RECORDSET對象實例中
intArrayLength = objRecordSet.RecordCount '將查詢結(jié)果的行數(shù)作為數(shù)組的長度
If intArrayLength > 0 Then
ReDim str_Array_QueryResult(intArrayLength-1)
Do While NOT objRecordSet.EOF '將數(shù)據(jù)庫查詢的列值賦值給數(shù)組
str_Array_QueryResult(i) = objRecordSet(strFieldName)
'Debug.WriteLine str_Array_QueryResult(i)
objRecordSet.MoveNext
i = i + 1
Loop
' Else
'ReDim str_Array_QueryResult(0)
'str_Array_QueryResult(0) = ""
End If
QueryDatabase = intArrayLength
End Function
' ********************************************************************
' 函數(shù)說明:更新數(shù)據(jù)庫;包括INSERT、DELETE 和 UPDATE操作
' 參數(shù)說明:(1)strSql:SQL語句
' 返回結(jié)果:無
' 調(diào)用方法: UpdateDatabase(strSql)
' ********************************************************************
Sub UpdateDatabase(strSql)
Dim objCommand
Dim objField
Set objCommand = CreateObject("ADODB.COMMAND")
Set objRecordSet = CreateObject("ADODB.RECORDSET")
objCommand.CommandText = strSql
objCommand.ActiveConnection = objConnection
Set objRecordSet = objCommand.Execute
' Do Until objRecordSet.EOF
' For Each objField In objRecordSet.Fields
' Debug.Write objField.Name & ": " & objField.Value & " "
' Next
' objRecordSet.MoveNext
' Debug.WriteLine
' Loop
Set objCommand = Nothing
Set objRecordSet = Nothing
End Sub
' ********************************************************************
' 函數(shù)說明:返回符合查詢結(jié)果的列的長度
' 參數(shù)說明:(1)strSql:SQL語句
' 返回結(jié)果:返回符合查詢結(jié)果的列的長度
' 調(diào)用方法: MaxLength = GetLenOfField(strSql)
' ********************************************************************
Function GetLenOfField(strSql)
'如果SQL語句為空,則默認返回的列長度為0,結(jié)束函數(shù);否則返回列的實際長度
If strSql = "" Then
GetLenOfField = 0
Exit Function
Else
Set objRecordSet = CreateObject("ADODB.RECORDSET") '4 - 建立RECORDSET對象實例
Set objCommand = CreateObject("ADODB.COMMAND") '5 - 建立COMMAND對象實例
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSql
objRecordSet.CursorLocation = 3
objRecordSet.Open objCommand '6 - 執(zhí)行SQL語句,將結(jié)果保存在RECORDSET對象實例中
GetLenOfField = objRecordSet.RecordCount '返回符合查詢結(jié)果的列的長度
Set objCommand = Nothing
Set objRecordSet = Nothing
End If
End Function
' ********************************************************************
' 函數(shù)說明:關閉數(shù)據(jù)庫連接;
' 參數(shù)說明:無
' 返回結(jié)果:無
' 調(diào)用方法: CloseDatabase()
' ********************************************************************
Sub CloseDatabase()
objRecordSet.Close
objConnection.Close
Set objCommand = Nothing
Set objRecordSet = Nothing
Set objConnection = Nothing
End Sub