我在执行 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:抱歉我的英语不好。
最佳答案
ROWNUM
是 Oracle“伪列”,在 Access SQL 中没有直接等效项。 Access 会提示您输入一个值,因为 ROWNUM
未被识别为列名称,因此它会要求您提供一个值。如果您要检查在 VB.NET 中尝试查询时收到的错误消息,您会看到
No value given for one or more required parameters.
同样,这是因为 ROWNUM
不是有效的 Access SQL。
出于您的目的,Access 等效项将是...
SELECT TOP 1 FROM ...
...但请注意,如果 ORDER BY 排序中存在“平局”,则 Access 中的 TOP 1
可能会返回多行。在您的情况下,如果有两行具有相同的 [CODFAC],则 Access 中的 SELECT TOP 1 ...
实际上会返回两行。
关于vb.net - 如何在 VB.net 中使用 ROWNUM 从 MS-Access DB 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125681/