[VB]RS和DBGrid的相关操作
来源:互联网 发布:网络投诉电话多少 编辑:程序博客网 时间:2024/04/29 13:41
1:关于记录集(RecordSet)的操作
有很多时候需要用到自己创建空记录集,并操作记录集,对于它的操作我遇到以下两类:
A:填充自定义数据。(原因是数据不能根据一句SQL得到,但还要只得到一个记录集)
解决方法:创建空记录集,根据需求创建记录集的Fields,然后往记录集中填充由多种途径获取的数据
例子:
Step1:创建空记录集
Set objRS_Temp=New ADODB.RecordSet
Step2:向记录集中插入栏位并打开记录集
objRS_Temp.Fields.Append "FieldName1",adVarChar,20
objRS_Temp.Fields.Append "FieldName2",adVarChar,50
......
objRS_Temp.Open
Step3:循环插入数据
objRS_Return.AddNew
objRS_Temp.Fields("FieldName1").Value="Value1"
......
objRS_Return.Update
B:利用记录集进行排序(多数情况是和SSDBGrid相关)
解决方法:首先创建空的记录集,并将SSDBGrid中的数据存放于记录集之中,利用记录集的Sort方法进行排序,经数据重新Load到SSDBGrid
例子:
Step1:获取Grid栏位名称并创建空记录集
''''循环获取Grid的栏位名称
FieldName1=grd.Columns(0).Name
FieldName2=grd.Columns(1).Name
Set objRS_Temp=New ADODB.RecordSet
Step2:向记录集中插入栏位并打开记录集
objRS_Temp.Fields.Append "FieldName1",adVarChar,20
objRS_Temp.Fields.Append "FieldName2",adVarChar,50
......
objRS_Temp.Open
Step3:循环插入数据
objRS_Return.AddNew
objRS_Temp.Fields("FieldName1").Value="Value1"
......
objRS_Return.Update
Step3:按照特定栏位进行排序
objRS_Temp.Sort = "FieldName1 DESC"
Step4:循环将记录集中数据填充到SSDBGrid
注意点1:对于Step2中,栏位类型开始的时候我采用的是adBSTR(采用UniCode编码的字符串型),结果记录集的Sort方法不可用,
分析原因是由于数据库中对于Unicode编码的字符串是不支持排序的。所以后来改为adVarChar的类型。类型后面的20和50则
表示当前栏位的最大长度,应尽量与原数据保持一致。
注意点2:在ASP中使用该方法,注意栏位类型要在页首枚举(如CONST adVarChar = 200)
附:DataTypeEnum(数据类型枚举对应表)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstdatatypeenum.asp
Private Sub Command1_Click()
Dim objRS As ADODB.Recordset
Dim conn As ADODB.Connection
Dim connstring As String
Dim strsql As String
Dim inti As Integer
Dim intJ As Integer
connstring = "DSN=db;UID=uid;PWD=pwd"
''''获取空记录集,请将栏位根据情况补充完整
''
strsql = "SELECT '' AS SYSTEM,'' AS PROCESS,'' AS SUBPROCESS,'' AS STARTDATETIME FROM dual"
Set conn = New ADODB.Connection
''''打开连接,并设置为客户端游标
''
conn.Open connstring
conn.CursorLocation = adUseClient
Set objRS = New ADODB.Recordset
''''设置为动态游标
''
objRS.Open strsql, conn, adOpenDynamic, adLockBatchOptimistic
''''对得到的记录集进行操作
''
objRS.MoveFirst
''''放在循环之中,指定添加多少笔记录进入记录集
''
For intJ = 0 To 5
''''对每列进行赋值操作
''
For inti = 0 To objRS.Fields.Count - 1
objRS.Fields(inti).Value = "test" & inti
Next
''''移动到下一行,并增加新的一行
''
objRS.MoveNext
objRS.AddNew
Next
''''删除掉最后增加的一行空记录
''
objRS.Delete adAffectCurrent
''''移动到有效行
''
objRS.MovePrevious
MsgBox objRS.RecordCount
End Sub
2:关于SSDBGrid的一个小注意事项
SSDBGrid的属性grd.Row返回的值并不是选中Row在整个SSDBGrid中的绝对RowID,实际上是Grid当前可见部分的顺序值(以当前可见的第一条为0开始计数),
所以这个方法就不能够正确地达到我们的目的。
解决方法:采用Bookmark来定位到当前选定行并返回该行的RowID
例子:intRowID=grdQVL.AddItemRowIndex(grdQVL.Bookmark)这样返回的才是当前选定行的绝对RowID
- [VB]RS和DBGrid的相关操作
- [VB基础]DBGrid的用法集锦_ZT
- vb打开excel文件的相关操作
- 基于RS-232的VB通讯程序
- vb rs.recordCount=-1的解决办法
- vb rs.RecordCount返回0的原因
- 【VB】VB操作Excel相关处理
- DBGrid相关技术整理
- VB rs.Open 方法中CursorType、LockType参数的说明
- 单片机与RS-232的串口通信+VB程序
- 有关RS-232和RS-485接口的问答
- RS-232、RS-485和S-422的区别
- RS-232、RS-485和S-422的区别
- 关于rs.isAfterLast和rs.next的用法
- 关于rs.isAfterLast和rs.next的用法
- ResultSet中rs.getInt(),rs.getSting()和rs.getDouble()的区别和用法
- 和矩形相关的操作
- RS-232, RS-422,和 RS-485序列通訊界面的快速比較
- Tomcat 服务器server.xml的关键参数配置
- 管理工作中的“七种浪费”
- UniJa
- 设计模式概述
- Java虚拟机
- [VB]RS和DBGrid的相关操作
- Oracle数据库密码文件的使用和维护
- 一次编程实践[ASP+MSSQL]
- Test!
- Cache缓存使用相关
- 人生中最应珍惜的十种人
- Test2
- 如果可以的话,我想大家一起去考试,不过不要耽误项目,现在应该以项目为主,因为项目使用java做的,所以就当是复习了!好不好?
- 电脑技巧