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*现在我想把这个类改成有公用数据源连接,并且可以使用其公共部分***