|
我采用以下代码通过ODBC链接后台数据库SQL,有个弊病就是使用者必须按照代码的用户和密码建立SQL数据库文件,不能随意.如果不要这段代码每次登录必须手工输入密码(未让记住用户名和密码),很烦.
请问如何改,急切盼望中.以下关键代码用红色标记.
Function Check_SDSN()
' 查看我们要的系统数据源(DSN)是否存在。
' 如果存在,正好;否则,我们就创建一个。
Dim lngKeyHandle As Long
Dim lngResult As Long
Dim lngCurIdx As Long
Dim strvalue As String
Dim classvalue As String
Dim timevalue As String
Dim lngvalueLen As Long
Dim classlngvalueLen As Long
Dim lngData As Long
Dim lngDataLen As Long
Dim strResult As String
Dim DSNfound As Long
Dim syscmdresult As Long
syscmdresult = SysCmd(acSysCmdSetStatus, "查找系统DSN: " & JDS_DSN_name & " ...")
' 打开包含系统数据源(DSN)的注册表主键。
lngResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
"SOFTWARE\ODBC\ODBC.INI", _
0&, _
KEY_READ, _
lngKeyHandle)
If lngResult <> ERROR_SUCCESS Then
MsgBox "错误: 不能打开注册键 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI." & _
vbCrLf & vbCrLf & _
"请安装SQL Server的ODBC驱动程序用以调用MDTS系统数据源。" & _
vbCrLf & _
"要获得更多的信息,请与管理员联系。"
syscmdresult = SysCmd(acSysCmdClearStatus)
Check_SDSN = -1
End If
' 现在这个注册键是打开的,我们在这个查找看是否我们需要的。
lngCurIdx = 0
DSNfound = False
Do
lngvalueLen = 512
classlngvalueLen = 512
strvalue = String(lngvalueLen, 0)
classvalue = String(classlngvalueLen, 0)
timevalue = String(lngvalueLen, 0)
lngDataLen = 512
lngResult = RegEnumKeyEx(lngKeyHandle, _
lngCurIdx, _
strvalue, _
lngvalueLen, _
0&, _
classvalue, _
classlngvalueLen, _
timevalue)
lngCurIdx = lngCurIdx + 1
If lngResult = ERROR_SUCCESS Then
' 是我们要的系统数据源吗?
If strvalue = JDS_DSN_name Then
' 是! 那就不需要我们再做什么了。
DSNfound = True
syscmdresult = SysCmd(acSysCmdClearStatus)
Dim db As Database
Dim tbl As TableDef
Set db = CurrentDb
For Each tbl In db.TableDefs
If tbl.Attributes = 536870912 Then
tbl.Connect =
"DSN=TLC;UID=SAWD=123456;WSID=;DATABASE=ABC;Network=WORKGROUP"
tbl.RefreshLink
End If
Next
End If
End If
Loop While lngResult = ERROR_SUCCESS And Not DSNfound
Call RegCloseKey(lngKeyHandle)
If Not DSNfound Then
MsgBox "请先创建ODBC数据源!", vbInformation, "提示"
DoCmd.OpenForm "系统注册"
Exit Function
Else
DoCmd.Close , , acSaveYes
DoCmd.OpenForm "主界面"
End If
syscmdresult = SysCmd(acSysCmdClearStatus)
Check_SDSN = 0
End Function
[ 本帖最后由 sbsfhgl 于 2008-4-15 15:57 编辑 ] |
|