Dim WithEvents adoPrimaryRS As Recordset
Private DoingRequery As Boolean
Public Event MoveComplete()Private Sub Class_Initialize()
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;driver={SQL Server};server=serversj1;uid=sa;pwd=;database=AIS20021001013935;" Set adoPrimaryRS = New Recordset
adoPrimaryRS.Open "SHAPE {select FTranType,FDate,FBillNo,FSendBillNo,FUse,FNote,FDCStockID,FSCStockID,FInterID from ICStockBill} AS ParentCMD APPEND ({select finterid,FItemID,FQtyMust,FQty,FPrice,FBatchNo from ICStockBillEntry } AS ChildCMD RELATE FInterID TO FInterID) AS ChildCMD", db, adOpenStatic, adLockOptimistic DataMembers.Add "Primary"
DataMembers.Add "Secondary"
End SubPrivate Sub Class_GetDataMember(DataMember As String, Data As Object)
If DoingRequery Then Exit Sub Select Case DataMember
Case "Primary"
Set Data = adoPrimaryRS
Case "Secondary"
Set Data = adoPrimaryRS("ChildCMD").UnderlyingValue
End Select
End SubPrivate Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
RaiseEvent MoveComplete
End SubPrivate Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'验证代码置于此处
'下列动作发生时该事件被调用
Dim bCancel As Boolean
Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select If bCancel Then adStatus = adStatusCancel
End SubPublic Property Get EditingRecord() As Boolean
EditingRecord = (adoPrimaryRS.EditMode <> adEditNone)
End PropertyPublic Property Get AbsolutePosition() As Long
AbsolutePosition = adoPrimaryRS.AbsolutePosition
End PropertyPublic Sub AddNew()
adoPrimaryRS.AddNew
End SubPublic Sub Delete()
adoPrimaryRS.Delete
MoveNext
End SubPublic Sub Requery()
DoingRequery = True
DataMemberChanged "Primary"
DataMemberChanged "Secondary" adoPrimaryRS.Requery DoingRequery = False
DataMemberChanged "Primary"
DataMemberChanged "Secondary"
End SubPublic Sub Update()
With adoPrimaryRS
.UpdateBatch adAffectAll
If .EditMode = adEditAdd Then
MoveLast
End If
End With
End SubPublic Sub Cancel()
With adoPrimaryRS
.CancelUpdate
If .EditMode = adEditAdd Then
MoveFirst
End If
End With
End SubPublic Sub MoveFirst()
adoPrimaryRS.MoveFirst
End SubPublic Sub MoveLast()
adoPrimaryRS.MoveLast
End SubPublic Sub MoveNext()
If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'已到最后返回
adoPrimaryRS.MoveLast
End If
End SubPublic Sub MovePrevious()
If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious
If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'已到最后返回
adoPrimaryRS.MoveFirst
End If
End Sub*现在我想把这个类改成有公用数据源连接,并且可以使用其公共部分***
Private DoingRequery As Boolean
Public Event MoveComplete()Private Sub Class_Initialize()
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;driver={SQL Server};server=serversj1;uid=sa;pwd=;database=AIS20021001013935;" Set adoPrimaryRS = New Recordset
adoPrimaryRS.Open "SHAPE {select FTranType,FDate,FBillNo,FSendBillNo,FUse,FNote,FDCStockID,FSCStockID,FInterID from ICStockBill} AS ParentCMD APPEND ({select finterid,FItemID,FQtyMust,FQty,FPrice,FBatchNo from ICStockBillEntry } AS ChildCMD RELATE FInterID TO FInterID) AS ChildCMD", db, adOpenStatic, adLockOptimistic DataMembers.Add "Primary"
DataMembers.Add "Secondary"
End SubPrivate Sub Class_GetDataMember(DataMember As String, Data As Object)
If DoingRequery Then Exit Sub Select Case DataMember
Case "Primary"
Set Data = adoPrimaryRS
Case "Secondary"
Set Data = adoPrimaryRS("ChildCMD").UnderlyingValue
End Select
End SubPrivate Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
RaiseEvent MoveComplete
End SubPrivate Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'验证代码置于此处
'下列动作发生时该事件被调用
Dim bCancel As Boolean
Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select If bCancel Then adStatus = adStatusCancel
End SubPublic Property Get EditingRecord() As Boolean
EditingRecord = (adoPrimaryRS.EditMode <> adEditNone)
End PropertyPublic Property Get AbsolutePosition() As Long
AbsolutePosition = adoPrimaryRS.AbsolutePosition
End PropertyPublic Sub AddNew()
adoPrimaryRS.AddNew
End SubPublic Sub Delete()
adoPrimaryRS.Delete
MoveNext
End SubPublic Sub Requery()
DoingRequery = True
DataMemberChanged "Primary"
DataMemberChanged "Secondary" adoPrimaryRS.Requery DoingRequery = False
DataMemberChanged "Primary"
DataMemberChanged "Secondary"
End SubPublic Sub Update()
With adoPrimaryRS
.UpdateBatch adAffectAll
If .EditMode = adEditAdd Then
MoveLast
End If
End With
End SubPublic Sub Cancel()
With adoPrimaryRS
.CancelUpdate
If .EditMode = adEditAdd Then
MoveFirst
End If
End With
End SubPublic Sub MoveFirst()
adoPrimaryRS.MoveFirst
End SubPublic Sub MoveLast()
adoPrimaryRS.MoveLast
End SubPublic Sub MoveNext()
If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'已到最后返回
adoPrimaryRS.MoveLast
End If
End SubPublic Sub MovePrevious()
If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious
If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'已到最后返回
adoPrimaryRS.MoveFirst
End If
End Sub*现在我想把这个类改成有公用数据源连接,并且可以使用其公共部分***
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货