[VB]RS和DBGrid的相关操作

原创 2005年02月28日 16:11:00

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

相关文章推荐

DBGrid 使用大全

在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观...

datagridview相关操作模块(vb2010)

'------------------------------------------------------------- '功能:datagridview相关操作 '参数:...

lab 相关--使用vb.net实现对控制文件的管理操作

1. vb.net 读取/写入文件参考地址: http://www.jb51.net/article/15531.htm 主要是需要借助System.IO 的 streamReader 和 stre...

与Java Web Service相关的若干概念(JAX-WS,JAX-RS)

本篇关键词: JWS ,JAX-WS ,JAX-RS,REST,Restlet,SOAP 这一段时间从.NET转战java了。表示对java的一套相当不熟悉。新手,必须是新手。作为新手,我感到压力...
  • nndtdx
  • nndtdx
  • 2011年09月07日 00:18
  • 20639

RS-232相关

RS-232是由美国电子工业协会(Electronic Industries Association,EIA)制定的标准串行通信接口,原始编号全称是EIA-RS-232-C,RS是英文“推荐标准(Re...

RS232通用串口的所有相关信息

  • 2012年03月20日 22:37
  • 84KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[VB]RS和DBGrid的相关操作
举报原因:
原因补充:

(最多只允许输入30个字)