Option Explicit Private Cn As rdoConnection Implements ObjectControl Private mobjContext As ObjectContextPrivate Sub Class_Initialize() Set Cn = Nothing End SubPrivate Sub Class_Terminate() Set Cn = Nothing End Sub Private Function BpSetSQLConn() As String '返回连接符 BpSetSQLConn = "dsn=realtime;uid=rtss;pwd=rtss;" End Function Private Function BpSetSQLMNsc() BpSetSQLMNsc = "dsn=realtime;uid=mnsc;pwd=mnscmgr;" End FunctionPrivate Sub ObjectControl_Activate() Set mobjContext = GetObjectContext() mobjContext.EnableCommit End SubPrivate Function ObjectControl_CanBePooled() As Boolean ObjectControl_CanBePooled = True End FunctionPrivate Sub ObjectControl_Deactivate() Set mobjContext = Nothing End Sub Public Function ConnectOracle() As Boolean '实时数据连接数据库 Set Cn = New rdoConnection On Error GoTo ErrHandle: Cn.Close With Cn .Connect = BpSetSQLConn() .LoginTimeout = 60 .CursorDriver = rdUseOdbc .EstablishConnection rdDriverNoPrompt, True .QueryTimeout = 0 End With ConnectOracle = True Exit Function ErrHandle: Set Cn = Nothing ConnectOracle = False End Function Public Function ConnectOracleMNsc() As Boolean '电量数据连接数据库 Set Cn = New rdoConnection On Error GoTo ErrHandle: Cn.Close With Cn .Connect = BpSetSQLMNsc() .LoginTimeout = 60 .CursorDriver = rdUseOdbc .EstablishConnection rdDriverNoPrompt, True .QueryTimeout = 0 End With ConnectOracleMNsc = True Exit Function ErrHandle: Set Cn = Nothing ConnectOracleMNsc = False End Function '对数据进行查询 Public Function GetReservation(ByVal VarSql As String, ByRef _ ReservationData As rdoResultset) As Boolean On Error GoTo ErrHandle: Dim rrssTemp As rdoResultset Dim sql As String sql = VarSql DoEvents Set rrssTemp = Nothing Set rrssTemp = Cn.OpenResultset(sql, _ rdOpenKeyset, rdConcurReadOnly, rdAsyncEnable + rdExecDirect) DoEvents Do While rrssTemp.StillExecuting DoEvents Loop Set ReservationData = rrssTemp Set rrssTemp = Nothing ErrHandle: Set rrssTemp = Nothing If Err Then MsgBox Err.Description, 48 End If End Function '修改数据 Public Function UpdateData(ByVal UpdateSql As String) As Boolean On Error GoTo ErrHandle: Dim StrUpdate As String Dim RsUpdate As rdoResultset ' Dim rcolTemp As rdoColumn StrUpdate = UpdateSql Set RsUpdate = Nothing Set RsUpdate = Cn.OpenResultset(StrUpdate, _ rdOpenKeyset, rdConcurReadOnly, rdAsyncEnable + rdExecDirect) Do While RsUpdate.StillExecuting DoEvents Loop Set RsUpdate = Nothing UpdateData = True Exit Function ErrHandle: Set RsUpdate = Nothing UpdateData = False MsgBox "修改数据出错" End Function
你使用的是COM组件吧。 你的数据库连接Oracle吧.你的数据库连接字符串的Open操作在那里?
我用的是RDO, 连接的字符串在此定义: Private Function BpSetSQLConn() As String '返回连接符 BpSetSQLConn = "dsn=realtime;uid=rtss;pwd=rtss;" End Function 这些代码应该没有问题,在有些机器上可以用,有些机器不能用, 可能是机器的设置问题,但我不懂在哪里设置,请帮忙!
MTS于COM组件的连接没有关系 主要是看看你的服务器用户设置。 你的客户机登陆服务器是否有足够权限。 你的客户端调用方法试什么? Dim myObjContext As ObjectContext Set ComObj = CreateObject("工程1.class1","172.30.1.1") 是这种方法吗?
Private Cn As rdoConnection
Implements ObjectControl
Private mobjContext As ObjectContextPrivate Sub Class_Initialize()
Set Cn = Nothing
End SubPrivate Sub Class_Terminate()
Set Cn = Nothing
End Sub
Private Function BpSetSQLConn() As String '返回连接符
BpSetSQLConn = "dsn=realtime;uid=rtss;pwd=rtss;"
End Function
Private Function BpSetSQLMNsc()
BpSetSQLMNsc = "dsn=realtime;uid=mnsc;pwd=mnscmgr;"
End FunctionPrivate Sub ObjectControl_Activate()
Set mobjContext = GetObjectContext()
mobjContext.EnableCommit
End SubPrivate Function ObjectControl_CanBePooled() As Boolean
ObjectControl_CanBePooled = True
End FunctionPrivate Sub ObjectControl_Deactivate()
Set mobjContext = Nothing
End Sub
Public Function ConnectOracle() As Boolean '实时数据连接数据库
Set Cn = New rdoConnection
On Error GoTo ErrHandle:
Cn.Close
With Cn
.Connect = BpSetSQLConn()
.LoginTimeout = 60
.CursorDriver = rdUseOdbc
.EstablishConnection rdDriverNoPrompt, True
.QueryTimeout = 0
End With
ConnectOracle = True
Exit Function
ErrHandle:
Set Cn = Nothing
ConnectOracle = False
End Function
Public Function ConnectOracleMNsc() As Boolean '电量数据连接数据库
Set Cn = New rdoConnection
On Error GoTo ErrHandle:
Cn.Close
With Cn
.Connect = BpSetSQLMNsc()
.LoginTimeout = 60
.CursorDriver = rdUseOdbc
.EstablishConnection rdDriverNoPrompt, True
.QueryTimeout = 0
End With
ConnectOracleMNsc = True
Exit Function
ErrHandle:
Set Cn = Nothing
ConnectOracleMNsc = False
End Function
'对数据进行查询
Public Function GetReservation(ByVal VarSql As String, ByRef _
ReservationData As rdoResultset) As Boolean
On Error GoTo ErrHandle:
Dim rrssTemp As rdoResultset
Dim sql As String
sql = VarSql
DoEvents
Set rrssTemp = Nothing
Set rrssTemp = Cn.OpenResultset(sql, _
rdOpenKeyset, rdConcurReadOnly, rdAsyncEnable + rdExecDirect)
DoEvents
Do While rrssTemp.StillExecuting
DoEvents
Loop
Set ReservationData = rrssTemp
Set rrssTemp = Nothing
ErrHandle:
Set rrssTemp = Nothing
If Err Then
MsgBox Err.Description, 48
End If
End Function
'修改数据
Public Function UpdateData(ByVal UpdateSql As String) As Boolean
On Error GoTo ErrHandle:
Dim StrUpdate As String
Dim RsUpdate As rdoResultset
' Dim rcolTemp As rdoColumn
StrUpdate = UpdateSql
Set RsUpdate = Nothing
Set RsUpdate = Cn.OpenResultset(StrUpdate, _
rdOpenKeyset, rdConcurReadOnly, rdAsyncEnable + rdExecDirect)
Do While RsUpdate.StillExecuting
DoEvents
Loop
Set RsUpdate = Nothing
UpdateData = True
Exit Function
ErrHandle:
Set RsUpdate = Nothing
UpdateData = False
MsgBox "修改数据出错"
End Function
你的数据库连接Oracle吧.你的数据库连接字符串的Open操作在那里?
连接的字符串在此定义:
Private Function BpSetSQLConn() As String '返回连接符
BpSetSQLConn = "dsn=realtime;uid=rtss;pwd=rtss;"
End Function
这些代码应该没有问题,在有些机器上可以用,有些机器不能用,
可能是机器的设置问题,但我不懂在哪里设置,请帮忙!
如果DNS连接不上,建议你将oracle驱动重新安装一下再试.
应该是客户机没有权限访问服务器组件,我不懂该在哪设置
我给你发了留言
我的服务器只有二个用户一个是administrator,属于administrators组
一个是guest,属于guests组
而是访问应用服务器的权限问题你现在应该是没有访问COM的权限
在COM+服务管理中进行好设置而且你的组件是有状态的
建议改成无状态组件而且VB不支持对象缓冲池
借地方郁闷一下!!!
主要是看看你的服务器用户设置。
你的客户机登陆服务器是否有足够权限。
你的客户端调用方法试什么?
Dim myObjContext As ObjectContext
Set ComObj = CreateObject("工程1.class1","172.30.1.1")
是这种方法吗?