Public Function SHAddPlan(SHAddPlanType As Long, Number As Long, HiEventUserID As String) As Integer mConn.BeginTrans 'On Error GoTo GetListErrorDim i As Long i = 0 Dim scmd As String Dim SHAddPlanArray() As SHAddPlanType ReDim SHAddPlanArray(0 To Number) As SHAddPlanType CopyMemory ByVal VarPtr(SHAddPlanArray(0)), ByVal SHAddPlanType, ByVal (Number * LenB(SHAddPlanArray(0))) Do Until i = Number With SHAddPlanArray(i) scmd = "insert into FuserPlan(DwriteNameID,DreadNameID,DregisterDate,DexecuteDateTime,DplanSubject,DplanMemo,DfinishFlags)" scmd = scmd + " values('" & .HiwriteNameID & "','" & .HireadNameID & "','" & Date & "','" & .HiexecuteDateTime & "','" & .HiplanSubject & "','" & .HiplanMemo & "', '0') " End With mConn.Execute (scmd)i = i + 1 Loop Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) 自己看,不懂问
'class1.cls'delare all variables in a struct type objdata var1 as long var2 as ... end typedim m_obj_data as objdatapublic property let var1(byval New_Value as long) m_obj_data.var1 = new_value end propertypublic property get var1() as long var1 = m_obj_data.var1 end property friend get dataptr() as long dataptr = varptr(m_obj_data) end functionpublic function Clone() as class1 dim c as class1 set c = new class1 copymemory byval c.dataptr, m_obj_data, len(m_obj_data) set Close = c end function
TO:Un1() type objdata 中能否包含一个对象,比如一个ADODB.Recordset对象TO:litsnake1(litsnake) 这个应该是可能的,不然MS的ADODB.Recordset是怎样实现Clone的? TO:ketao_78(春来江水绿如蓝) 这个能实现的话用途是很广的,这点可能大家都知道。
可以,不过这时除了 copymemory 外,还需要 set obj, 但由于你拷贝时已经复制变量所以你需要: dim rs as recordset set rs = m_obj_data.rs dim l as long copymemory byval varptr(m_obj_data.rs), l, len(l) set m_obj_data.rs = rs copymemory rs, l, len(l)
mConn.BeginTrans
'On Error GoTo GetListErrorDim i As Long
i = 0
Dim scmd As String
Dim SHAddPlanArray() As SHAddPlanType
ReDim SHAddPlanArray(0 To Number) As SHAddPlanType
CopyMemory ByVal VarPtr(SHAddPlanArray(0)), ByVal SHAddPlanType, ByVal (Number * LenB(SHAddPlanArray(0)))
Do Until i = Number
With SHAddPlanArray(i)
scmd = "insert into FuserPlan(DwriteNameID,DreadNameID,DregisterDate,DexecuteDateTime,DplanSubject,DplanMemo,DfinishFlags)"
scmd = scmd + " values('" & .HiwriteNameID & "','" & .HireadNameID & "','" & Date & "','" & .HiexecuteDateTime & "','" & .HiplanSubject & "','" & .HiplanMemo & "', '0') "
End With
mConn.Execute (scmd)i = i + 1
Loop
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
自己看,不懂问
你说的是Copy long型数据,但我要的是复制Object
比如你想刻隆rst,那么你用copymemory,你得知道这个对象的大小??
?????
type objdata
var1 as long
var2 as ...
end typedim m_obj_data as objdatapublic property let var1(byval New_Value as long)
m_obj_data.var1 = new_value
end propertypublic property get var1() as long
var1 = m_obj_data.var1
end property
friend get dataptr() as long
dataptr = varptr(m_obj_data)
end functionpublic function Clone() as class1
dim c as class1
set c = new class1
copymemory byval c.dataptr, m_obj_data, len(m_obj_data)
set Close = c
end function
type objdata 中能否包含一个对象,比如一个ADODB.Recordset对象TO:litsnake1(litsnake)
这个应该是可能的,不然MS的ADODB.Recordset是怎样实现Clone的?
TO:ketao_78(春来江水绿如蓝)
这个能实现的话用途是很广的,这点可能大家都知道。
自己的类
当然可以知道由那些属性
逐个赋值就是了
dim rs as recordset
set rs = m_obj_data.rs
dim l as long
copymemory byval varptr(m_obj_data.rs), l, len(l)
set m_obj_data.rs = rs
copymemory rs, l, len(l)