Office中国论坛/Access中国论坛
标题: 如何从udl文件中取出BaseConnectionString信息? [打印本页]
作者: renzhm 时间: 2003-5-3 19:30
标题: 如何从udl文件中取出BaseConnectionString信息?
使用Access的ADP,已创建了连接,但考虑到分发时服务器的不固定情况,
创建了udl文件作为连接,不知如何更改当前的连接?
我的代码:
Public Sub OpenAstLink()
On Error GoTo Except
Dim ConnStr As String
ConnStr = "File Name=" & CurrentProject.Path & "\ast.udl;"
Dim Conn As ADODB.Connection
Set Conn = New ADODB.Connection
Conn.Open ConnStr
CurrentProject.CloseConnection
CurrentProject.OpenConnection '使当前工程连接无状态
DoCmd.RunCommand acCmdConnection '这里会弹出配置窗口,我想可不可以使用上面的连接Conn对象,或自己创建连接
Exit Sub
Except:
MsgBox "数据库连接异常"
End Sub
----------------------------
当然,使用CurrentProject.OpenConnection "rovider=SQLOLEDB.1ersist Security Info=False;User ID=sa;Initial Catalog=AST;Data Source=QSB"
可以满足我的要求,但必须使用文件来存储这样的信息,我想使用udl文件,方便
配置和测试连接,所以如果能从udl文件中取出BaseConnectionString信息,也就
解决了问题。
我察过以前的帖子,都没有很好的解决此问题!
作者: zhuyiwen 时间: 2003-5-3 21:38
<>下面的两个函数:
一、MakeADPConnectionless: 用于断开当前ADP的连接,使 BaseConnectionString 为空,一般用在项目退出的时候。
二、sCreateConnection: 用于使用 udl 文件创建当前 ADP 的数据库连接,即:BaseConnectionString,使当前的ADP连接到 udl 文件指定SQL数据库,一般用进入项目时。
<FONT face="Courier New">Sub MakeADPConnectionless()
<FONT color=#008000>'断开当前ADP的连接
'
</FONT>
Application.CurrentProject.CloseConnection '关闭连接
Application.CurrentProject.OpenConnection '将连接设置为无
End Sub
Public Function sCreateConnection( Byval udlFileName As String) As String
<FONT color=#008000>'********************************************************************
'该函数在ADP中检查连接,如果没有,它将通过输入参数创建一个连接
'
'输入:
' udlFileName: 通用数据连接文件名
'输出:
' 连接状态
'
'********************************************************************
</FONT>
On Error GoTo sCreateConnectionTrap:
Dim sConnectionString As String
If Application.CurrentProject.BaseConnectionString = "" Then
<FONT color=#008000>'表示ADP处于无连接状态</FONT>
sConnectionString = "File Name=" & _
CurrentProject.Path & udlFileName
Application.CurrentProject.OpenConnection sConnectionString
sCreateConnection = "创建了使用 udl 文件 (" & _
udlFileName & ")连接到数据库的连接!"
Else <FONT color=#008000>'连接已存在</FONT>
sCreateConnection = "已经存在数据库的连接!"
End If
sCreateConnectionExit:
Exit Function
sCreateConnectionTrap:
sCreateConnection = Err.Description
Resume sCreateConnectionExit
End Function
</FONT></P>
[此贴子已经被作者于2005-1-28 22:09:35编辑过]
作者: renzhm 时间: 2003-5-7 16:44
谢谢,高手出现果然不同凡响!我还以为baseconnectionstring不能使用udl呢!
作者: renzhm 时间: 2003-5-7 19:22
刚才试验了一下,真的不行:
这样可以
application.currentproject.openconnection
“Provider=SQLOLEDB.1ersist Security Info=False;User ID=sa;Initial Catalog=AST;Data Source=QSB“
但是这样不行
application.currentproject.openconnection "file name=" & currentproject.path & udlfilename
不知道为什么?
作者: zhuyiwen 时间: 2003-5-7 21:41
<DIV style="FONT-SIZE: 14px; COLOR: #138; LINE-HEIGHT: 150%"><FONT face=Verdana><FONT color=#000000><b>上一贴有错!</b>
下面的代码在Win2000+SQL2000+Access2002下修改后并测试通过:
</FONT>
<FONT face=Courier>Sub MakeAdpConnectionless()
</FONT><FONT face=Courier><FONT color=#006600>'断开当前adp的连接
'
</FONT>
Application.CurrentProject.CloseConnection <FONT color=#006000>'关闭连接</FONT>
Application.CurrentProject.OpenConnection </FONT><FONT face=Courier><FONT color=#006000>'将连接设置为无
</FONT>
End Sub
Public Function sCreateConnection(ByVal UDLFileName As String) As String
</FONT><FONT face=Courier><FONT color=#006000>'********************************************************************
'该函数在adp中检查连接,如果没有,它将通过输入参数创建一个连接
'
'输入:
' udlfilename: 通用数据连接文件名
'输出:
' 连接状态
'
'********************************************************************
</FONT>On Error GoTo sCreateConnectionTrap:
Dim sConnectionString As String
If Application.CurrentProject.BaseConnectionString = "" Then
</FONT><FONT face=Courier><FONT color=#006000>'表示adp处于无连接状态
</FONT>
sConnectionString = GetConnectionStringFromUDL(CurrentProject.Path & "\" & UDLFileName)
Application.CurrentProject.OpenConnection sConnectionString
sCreateConnection = "创建了使用 udl 文件 (" & UDLFileName & ")连接到数据库的连接!"
Else <FONT color=#006000>'连接已存在</FONT>
sCreateConnection = "已经存在数据库的连接!"
End If
sCreateConnectionExit:
Exit Function
sCreateConnectionTrap:
sCreateConnection = Err.Description
Resume sCreateConnectionExit
End Function
Public Function GetConnectionStringFromUDL(ByVal UDLFileName As String) As String
Dim sLine As String
Dim FileNo As Integer
If Len(Trim(Dir(UDLFileName & ""))) > 0 Then
FileNo = FreeFile
Open UDLFileName For Input As #FileNo
Do While Left(LCase(sLine), 8) <> "provider" And Not EOF(FileNo)
Line Input #FileNo, sLine
Loop
If Left(LCase(sLine), 8) <> "provider" Then
GetConnectionStringFromUDL = "0"
Else
GetConnectionStringFromUDL = sLine
End If
Close #FileNo
Else
GetConnectionStringFromUDL = "0"
End If
End Function
</FONT></FONT></DIV>
[此贴子已经被作者于2005-10-21 11:08:08编辑过]
作者: renzhm 时间: 2003-5-8 19:21
to zhuyiwen :
真是太感谢您了!调试通过了,怎么感谢您呢?这里又不能给分!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |