【问题标题】:Recordset findfirst operation not supported不支持记录集 findfirst 操作
【发布时间】:2019-08-23 03:08:42
【问题描述】:

我可以在记录集中打开一个表。但尝试使用 FindFirst 检查现有记录会引发“此类对象不支持操作”。而且我找不到通过 SELECT 或 SQL 优化 Recordset 的方法。

在 IDE 中工作时,在使用 DAO.Recordset 变量时会提供 FindFirst,因此它必须是对象的一部分。

我知道要找到这不是一个受欢迎的领域的信息是多么困难。但它受到支持,我认为这是因为至少有些人仍在使用它。在短期内,仅仅能够检查数据库中的现有记录对我来说将有很长的路要走。

但我将进一步感谢任何帮助打开 C# DAO 文档、参考或任何其他知识的大门。 (MS 网站仅引用 VB。)我没有找到正确的搜索词。

这是我正在尝试使用的代码...

DAO.DBEngineClass DbEng = new DAO.DBEngineClass();
Db = DbEng.OpenDatabase(txtDB.Text, null, null, null);
Rs = Db.OpenRecordset("Data", DAO.RecordsetTypeEnum.dbOpenTable, null, DAO.LockTypeEnum.dbOptimistic);
Rs.FindFirst(@"Full_Path Like '\\DELL-2\Tosh-2TB-1\tib\B1_bad.tib'")

【问题讨论】:

  • 我也强烈建议寻找更新的替代品。作为一名业余程序员,花时间坚持使用更常见的技术是非常值得的——从长远来看,这会让你的生活更轻松。

标签: c# dao


【解决方案1】:

我在 MS 文档中找到了这个:

在 Microsoft Access 工作区中,如果不指定类型,DAO 会尝试创建具有最多可用功能的 Recordset 类型,从表开始

因此,我没有像在 VBA 中几乎总是使用 SELECT 语句那样“松散地”打开 Recordset,而是打开它键入“可用的最多功能” - DAO.RecordsetTypeEnum.dbOpenTable。 VBA“在黑暗中”做有用的事情。为了增加“功能”并使 FindFirst 功能正常工作,我不得不使用“功能较少的”DAO.RecordsetTypeEnum.dbOpenDynaset 打开它。我没有找到任何可以确认的东西,但我假设当我在 Open 语句中没有提供可选参数时,VB 在直觉 Dynaset 的背景下完成了这项工作。

我发现解决方案只是因为,在看到所有围绕 DAO 的 MS 文档都只处理 VB 时,我开始放弃离开 VB 的希望,并开始将我的项目移植回它。在遵循不同的路径进入不同的文档时,我遇到了这个:

使用 Microsoft Access 工作区中的动态集和快照类型的 Recordset 对象,您还可以使用 Find 方法(如 FindFirst)根据条件定位特定记录。如果未找到记录,则 NoMatch 属性设置为 True。 对于表型 Recordset 对象,可以使用 Seek 方法扫描记录。

也没有说明对于 table-type,您只能使用 Seek。

我读了那段,特别是考虑到 table-type 是“最实用”的另一个陈述,这是指附加而不是专有功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 2019-03-16
    • 1970-01-01
    • 2021-11-18
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多