实现批量记录获取

2024-04-30

在程序开始时,我需要将数据从 MS Access 数据库 (.mdb) 读取到下拉控件中。这样做是为了每当用户在该控件中键入内容时,应用程序都可以自动完成。

不管怎样,从数据库中读取数据花了很长时间,所以我想我应该实现批量行获取。

这是我的代码:

CString sDsn;
CString sField;
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
TRY
{
    // Open the database
    database.Open(NULL,false,false,sDsn);

    // Allocate the rowset
    CMultiRowset recset( &database );

    // Build the SQL statement
    SqlString =  "SELECT NAME "
            "FROM INFOTABLE";

    // Set the rowset size. These many rows will be fetched in one bulk operation
    recset.SetRowsetSize(25);

    // Open the rowset
    recset.Open(CRecordset::forwardOnly, SqlString, CRecordset::readOnly | CRecordset::useMultiRowFetch);

    // Loop through each rowset
    while( !recset.IsEOF() )
    {
        int rowsFetched = (int)recset.GetRowsFetched(); // This value is always 1 somehow
        for( int rowCount = 1; rowCount <= rowsFetched; rowCount++ )
        {
            recset.SetRowsetCursorPosition(rowCount);
            recset.GetFieldValue("NAME",sField);
            m_nameDropDown.AddString(sField);
        }

        // Go to next rowset
        recset.MoveNext();
    }

    // Close the database
    database.Close();
}
CATCH(CDBException, e)
{
    // If a database exception occured, show error msg
    AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;

MultiRowset.cpp好像:

#include "stdafx.h"
#include "afxdb.h"
#include "MultiRowset.h"

// Constructor
CMultiRowset::CMultiRowset(CDatabase *pDB)
   : CRecordset(pDB)
{
    m_NameData = NULL;
    m_NameDataLengths = NULL;

    m_nFields = 1;
    CRecordset::CRecordset(pDB);
}

void CMultiRowset::DoBulkFieldExchange(CFieldExchange *pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Text_Bulk(pFX, _T("[NAME]"), &m_NameData, &m_NameDataLengths, 30);
}

MultiRowset.h好像:

#if !defined(__MULTIROWSET_H_AD12FD1F_0566_4cb2_AE11_057227A594B8__)
#define __MULTIROWSET_H_AD12FD1F_0566_4cb2_AE11_057227A594B8__

class CMultiRowset : public CRecordset
{
public:
      // Field data members
      LPSTR m_NameData;

      // Pointers for the lengths of the field data
      long* m_NameDataLengths;

      // Constructor
      CMultiRowset(CDatabase *);

      // Methods
      void DoBulkFieldExchange(CFieldExchange *);
};

#endif

在我的数据库中,INFOTABLE好像:

NAME    AGE
----    ---
Name1   Age1
Name2   Age2
      .
      .
      .
      .

我需要做的只是read来自数据库的数据。有人可以告诉我我做错了什么吗?我的代码现在的行为与正常的获取完全一样。没有发生批量获取。

EDIT:

我刚刚闲逛了一下DBRFX.cpp并发现RFX_Text_Bulk()初始化我通过的m_NameData as new char[nRowsetSize * nMaxLength]!

这意味着m_NameData只是一个字符数组!我需要获取多个名称,那么我不需要二维字符数组吗?最奇怪的是,一模一样RFX_Text_Bulk()初始化我通过的m_NDCDataLengths as new long[nRowsetSize]。为什么字符数组需要长度数组?!


根据http://msdn.microsoft.com/en-us/library/77dcbckz.aspx#_core_how_crecordset_supports_bulk_row_fetching http://msdn.microsoft.com/en-us/library/77dcbckz.aspx#_core_how_crecordset_supports_bulk_row_fetching在调用 SetRowsetSize 之前,您必须使用 CRecordset::useMultiRowFetch 标志打开 CRecordset:

要实现批量行提取,您必须指定 CRecordset::useMultiRowFetch 的 dwOptions 参数中的选项 开通会员功能。要更改行集大小的设置,请调用 设置行集大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现批量记录获取 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 如何在asp.net中按下按钮后刷新Gridview

    我正在尝试制作一个简单的图书馆数据库 我在网格视图中列出搜索结果 然后有一个文本框和一个按钮 用户输入 isbn 并单击贷款按钮 然后 如果有足够数量的物品 itemNumber gt 0 则由用户借出 这是用户界面的屏幕截图 我的问题是
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 图像从部署到heroku的django web应用程序中消失

    我正在开发一个 django 项目 使用 django Rest 框架编写 REST API 以在 Android 应用程序中使用它们 我的主要想法是在 Django 中开发后端 在 Android 中开发前端 项目部署在 Heroku 上
  • sap.m.Select:从空白选择输入元素开始

    当使用数据聚合时sap m Select 始终选择第一个条目 这是一个链接SDK预览 https sapui5 netweaver ondemand com sdk explored html sample sap m sample Sel
  • 为什么在没有声明的情况下不能从 .cpp 文件中获取模板函数的完全特化?

    以下代码不会生成编译 链接器错误 警告 A h include
  • scipy 中稀疏正定线性系统推荐的直接求解器?

    如果 scipy sparse 文档中对此有清楚的解释 我很抱歉 使用 scipy 时 您建议使用什么函数来求解稀疏正定线性方程组 我想使用直接方法 并且希望对列重新排序 以便在系数矩阵的 Cholesky 分解中尽可能保持稀疏性 理想情况
  • 如何创建 sqlalchemy 到 json

    我有一个 sqlalchemy 结果 labels session query LabelsData LabelsData id LabelsData name LabelsData color filter LabelsData dele
  • 从云调度程序调用 Google 云函数时出现权限被拒绝错误

    我正在尝试调用 Google 云函数 该函数是由云调度程序触发的 Http 但每当我尝试运行云调度程序时 它总是显示权限被拒绝错误 httpRequest status 403 insertId 14igacagbanzk3b jsonPa
  • 测试 SMTP 服务器通过 C# 运行

    如何在不发送消息的情况下通过 C 测试 SMTP 是否启动并运行 我当然可以尝试 try send email to email protected cdn cgi l email protection catch log smtp is
  • 您使用什么 cscope 参考卡? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 带圆角的 NSVisualEffectView

    如何在 OS X 中显示带圆角的 NSVisualEffectView 我添加 NSVisualEffectView 的代码 let visualEffectView NSVisualEffectView frame NSMakeRect
  • Pandas 从重采样中检索添加行的索引

    我有一个缺少行的数据框 我对其进行插值和重新采样 我想知道是否有办法在重新采样时获取添加到数据帧的行的索引 这就是我创建 重新采样 插入数据帧的方式 import numpy as np import pandas as pd from d
  • 使用 write.table 时避免在列名和行名中使用引号 [重复]

    这个问题在这里已经有答案了 我在名为 data txt 的文件中有以下数据 pid 1 2 4 15 18 20 1 at 100 200 89 189 299 788 2 at 8 78 33 89 90 99 3 xt 300 45 5
  • 嵌套 ListView、StreamBuilder 和子集合

    我正在尝试创建一个嵌套的 ListView 但不知道是否可以在嵌套视图中组合 2 个流构建器 因为它不起作用 在带有子集合查询的第二个 StreamBuilder 中 似乎没有返回数据 我不明白为什么 当我对文档 ID 进行硬编码时 我没有
  • 通过组合字符串将不同的行归为一行

    我有一个这样的数据集 Column1 Column2 1 A 1 B 1 C 2 D 2 E 2 F 2 G 3 H 3 I 我想将它合并成这样的东西 Column1 Column2 1 A B C 2 D E F G 3 H I 是否可以
  • 如何在 Matplotlib 中指定类似箭头的线条样式?

    我想在 Matplotlib 中显示一组 xy 数据 以指示特定路径 理想情况下 将修改线条样式以使用类似箭头的补丁 我创建了一个模型 如下所示 使用 Omnigraphsketcher 看来我应该能够覆盖常见的之一linestyle声明
  • Azure DevOps Rest Api 是否返回正确数量的拉取请求?

    我们正在尝试收集有关拉取请求的信息 以便为我们的部门建立某些指标 完成拉取请求需要多长时间 Azure DevOps 提供了一个 API 来查询很多东西 包括拉取请求 我在这里查了一下用法 https learn microsoft com
  • 页面加载后自动执行.on()函数

    I use container on click contentEffects 使一些 jquery 代码在 ajax 调用后再次工作 不过 我希望 on 函数可以在页面加载后立即自动执行 并且无需click事件 那可能吗 请看一下我的网站
  • 如何使用 PHP 在文本区域中显示 Word 文档?

    我试图使用 com 类测试代码来显示 Word 文件 但我似乎无法得到答案并且仍在搜索 我遇到错误 有时程序根本不显示任何内容 请给我一些想法 我正在使用 PHP 4 如果站点托管在装有 Word 的 Windows 计算机上 您可以使用
  • 使用Core Data中的Cascade删除关系对象

    我希望使用核心数据执行一些简单的删除 但仅需要对此的一些建议 我有一个包含交易 名称 事件和日期实体的模型 该交易与其他每个实体都有链接 在应用程序中 当用户将信息添加到文本字段时 该信息会保存到 4 个选项卡的表格视图控制器中 第一个选项
  • 伽玛分布拟合误差

    对于分类任务 我想将伽玛分布拟合到两对数据 类内和类之间的距离人口 这是为了确定理论错误接受率和错误拒绝率 The fit Scipy returns puzzles me tough A plot of the data is below
  • 实现批量记录获取

    在程序开始时 我需要将数据从 MS Access 数据库 mdb 读取到下拉控件中 这样做是为了每当用户在该控件中键入内容时 应用程序都可以自动完成 不管怎样 从数据库中读取数据花了很长时间 所以我想我应该实现批量行获取 这是我的代码 CS