【问题标题】:Problem in reading data form mdb file in vb6在vb6中读取mdb文件中的数据问题
【发布时间】:2010-11-02 12:15:08
【问题描述】:

我正在使用 vb6 并尝试将 mdb 文件读入

Set rs = New ADODB.Recordset
rs.Open SqlStr, mvarDB

this my criteria string "id = 'SA / -AS 0N' And mp 'N'",表中有一条记录,id是上面提到的,它的mp列不是N。但是当

   rs.MoveFirst

在监视窗口中,我可以看到第一列的值。但是当下面运行时,标题显示

   rs.Filter = sCriteria

" : 值 BOF 或 EOF 为 True,或者当前记录已被删除。请求的操作需要当前记录。> :" 感谢您的帮助。

【问题讨论】:

    标签: ms-access vb6 ado


    【解决方案1】:

    我也同意,请先检查以确保您有记录。您不应该立即需要 rs.MoveFirst。

    If rs.RecordCount > 0 Then
    
     rs.Filter = strCriteria
    
    End If
    

    还要验证您要过滤的列是否确实存在于 Recordset 中。

    希望这会有所帮助。

    【讨论】:

    • If Not rs.EOF Or Not rs.BOF Then 给出 -1,但如果它即将到来 -1 但那我怎么能在即将到来的监视窗口中看到像 rs!id 这样的值正确
    • 如何查看记录集?
    • 在打开记录集之前尝试将记录集上的 CursorLocation 属性设置为 adUseClient。
    【解决方案2】:

    如果mp 列的值为NULL,则使用过滤条件mp <> 'N' 将导致从过滤结果集中删除该行。

    SQL 使用相同的three-valued logic。这个想法是 mp <> NULL 评估为 UNKNOWN 并且结果是在 SQL DML 中删除的行(但保留在 SQL DDL 中......)

    如果您使用的是 SQL,那么您可以使用谓词 (mp <>'N' OR mp = NULL)。可悲的是,ADO has a known problem 阻止在 Filter 属性条件中使用 NULL

    3VL 疯狂和 ADO 错误应该让您得出结论,应该避免使用 NULL 值。理想情况下,您应该删除数据库中的NULLable 列。在短期内,您可以确保您的视图和过程不会暴露 NULL 值。您可以使用另一个“神奇”文字值,但也许更好的是返回一个合适的默认域值。例如,mp 的任何不是N 的值都可能是Y

    SELECT id, IIF(mp = 'N', 'N', 'Y')
      FROM YourTable;
    

    【讨论】:

      【解决方案3】:

      用这样的健全性检查保护MoveFirst

      If Not rs.EOF Or Not rs.BOF Then
          rs.MoveFirst
      End If
      

      【讨论】:

      • 这没有任何区别。它正在进入if条件,但记录数为0
      • 我的标准字符串是:"id = 'SA / -AS 0N' And mp 'N'" 对于 mdb 中的某些列,我猜这个字段没有写任何内容.
      【解决方案4】:

      没有必要这样做

      rs.MoveFirst
      

      如果找到任何东西,记录会自动定位在第一条记录上

      接下来做这个

      If rs.EOF=false Or rs.BOF=false Then
      ' manipulate recordset here
      End If
      

      【讨论】:

        【解决方案5】:

        好吧,当评论有帮助时问题是 2 倍,但问题是,

        1- mdb 文件的数据类型为 NUMBER,因此该行中的每个空值都会导致记录到达 EOF。所以我将数据类型设置为 TEXT。

        2-在我正在做的记录集中找到空值

        dataSet.Find sCriteria, adSearchForward 'sCriteria = id = 'NW'
        

        然后我检查此列是否不为空,

        If IsNull(dataSet!col1) Then
        

        如果找到 null 我使用 'sCriteria = id = 'NW' 否则我使用 id = 'NW' 和 mp 'N'。

        工作得很好。正如所指出的,Null 导致了问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          • 2016-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-19
          • 1970-01-01
          相关资源
          最近更新 更多