读书人

远程创建对象获取数据连接 Connection

发布时间: 2011-12-29 22:09:38 作者: rapoo

远程创建对象获取数据连接 Connection时出错,大家帮忙看看
因为一个程序要放在两台机上,数据库只能放在一台机子上,两个程序共同使用,以前一直用共享的方式,不过共享总不安全,一直想找一个好的办法解决,这次想试一下远程创建对象来获以连接的方法.不过这个连接好像不那么容易,远程的连接可以正常赋于本地定义的 Connection 对象,但是用这个对象来读取Recordset时,没有办法对Recordset 的 ActiveConnection 赋值,这是为什么?

' ' '服务端 工程名为:RemoteConn 新建类名为:REConnection
Option Explicit

Private myConn As Connection

Public Function GetConnection() As ADODB.Connection
Set myConn = New Connection
myConn.CursorLocation = adUseClient
myConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Jet OLEDB:Database Password=88888888;Data Source=D:\Data.mdb "
Call myConn.Open
Set GetConnection = myConn
End Function

Public Property Get ActiveConnection() As Connection
Set ActiveConnection = myConn
End Property

' ' '客户端
Private Sub TestConn()
Dim a As Object

Dim conn As Connection
Dim rst As Recordset
Set a = CreateObject( "RemoteConn.REConnection ", "Server ")
Call a.GetConnection
Set conn = a.ActiveConnection ' 'Connection 对象之间赋值正常
' 'Debug.Print (conn.ConnectionString)
Set rst = New Recordset
rst.LockType = adLockBatchOptimistic
rst.CursorLocation = adUseClient
' '把活动连接赋于Recordset的ActiveConnection 时出错,
' '错误3001 参数类型不正确,或不在可以接受的范围之内,或与其它数冲突
Set rst.ActiveConnection = Conn
Call rst.Open( "Select * From T_Print ")
Set Me.MSHFlexGrid1.Recordset = rst
End Sub

[解决办法]

Public Function GetConnection() As ADODB.Connection
Set myConn = New Connection

' '加上这句
mycnConn.ConnectionTimeout = 60

myConn.CursorLocation = adUseClient
myConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Jet OLEDB:Database Password=88888888;Data Source=D:\Data.mdb "
Call myConn.Open
Set GetConnection = myConn
End Function

' ' '客户端
Private Sub TestConn()
Dim a As Object

Dim conn As Connection
Dim rst As Recordset
Set a = CreateObject( "RemoteConn.REConnection ", "Server ")
Call a.GetConnection
Set conn = a.ActiveConnection ' 'Connection 对象之间赋值正常
' 'Debug.Print (conn.ConnectionString)
Set rst = New Recordset
rst.LockType = adLockBatchOptimistic
rst.CursorLocation = adUseClient


' '把活动连接赋于Recordset的ActiveConnection 时出错,
' '错误3001 参数类型不正确,或不在可以接受的范围之内,或与其它数冲突

' '改成这样试试看
rst.Open "Select * From T_Print ",a.GetConnection

'Set rst.ActiveConnection = Conn
'Call rst.Open "Select * From T_Print "
Set Me.MSHFlexGrid1.Recordset = rst
End Sub

[解决办法]
DING 什么

D:\Data.mdb 是本机的? 有映射成本地驱动器么?

其他的机器的话,连接 \\HoseName\ShageName\Data.mdb

读书人网 >VB

热点推荐