`
guoyiqi
  • 浏览: 1016222 次
社区版块
存档分类
最新评论

GetRows的用法详解

 
阅读更多


NextRecordset 和 GetRows 大家可能用的很少!最近使用使用,不错的好东东!对提高批量查询,查询纪录集不是巨海量的情况很有效果NextRecordset 和 GetRows 是Recordset的两个属性(属性还是方法我是常混淆是非#$#$,弄不清四下五除一)

GetRows ---> 将recordset记录集提取到一个二维数组中,我们对recordset数据的行为就转移到该数组,可以早早的断开纪录集,不用再使用元数据操作,rs.movnext, while not rs.eof等可以省掉

NextRecordset ----> 就是在一次提交多个查询,形成多个reordset结果集的情况下,提供一个离开当前工作的recordset,转移到第二个recordset的方法!

主要是用在多个SELECT形成的结果集的情况

示例如下:

dim SQL,Rs,arrA,arrB,rowsA,rowsB

'======提取数据库库记录====

(adodb.connection 的连接部分省略,假定CONN.open CONNstr)SQL=" select Ca1,Ca2,Ca3,Ca4 from TableA " '---------------SELECTaSQL=SQL&" select Cb1,Cb2,Cb3,Cb4,Cb5 from TableB " '-------------SELECTb

Set Rs=conn.execute(SQL) '执行结果将有两个select 的结果集,当前第一个select的recordset处于激活状态

arrA=rs.GetRows '----------取得SElECTa Recordset的二维数组

set rs=rs.NextRecordset '------------最关键的一步,使用Nextrecordset激活下一个recordset

arrB=rs.GetRows '----------再次取得第二个SElECTb Recordset的二维数组

Rs.closeset rs=nothing '---------尽早释放数据库对象,关闭记录集CONN.closeset CONN=Nothing这样,我们所有关于数据库的数据干干净净的提取完成,用最早的时间释放数据库资源 '-----------//

'========用取得的arrA arrB进行页面处理,显示数据结果======'注意,arrA=GetRows 后得到的数组,第一维是代表列,第二维代表行

rowsA=ubound(arrA,2) '----提取arrA的第二维下标,相当于取得recordset 的记录行数rowsB=ubound(arrB,2) '-----同上,提取arrB的第二维下标

'做数据循环:

'第一个select表的循环

ADO也提供更有效率方法來取得資料。GetRows 方法傳回一個二維的陣列變數,每一行對應Recordset中的一筆記錄,且每一列對應到記錄中的欄位。此方法的語法如下:

varArray = rs.GetRows([Rows], [Start], [Fields])

Rows 是要讀取記錄的數量;如果想要取得Recordset所有記錄,可用-1或省略此參數。Start 是指出第一個被讀取記錄的書籤;也可以是下列列舉常數中的一個:0-adBookmarkCurrent(目前記錄)、1-adBookmarkFirst(第一筆記錄)、或2-adBookmarkLast(最後記錄)。

Fields 是可選擇的欄位名稱陣列,其用來限制要讀取的資料量。(也可指定單一欄位名稱、單一欄位索引、或者一個欄位索引陣列)。當設定 Rows 為少於Recordset記錄筆數時,第一筆未讀取的記錄變成現行記錄。若省略 Rows 參數或設定為-1-adGetRowsRest或大於未讀取的筆數時,GetRows 方法會讀取所有記錄並讓Recordset在EOF狀態,而不會產生任何錯誤。

當處理目的變數陣列的資料時,應該記得資料儲存方式是有點相反的感覺:陣列中第一維定義Recordset的欄位(資料行),第二維定義Recordset的資料列。以下有個載入Recordset內所有記錄某三個欄位的範例:

Dim values As Variant, fldIndex As Integer, recIndex As Integervalues = rs.GetRows(, , Array("LastName", "FirstName", "BirthDate"))For recIndex = 0 To UBound(values, 2) For fldIndex = 0 To UBound(values) Print values(fldIndex, recIndex), Next PrintNext

GetRows 方法通常比一次讀一筆記錄的迴圈要來得快些,但使用這方法時,必須確定Recordset未包含太多記錄;否則,會很容易以一個非常大的變數陣列來填滿所有記憶體。基於相同的原因,得小心不要包括任何BLOB(Binary Large Object)或CLOB(Character Large Object)欄位;若如此做的化,應用程式一定會爆掉,特別是對於較大的Recordset而言。最後,記住此方法傳回的變數陣列是以0為基底的;傳回記錄的筆數是UBound(values,2)+1,傳回欄位數是UBound(value, 1)+1。

GetString 方法跟 GetRows 是類似的,不過其傳回以單一字串形式存在的多重記錄。GetString 語法如下:

GetString([Format], [NumRows], [ColDelimiter], [RowDelimiter], [NullExpr])

Format 是結果的格式。GetString 還可能支援更多格式,但是目前唯一支援的格式是2- adClipString,所以實際上沒有任何選擇。NumRows 是要取得的列數。(使用-1或省略此參數來讀取所有剩下的記錄。)ColDelimiter 是行的分隔字元(預設為Tab字元)。RowDelimiter 為記錄的分隔字元(預設為換行字元)。NullExpr 是用來表示Null欄位的字串(預設為空字串)。文件中說明只有當Format= adClipString時,最後三個參數才可使用,但是這警告沒有多大意義,因為(如之前所提)此格式是目前唯一支援的。以下有個例子,其透過 GetString 方法來將資料匯出成以分號分隔的文字檔:

Dim i As LongOpen "datafile.txt" For Output As #1For i = 0 To rs.Fields.Count _ 1 ' Export field names. If i > 0 Then Print #1, ";"; Print #1, rs.Fields(i).Name;NextPrint #1, ""rs.MoveFirst ' Export data.Print #1, rs.GetString(, , ";", vbCrLf); ' Don't add an extra CR-LF here.Close #1

GetString 方法不允許只匯出欄位的子集合,也不允許修改匯出欄位的順序。如果需要這些額外的功能,應該使用 GetRows 方法且自行建立結果字串。

大家应该都知道Recordset有个GetRows属性,但是真正使用的不多,我也是最近才用的!汗……其实这个属性很简单,就是把数据集输出到一个数组中。但是实用性可不小,在这里我举一个例子说明一下GetRows的使用方法,大家举一反三能想到更多的用法!比如一个分类的表T_Cate,结构和数据如下:ID|Title|Intro-----------------------------------------1|新闻|这里是新闻2|教程|这里是教程3|下载|这里是下载好了,表建立好了,数据也有了,下面我们就要用到GetRows咯!

程序代码:
DimRs_CateDimArr_CateSetRs_Cate=Conn.ExeCute("SELECTID,Title,IntroFROMT_CateORDERBYIDASC")Arr_Cate=Rs_Cate.GetRowsSetRs_Cate=Nothing好了表数据已经导出到数组了!下面我们将遍历这个数组
程序代码:
DimArr_CateNumS,Arr_CateNumIArr_CateNumS=Ubound(Arr_Cate,2)'得到数组中数据的下标ForArr_CateNumI=0ToArr_CateNumSResponse.Write("ID:"&Arr_Cate(0,Arr_CateNumI)&"|标题:"&Arr_Cate(1,Arr_CateNumI)&"|介绍:"&Arr_Cate(2,Arr_CateNumI)&"<br>")Next呵呵,好了,输出的数据为:ID:1|标题:新闻|介绍:这里是新闻ID:2|标题:教程|介绍:这里是教程ID:3|标题:下载|介绍:这里是下载好了,具体就写这么多吧!文采不行,如果大家有什么不明白的,多用用就可以了,呵呵
分享到:
评论

相关推荐

    getrows的用法详解

    ### getrows 的用法详解 在数据库操作过程中,经常需要执行多条 SQL 语句来获取不同的记录集(Recordset)。对于这种情况,`GetRows` 和 `NextRecordset` 这两个方法尤其有用。本文将详细介绍这两个方法的具体用法...

    GetRows的用法详解!

    但是实用性可不小,在这里我举一个例子说明一下GetRows的使用方法,大家举一反三能想到更多的用法! 比如一个分类的表 T_Cate,结构和数据如下: ID | Title | Intro —————————————– 1 | 新闻...

    Java操作Excel方法详解

    创建Excel文件的核心在于使用`Workbook.createWorkbook()`方法来打开或创建一个新的Excel文件,然后使用`createSheet()`创建工作表,并通过`WritableSheet`对象进行进一步操作。例如在以下代码中,我们创建了一个名...

    ADO技巧 Format 炒用 SQL详解

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点:ADO对象模型的基本使用、GetRows方法的应用、Format函数的使用以及基础SQL查询语句的理解。 ### ADO对象模型的基础使用 ADO(ActiveX Data Objects)是...

    VB中recordset的用法

    ### VB中Recordset的用法详解 #### 一、概述 在Visual Basic(简称VB)开发环境中,`Recordset`对象是一种非常重要的组件,主要用于处理来自数据库的数据记录。通过使用`Recordset`对象,开发者能够方便地从数据库...

    Java 实现矩阵转置(源代码)

    3. **获取行数和列数的方法**:`getRows()` 和 `getColumns()` 分别用于返回矩阵的行数和列数。 4. **转置方法**:`transpose()` 实现了矩阵转置的功能。首先检查矩阵是否为空或是否至少有一行;然后创建一个新的...

    Java在PDF中添加表格过程详解

    此外,还可以设置单元格的对齐方式,如左对齐、居中或右对齐,使用`setHorizontalAlign`方法,参数可以是`PdfGridCellStyle.HorizontalAlign.LEFT`、`CENTER`或`RIGHT`。 最后,完成所有设置后,将表格添加到页面,...

    Android 中读取Excel文件实例详解

    如果文件位于外部存储(如SD卡),则需要使用`Environment.getExternalStorageDirectory()`等方法获取文件路径。总的来说,无论文件位置如何,读取Excel文件的核心步骤基本一致,即获取文件流、创建临时文件、读取...

    F1Book控件excel导入导出绿色版

    本文将深入探讨F1Book控件的核心特性和使用方法。 一、F1Book控件基础 F1Book控件的核心是TTF160.F1BookView类,它是实现Excel交互的关键。在C#中,我们只需简单地实例化这个类,如示例代码所示: ```csharp TTF...

    解析EXCEL文件源码

    ### 解析EXCEL文件源码知识点详解 #### 一、导入EXCEL文件并获取数据流 在处理EXCEL文件时,通常需要先将其作为一个输入流读取。代码中使用了`MultipartHttpServletRequest`来处理HTTP请求中的多部分数据,这在上...

    jxl学习与经验共享

    然后,可以使用`getSheet()`方法获取工作表,`getRows()`获取行,`getCell()`获取单元格。通过这种方式,我们可以方便地遍历和访问Excel文件中的所有数据。 3. **写入Excel文件** 创建新的Excel文件或向现有文件...

    Oracle Provider for OLE DB Developer's Guide.pdf

    - 获取结果集:通过`ICommandWithParameters::GetRows`方法获取查询结果。 - 处理数据行:利用`IRowset`接口遍历每一行数据。 - 关闭结果集:调用`IRowset::Close`方法关闭结果集。 #### 五、高级功能 **1. 参数化...

    JXL使用总结

    **JXL库详解** JXL(Java Excel API)是一个开源的Java库,专门用于读取、写入和操作Microsoft Excel文件。它为开发者提供了一种简单的方式来处理Excel电子表格数据,而无需依赖Microsoft Office或者COM组件。在...

    qeephp分页实现

    使用`getRows()`方法获取当前页的数据。这个方法会根据分页参数进行数据库查询,并返回当前页的记录。 ```php $items = $model-&gt;find('LIMIT ' . $page-&gt;getOffset() . ', ' . $page-&gt;getPageSize()); ``` ### 4. ...

    java操作excel的jxl。jar

    Java操作Excel的库JXL详解 在Java编程中,处理Excel文件是一项常见的任务,而JXL库正是为此目的设计的。...结合"JAVA对Excel的操作.txt"文档,开发者可以深入学习和理解JXL的具体使用方法,从而在实际项目中灵活应用。

    java 自定义导入xls与导出xls

    本文详细介绍了如何使用Java进行XLS文件的导入与导出操作,重点讲解了Apache POI与JExcelAPI两个库的使用方法,并提供了完整的示例代码。需要注意的是,JExcelAPI仅支持旧版的XLS文件,对于新版本的XLSX文件,则需要...

    用友华表控件js调用方法

    ### 用友华表控件JS调用方法详解 用友华表控件是一种用于处理表格数据的强大工具,尤其在企业级应用中广泛使用。通过JavaScript(JS)调用用友华表空间的方法,可以实现对表格数据的动态操作与管理,包括行列设置、...

    EasyUI指定列-合并相同数据行

    通过遍历每一列,使用`split`方法根据逗号分隔字符串来获取列数组。接着,遍历每一行,比较相邻两行同一列的值,如果相同,则累加计数器;如果不相同,则执行合并操作。 #### 详细步骤 1. **初始化Datagrid**:...

    俄罗斯方块Java代码

    综上所述,这份Java代码展示了如何使用面向对象的方法来实现俄罗斯方块游戏的核心部分,包括单个方格的管理以及游戏画布的设计与绘制。通过对这些代码的理解,可以帮助编程爱好者更好地学习和掌握面向对象编程的基础...

Global site tag (gtag.js) - Google Analytics