建了一个ActiveX EXE来监控SQL中某个表的变化,引用ADO,类中有一个ActiveConnection属性用于获取应用程序传递来的Connection,然后在get_data方法中用ADO Command对象执行存储过程,问题就在,给类的ActiveConnection对象赋值时没问题,但在get_data中,把这个ActiveConnection赋值给执行存储过程的Command.ActiveConnection总是出错,传递过来的Connection对象是没问题的,然后我把这个ActiveX Exe修改一下成ActiveX DLL,执行起来却没问题,怎么回事?
下面是ActiveX EXE类中简化的代码(换成ActiveX DLL就没问题了)Option Explicit
Private CMD As New ADODB.Command
Private CONN As New ADODB.Connection
Public Property Get ActiveConnection() As ADODB.Connection
Set ActiveConnection = CONN
End Property
Public Property Set ActiveConnection(vCONN As ADODB.Connection)
Set CONN = vCONN
Set CMD.ActiveConnection = CONN
End Property
Public Sub getData()
Dim TEMPCMD As New ADODB.Command
On Error GoTo ErrorHand
With TEMPCMD
Set .ActiveConnection = CONN '调试到这行出错
MsgBox "设置连接成功"
.CommandType = 4
.CommandText = "test"
.Execute
End With
Exit Sub
ErrorHand:
MsgBox Err.Number, Err.Description
End Sub
下面是ActiveX EXE类中简化的代码(换成ActiveX DLL就没问题了)Option Explicit
Private CMD As New ADODB.Command
Private CONN As New ADODB.Connection
Public Property Get ActiveConnection() As ADODB.Connection
Set ActiveConnection = CONN
End Property
Public Property Set ActiveConnection(vCONN As ADODB.Connection)
Set CONN = vCONN
Set CMD.ActiveConnection = CONN
End Property
Public Sub getData()
Dim TEMPCMD As New ADODB.Command
On Error GoTo ErrorHand
With TEMPCMD
Set .ActiveConnection = CONN '调试到这行出错
MsgBox "设置连接成功"
.CommandType = 4
.CommandText = "test"
.Execute
End With
Exit Sub
ErrorHand:
MsgBox Err.Number, Err.Description
End Sub
Private CMD As New ADODB.Command
Private CONN As New ADODB.Connection
Public Property Get ActiveConnection() As ADODB.Connection
Set ActiveConnection = CONN
End Property
Public Property Set ActiveConnection(vCONN As ADODB.Connection)
Set CONN = vCONN
Set CMD.ActiveConnection = CONN 本来是没有这行的,我特意加了一个CMD变量来调试,发现连这行都有问题,是不是command对象的bug?
End Property
Public Sub getData()
Dim TEMPCMD As New ADODB.Command
On Error GoTo ErrorHand
With TEMPCMD
Set .ActiveConnection = CONN '调试到这行出错
MsgBox "设置连接成功"
.CommandType = 4
.CommandText = "test"
.Execute
End With
Exit Sub
ErrorHand:
MsgBox Err.Number, Err.Description
End Sub
Option Explicit
Private CONN As New ADODB.Connection
Dim rs As New ADODB.Recordset
Public Property Get ActiveConnection() As ADODB.Connection
Set ActiveConnection = CONN
End Property
Public Property Set ActiveConnection(vCONN As ADODB.Connection)
Set CONN = vCONN
Set rs = CONN.Execute("Select * From td_m_staff") '此处执行正确,输出了正确的结果,说明CONN是没问题的呀!
MsgBox rs.RecordCount
'CONN.Open
End Property上面的代码没问题,实在不知道怎么回事
但是换成以下的又就行了
..........Public Property Set ActiveConnection(vCONN As ADODB.Connection)
Dim rs As New ADODB.Recordset
Set CONN = vCONN
rs.open Execute "Select * From td_m_staff",conn '此处执错误,提示类型不匹配,怪哉!
MsgBox rs.RecordCount
'CONN.Open
End Property我引用的ADO2.8,为什么Recordset和Command在ActiveX Exe里就不能用这个Conneciton呢?
是不是这个Connection从应用程序传到ActiveX Exe时中间发生了交通事故?虽然现在可以用Connetion的Execute方法来执行存储过程达到想要的效果,现在我就想知道为啥Recordset和Command不能用这个Connection!我调一整天了!