如何在 VB.net 中使用 ROWNUM 从 MS-Access 数据库中检索数据

Posted

技术标签:

【中文标题】如何在 VB.net 中使用 ROWNUM 从 MS-Access 数据库中检索数据【英文标题】:How to use ROWNUM in VB.net to retrieve data from a MS-Access DB 【发布时间】:2013-06-15 16:29:43 【问题描述】:

我在使用 SELECT 查询时遇到了问题。这是我的程序生成的字符串。

   SELECT 
     CODLFA, POSLFA, ARTLFA, DESLFA, CANLFA, 
     DOCLFA, DTPLFA, DCOLFA, PIVLFA, TIVLFA, CE1LFA 
   FROM
     F_LFA 
   WHERE 
     CODLFA IN 
       (
        SELECT 
          CODFAC 
        FROM 
          F_FAC 
        WHERE 
         TIPFAC = '2' 
         AND FECFAC >= 09-02-2013 
         AND CLIFAC = 21 
         AND ROWNUM = 1 
         ORDER BY CODFAC
        ) 
      AND ARTLFA = '00259' 
      AND CE1LFA = '011'

当我将它放在 MS Access 的 SQL 查询设计器中时,会出现一个窗口,要求我输入 ROWNUM 编号,然后它会显示正确的行。但在我用 VB.net 编写的应用程序中,它不起作用。这里是构造查询的地方。我的程序中的所有其他查询都工作正常。但是这个没有检索任何值。这就是为什么我将 Fill 命令放在 try 语句中并且它失败的地方,因为我猜 newAdapter 是空的。

  For Each LABLrow As DataRow In lalbaranes.Rows
            'obteniendo lineas de facturas que coincidan con la fecha, productos y cliente.
            newAdapter = New OleDb.OleDbDataAdapter("SELECT CODLFA, POSLFA, ARTLFA, DESLFA, CANLFA, DOCLFA, DTPLFA, DCOLFA, PIVLFA, TIVLFA, CE1LFA FROM F_LFA WHERE CODLFA IN (SELECT CODFAC FROM F_FAC WHERE TIPFAC = '2' AND FECFAC >= " & ALBfecha & " AND CLIFAC = " & CLIabl & " AND ROWNUM = 1 ORDER BY CODFAC) AND ARTLFA = '" & LABLrow(1) & "' AND CE1LFA = '" & LABLrow(6) & "'", dataConnection)
            newCommand = New OleDb.OleDbCommandBuilder(newAdapter)
            'graba los resultados en la tabla lboletas
            lboletas.Clear()
            Try
                newAdapter.Fill(lboletas)
                newCommand.Dispose()
                newAdapter.Dispose()

我应该如何只选择 F_FAC 中的第一行?

PD:对不起,我的英语不好。

【问题讨论】:

【参考方案1】:

ROWNUM 是一个 Oracle“伪列”,在 Access SQL 中没有直接等效项。 Access 会提示您输入值,因为 ROWNUM 未被识别为列名,因此它会要求您提供值。如果您要检查在 VB.NET 中尝试查询时收到的错误消息,您会看到

没有为一个或多个必需参数指定值。

同样,这是因为 ROWNUM 不是有效的 Access SQL。

出于您的目的,Access 等效项是...

SELECT TOP 1 FROM ...

...但请注意,如果 ORDER BY 排序中存在“平局”,Access 中的TOP 1可能返回多行。在您的情况下,如果有两行具有相同的 [CODFAC],那么 Access 中的 SELECT TOP 1 ... 实际上会返回两行。

【讨论】:

感谢您的回答,我会试一试。我决定删除 ROWNUM 并检索所有结果,然后使用 VB 选择第一行。但我会尝试 TOP 1。再次感谢!...

以上是关于如何在 VB.net 中使用 ROWNUM 从 MS-Access 数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VB.NET 中检测多个修改按钮和按下的字符

如何使用 vb.net 从查询创建访问报告

如何使用 vb.net 从 MS Access DB 表单中找出 Activex 控件

如何使用 vb.net 从 maxmind GeoIP ISP.data 获取 ISP

如何从 VB.NET 中的 USB 端口获取数据

如何从 VB.NET 的视图中获取 SQL 查询