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 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/venus0314/archive/2005/02/28/305412.aspx
|
|