为了将 MyData 控件变成一个数据源,您需要添加一些代码来处理到数据的连接和在记录中移动。您也需要显露许多的属性,以允许开发者在设计时使用控件选择一个数据源。
注意 该主题是帮助您创建示例数据源部件系列主题的一部分。创建数据源是第一部分。
要添加数据处理代码到 MyData 控件,请按照以下步骤执行:
'只读Public Property Get RecordSet() As ADODB.RecordSetSet RecordSet = rsEnd PropertyPublic Property Get RecordSource() As StringRecordSource = m_RecordSourceEnd PropertyPublic Property Let RecordSource(ByVal New_RecordSource As String)m_RecordSource = New_RecordSourceEnd PropertyPublic Property Get BOFAction() As BOFActionTypeBOFAction = m_BOFActionEnd PropertyPublic Property Let BOFAction(ByVal New_BOFAction As BOFActionType)m_BOFAction = New_BOFActionEnd PropertyPublic Property Get EOFAction() As EOFActionTypeEOFAction = m_EOFActionEnd PropertyPublic Property Let EOFAction(ByVal New_EOFAction As EOFActionType)m_EOFAction = New_EOFActionEnd PropertyPublic Property Get ConnectionString() As StringConnectionString = m_ConnectionStringEnd PropertyPublic Property Let ConnectionString(ByVal New_ConnectionString _As String)m_ConnectionString = New_ConnectionStringEnd Property
Private Sub cmdFirst_Click()
If rs Is Nothing Then Exit Sub
rs.MoveFirst
End Sub
Private Sub cmdLast_Click()
If rs Is Nothing Then Exit Sub
rs.MoveLast
End Sub
Private Sub cmdPrev_Click()
If rs Is Nothing Then Exit Sub
If rs.BOF Then
Select Case m_BOFAction
Case BOFActionType.adDoMoveFirst
rs.MoveFirst
Case BOFActionType.adStayBOF
Exit Sub
Case Else
Exit Sub
End Select
Else
rs.MovePrevious
End If
End Sub
Private Sub cmdNext_Click()
If rs Is Nothing Then Exit Sub
If rs.EOF Then
Select Case m_EOFAction
Case EOFActionType.adDoAddNew
rs.AddNew
Case EOFActionType.adDoMoveLast
rs.MoveLast
Case EOFActionType.adStayEOF
Exit Sub
Case Else
Exit Sub
End Select
Else
rs.MoveNext
End If
End Sub
Private Sub UserControl_Terminate()
On Error Resume Next
If Not rs Is Nothing Then
rs.Close
Set rs = Nothing
End If
If Not cn Is Nothing Then
cn.Close
Set cn = Nothing
End If
Err.Clear
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag) '将属性值写到存储中Call PropBag.WriteProperty("Caption", _lblCaption.Caption, Ambient.DisplayName)Call PropBag.WriteProperty("RecordSource", _m_RecordSource, m_def_RecordSource)Call PropBag.WriteProperty("BOFAction", _m_BOFAction, m_def_BOFAction)Call PropBag.WriteProperty("EOFAction", _m_EOFAction, m_def_EOFAction)Call PropBag.WriteProperty("ConnectionString", _m_ConnectionString, m_def_ConnectionString)End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag) '从存储中加载属性值lblCaption.Caption = PropBag.ReadProperty("Caption", _Ambient.DisplayName)m_RecordSource = PropBag.ReadProperty("RecordSource", _m_def_RecordSource)m_BOFAction = PropBag.ReadProperty("BOFAction", m_def_BOFAction)m_EOFAction = PropBag.ReadProperty("EOFAction", m_def_EOFAction)m_ConnectionString = PropBag.ReadProperty("ConnectionString", _m_def_ConnectionString)End Sub
Private Sub UserControl_GetDataMember(DataMember As String, _ Data As Object) Dim conn As String On Error GoTo GetDataMemberError If rs Is Nothing Or cn Is Nothing Then '确保各种属性已被设置If Trim$(m_ConnectionString) = "" ThenMsgBox "No ConnectionString Specified!", _vbInformation, Ambient.DisplayNameExit SubEnd IfIf Trim$(m_RecordSource) = "" ThenMsgBox "No RecordSource Specified!", _vbInformation, Ambient.DisplayNameExit SubEnd IfIf Trim$(m_ConnectionString) <> "" Then'创建一个Connection对象并建立'一个连接。Set cn = New ADODB.Connectioncn.ConnectionString = m_ConnectionStringcn.Open'创建一个RecordSet对象。Set rs = New ADODB.RecordSetrs.Open m_RecordSource, cn, adOpenKeyset, adLockPessimisticrs.MoveFirstElseSet cn = NothingSet rs = NothingEnd IfEnd IfSet Data = rsExit SubGetDataMemberError:MsgBox "Error: " & CStr(Err.Number) & vbCrLf & vbCrLf & _Err.Description, vbOKOnly, Ambient.DisplayNameExit SubEnd Sub
在下一步中将运行我们的工程查看结果。
该主题是帮助您创建 ActiveX 数据源系列主题的一部分。
| 要 | 请参阅 |
| 到下一步骤 | 运行 MyDataControl 工程 |
| 从头开始 | 创建数据源 |