我写了个DLL,我的思路是这样。
因在DLL里很多都要操作数据库的,所以我想在登录系统时把Connection对象传递过去,同时在DLL里把Connection设成全局变量,希望能在整个DLL里调用Connection对象详细代码如下:(DLL里有一个模块,一个类模块)
1.MOD_CONN 模块
Public RUSER As String
Public con As ADODB.Connection
Public Place As String '地方
Public Business As String '权限 2.Cls_awbnocheck 类模块
Option Explicit
Public Property Set Mcnnquery(ByVal conn As ADODB.Connection)
Set con = conn
End Property Private Property Get Mcnnquery() As ADODB.Connection
Set con = con
End Property Public Function SQLb(ByVal con As ADODB.Connection, ByVal CRUSER As String, ByVal Bus As String)
'登录成功后传递相应参数
RUSER = CRUSER
Business = Bus
Set Mcnnquery = con '设置cnnquery属性 End Function Public Function FEI(ByVal area As String, ByVal pyn As String, ByVal TBL As String) As Boolean
'############################
'名称: fei
'用途:检查该日报表是否已确定
'参数:area 报表部门 pyn 报表日期 tbl 表名
'返回值:true 已确定 False 未确定
'############################
Set RS = New ADODB.Recordset
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.Open "SELECT REBOK FROM " & TBL & " WHERE AREA='" & Trim(area) & "' AND PYN='" & Format(pyn, "YYYY-MM-DD") & "'", con
If Not RS.EOF Then
If Trim(RS.Fields(0).Value) = "已确定" Then
FEI = True
Else
FEI = False
End If
Else
FEI = False
End If
RS.Close
Set RS = Nothing
End Function
在登录成功后,传递相关变量 '登录成功后传递相应信息到 CBS
Dim obj As New CBS.CLS_CONN
Call obj.SQLb(con, Ruser, CN, Trim(Business))
现在遇到的问题:(编译前运行完全通过)
1.执行 FEI 函数时,提示"对象关闭",我想这个对象指的是Connection对象吧。为什么会关闭?这样不能把Connection对象定义为全局变量吗?
2.不能修改 FEI 函数 , 如:在 FEI 里增多一个参数 ByVal manage As String ,这样,在程序中引用时好象整个DLL都无效.如把增加的删除后又可以引用了。请教高手
因在DLL里很多都要操作数据库的,所以我想在登录系统时把Connection对象传递过去,同时在DLL里把Connection设成全局变量,希望能在整个DLL里调用Connection对象详细代码如下:(DLL里有一个模块,一个类模块)
1.MOD_CONN 模块
Public RUSER As String
Public con As ADODB.Connection
Public Place As String '地方
Public Business As String '权限 2.Cls_awbnocheck 类模块
Option Explicit
Public Property Set Mcnnquery(ByVal conn As ADODB.Connection)
Set con = conn
End Property Private Property Get Mcnnquery() As ADODB.Connection
Set con = con
End Property Public Function SQLb(ByVal con As ADODB.Connection, ByVal CRUSER As String, ByVal Bus As String)
'登录成功后传递相应参数
RUSER = CRUSER
Business = Bus
Set Mcnnquery = con '设置cnnquery属性 End Function Public Function FEI(ByVal area As String, ByVal pyn As String, ByVal TBL As String) As Boolean
'############################
'名称: fei
'用途:检查该日报表是否已确定
'参数:area 报表部门 pyn 报表日期 tbl 表名
'返回值:true 已确定 False 未确定
'############################
Set RS = New ADODB.Recordset
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.Open "SELECT REBOK FROM " & TBL & " WHERE AREA='" & Trim(area) & "' AND PYN='" & Format(pyn, "YYYY-MM-DD") & "'", con
If Not RS.EOF Then
If Trim(RS.Fields(0).Value) = "已确定" Then
FEI = True
Else
FEI = False
End If
Else
FEI = False
End If
RS.Close
Set RS = Nothing
End Function
在登录成功后,传递相关变量 '登录成功后传递相应信息到 CBS
Dim obj As New CBS.CLS_CONN
Call obj.SQLb(con, Ruser, CN, Trim(Business))
现在遇到的问题:(编译前运行完全通过)
1.执行 FEI 函数时,提示"对象关闭",我想这个对象指的是Connection对象吧。为什么会关闭?这样不能把Connection对象定义为全局变量吗?
2.不能修改 FEI 函数 , 如:在 FEI 里增多一个参数 ByVal manage As String ,这样,在程序中引用时好象整个DLL都无效.如把增加的删除后又可以引用了。请教高手
Public Property Set Mcnnquery(ByVal conn As ADODB.Connection)
应为:
Public Property Set Mcnnquery(ByRef conn As ADODB.Connection)
Public Function SQLb(ByVal con As ADODB.Connection, ByVal CRUSER As String, ByVal Bus As String)
改为:
Public Function SQLb(ByRef con As ADODB.Connection, ByVal CRUSER As String, ByVal Bus As String)