如果想用类的方式模拟ADO的recordset结构。 我的类库的结构: Recordset '类
│
└─ Records '集合
│
└─ Record '类
│
└─ Fields '集合
│
└─ Field '类
│
├─ Value '属性
│
└─ FieldType '属性
│
└─ FieldSize '属性 比如"Recordset"类中包括"Record"集合,每个"Record"表示一条记录,"Record"类中包括"Fields"集合。"Field"类中有表示字段的特征的各个属性,如value、fieldtype、FieldSize、underlyingvalue等等。 现在遇到的问题是,如果fieldtype、FieldSize、underlyingvalue等这些属性,我把它们放在"Field"类中的话,岂不是每个"Record"中我都要给它们赋值一次?是不是太浪费了?因为这些属性对于同一个recordset来讲,值都是相同的。但是,如果放在"Recordset"类中,似乎又不可能。因为fields的数目是不确定的。 想看看大家是怎么解决这个问题的。 谢谢回复。顶也有分。
解决方案 »
- 我想入买一些关于API的VB的书籍,请介绍!
- numberformatlocal与numberformat有何区别?
- 为什么会下标越界
- 一个关于SendMessage比较郁闷的问题
- 如何将jpg格式转成WMF格式
- 关于程序最小化时在任务栏上显示一个图标
- 为什么win xp +vb6开发的应用程序安装在98上datagrid打印时总是有底纹小点点?
- 怎样将MSHFlexGrid的内容全部打印出来呀??
- 初接觸VB,簡單問題來拿分,Dim WithEvents myDevices As FPDevices是什麼?
- 求助:怎么用VB程序点击另外一个程序的toolbar上的按钮?
- 请各位大虾帮忙,有关API的问题,急急!
- fpspread 如何求和
相关的问题:在ADO对象模型中, recordset可以直接访问fields集合,即使recordset中没有任何记录。
而在我上面那样建立的类库的模型中,如果recordset的records集合中,没有任何成员的话,就无法在recordset中访问fields。更不用说field中的属性了。
这个该怎么解决呢?
应该可以省下许多对象吧。
“move对象”,move不是对象吧?
“让没有 Field 当前的‘游标’指向对应的数据。”如果用类与对象的观点来看,你说的“数据”是指放在什么地方的数据?
“Record 对象并不包含在 RecordSet 中。”这句话也不好理解。
“应该可以省下许多对象吧。”实在不明白。能不能整一个示意图来看看?或者写一点示例代码看看?谢谢。
Private com As Command
Private rst As Recordset
Private ErrDesc As StringPublic Parameters As New CParametersPublic Property Get ErrDescription() As StringErrDescription = ErrDescEnd PropertyPublic Property Set Connection(cn As Connection)
Set con = cn
End Property
Public Function ExecuteStoredProcedure(StoredProcName As String, rs As Recordset) As Boolean
Dim i As Long
ErrDesc = "没有错误"
If con Is Nothing Then
ErrDesc = "没有设置Connection对象"
ExecuteStoredProcedure = False
Exit Function
End If
If Len(StoredProcName) = 0 Then
ErrDesc = "没有设置存储过程的名字"
ExecuteStoredProcedure = False
Exit Function
End If
On Error GoTo ErrHandle
Set com = New Command
com.ActiveConnection = con
com.CommandType = adCmdStoredProc
com.CommandText = StoredProcName
For i = 1 To Parameters.Count
com.Parameters(Parameters.Item(i).name) = Parameters.Item(i).value
Next
Set rst = com.Execute()
If Not (rst Is Nothing) Then
Set rs = rst
End If
ExecuteStoredProcedure = True
Exit Function
ErrHandle:
ErrDesc = Err.Description
ExecuteStoredProcedure = False
End Function
整个RS可以看成是一个网格,你的Record即行,Field即列。
你这种模式,可以考虑在Recordset下面添加一个Columns(名字自己定)集合类,每个Column有列的固定属性,比如Name、FieldType、FieldSize等等,而Field下面除了Value等单元格属性之外,只需要建立一个对Column的引用即可,不会耗太多空间。
个人看法,仅供参考:)
你可以先设计类图吗!
比如每个Record都是Recordset的一个对象。
│
├─ Columns '集合
│ │
│ └─ Column '类
│ │
│ ├─ FieldType '属性
│ │
│ └─ FieldSize '属性
│
└─ Records '集合
│
└─ Record '类
│
└─ Fields '集合
│
└─ Field '类
│
├─ mColumn '私有或友元,初始时直接引用对应的Column
│
├─ Value '属性
│
├─ FieldType '属性(没有存储部分,使用mColumn的属性)
│
└─ FieldSize '属性(没有存储部分,使用mColumn的属性)