[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

[VB基础]DBGrid的用法集锦_ZT

原贴见:清溪论坛http://scwy.net/bbs/dispbbs.asp?boardid=40&id=111751、如何修改DBGrid的列标题可以使用Select语句指定标题,如: Selec...
  • BubbleKittyII
  • BubbleKittyII
  • 2005年07月12日 11:16
  • 6284

VB rs.Open 方法中CursorType、LockType参数的说明

Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpen...
  • jsdskynet
  • jsdskynet
  • 2010年04月02日 10:18
  • 1073

设置DBGrid单元格颜色

一、设置某个单元格颜色:        if Column.FieldName=BookListNO  then   //按字段为BookListNO的列,来显示单元格颜色       begin  ...
  • 78hgdong
  • 78hgdong
  • 2009年12月13日 10:33
  • 2254

[VB]SqlHelper|DBHelper数据通用访问类 for VB

本人一直从事C#编程,刚接触VB,写了简单的基于SQLServer的数据通用访问类vb版,供有需要的同学参考 Imports System.Data Imports System.Data.SqlCl...
  • cyj0531
  • cyj0531
  • 2016年07月21日 17:41
  • 441

vb rs.recordCount=-1的解决办法

-1 表示记录数不确定。 要确定记录数,需要两个条件: 1 使用客户端游标。 rs.CursorLocation = adUseClient  缺省条件下,是使用服务端游标的...
  • a503200877
  • a503200877
  • 2013年04月22日 14:23
  • 865

dbgrid使用大全(delphi)

  • beyondqd
  • beyondqd
  • 2010年08月25日 13:37
  • 8751

DBGrid 各属性的设置

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

vb data绑定控件简介

Grid控件:Grid控件可显示简单的二维表格,不用和数据库直接连接,具有滚动条、行头、列头等特性,运行时可用鼠标调整行列的宽度,可用于浏览数据,若想对数据进行编辑,需结合TextBox控件,或采取其...
  • xiaoxiaohai123
  • xiaoxiaohai123
  • 2008年06月10日 14:19
  • 2653

Delphi DBGrid双击事件、单元格操作

1、得到当前格子中的内容: DBGrid1.Fields[DBGrid1.SelectedIndex].DisplayText; 把DBGrid1.SelectedIndex改为你所希望引用的字段...
  • Trassion
  • Trassion
  • 2014年12月13日 13:27
  • 6325

vb 中recordset提示对象关闭时不允许操作

vb中执行查询后,一般要判断是否为空,
  • hzvcan
  • hzvcan
  • 2014年08月25日 10:22
  • 1469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[VB]RS和DBGrid的相关操作
举报原因:
原因补充:

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