Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我可以´;t对来自Access的查询使用EOF命令_Vba_Ms Access_Ms Access 2010 - Fatal编程技术网

Vba 我可以´;t对来自Access的查询使用EOF命令

Vba 我可以´;t对来自Access的查询使用EOF命令,vba,ms-access,ms-access-2010,Vba,Ms Access,Ms Access 2010,在运行查询并获得596条记录的recordcount之后,我尝试使用EOF执行do-Until/Loop来填充listview 但问题是,它已经启动了“Do Until tabela.EOF”,识别文件的结尾 为什么,如果桌上有超过500个ITEN Public Function ConsultaTabela_3(Optional ByVal planilha As String, Optional ByVal Consulta As String, Optional ByVal linha A

在运行查询并获得596条记录的recordcount之后,我尝试使用EOF执行do-Until/Loop来填充listview

但问题是,它已经启动了“Do Until tabela.EOF”,识别文件的结尾

为什么,如果桌上有超过500个ITEN

Public Function ConsultaTabela_3(Optional ByVal planilha As String, Optional ByVal Consulta As String, Optional ByVal linha As String, Optional ByVal coluna As String, Optional ByVal prm1 As String, Optional ByVal prm2 As String, Optional ByVal prm3 As String, Optional ByVal prm4 As String, Optional ByVal prm5 As String, Optional ByVal prm6 As String)

Dim sSQL As String
Dim banco As ADODB.Connection
Dim tabela As ADODB.Recordset
Dim query As ADODB.Command
Dim parametro1, parametro2, parametro3, parametro4, parametro5, parametro6 As ADODB.Parameter
'Dim caminhoDB As String
caminhoDB = ThisWorkbook.Path & "\" & "CALCULO_SLA.accdb"

On Error GoTo trataErro

'caminhoDB = Replace(ThisWorkbook.FullName, "MEDICAO_ALIMENTACAO.xlsm", "") & "MEDICAO_ALIMENTACAO.accdb"

Set banco = New ADODB.Connection
banco.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & caminhoDB & ";Persist Security Info=False"

' Abre a query ACCESS
Set query = New ADODB.Command
Set query.ActiveConnection = banco
query.CommandText = Consulta
query.CommandType = adCmdStoredProc

' Pego o valor do param. e adiciono no command
Set parametro1 = query.CreateParameter("prm1", adChar, adParamInput, 255)
query.Parameters.Append parametro1
If prm1 = "" Then
    parametro1.Value = Null
Else
    parametro1.Value = prm1
End If

Set parametro2 = query.CreateParameter("prm2", adChar, adParamInput, 255)
query.Parameters.Append parametro2
If prm2 = "" Then
    parametro2.Value = Null
Else
    parametro2.Value = prm2
End If

Set parametro3 = query.CreateParameter("prm3", adChar, adParamInput, 255)
query.Parameters.Append parametro3
If prm3 = "" Then
    parametro3.Value = Null
Else
    parametro3.Value = prm3
End If

Set parametro4 = query.CreateParameter("prm4", adChar, adParamInput, 255)
query.Parameters.Append parametro4
If prm4 = "" Then
    parametro4.Value = Null
Else
    parametro4.Value = prm4
End If

Set parametro5 = query.CreateParameter("prm5", adChar, adParamInput, 255)
query.Parameters.Append parametro5
If prm5 = "" Then
    parametro5.Value = Null
Else
    parametro5.Value = prm5
End If

Set parametro6 = query.CreateParameter("prm6", adChar, adParamInput, 255)
query.Parameters.Append parametro6
If prm6 = "" Then
    parametro6.Value = Null
Else
    parametro6.Value = prm6
End If

' Executa a query no ACCESS
query.Execute

' Retorna a query para a tabela temporária e cola no excel
Set tabela = New ADODB.Recordset
tabela.CursorLocation = adUseClient
tabela.Open query



a = tabela.RecordCount
ActiveWorkbook.Sheets(planilha).Cells(CInt(linha), CInt(coluna)).CopyFromRecordset tabela

Do Until tabela.EOF

    Set li = lstResultado.ListItems.Add(, , tabela!TB_IW29_Nota)
    If Not IsNull(tabela!TB_IW29_Ordem) Then li.ListSubItems.Add Text:=tabela!TB_IW29_Ordem
    li.ListSubItems.Add Text:=tabela!TB_IW29_Descrição
    RST.MoveNext

Loop

' Limpando memória
tabela.Close
Set tabela = Nothing
banco.Close
Set banco = Nothing

Exit Function

trataErro:
MsgBox ("Erro: " & Err.Description)

End Function
使用while循环

While Not tabela.EOF

...

Wend
使用while循环

While Not tabela.EOF

...

Wend

看起来你必须先爬到顶端:

a = tabela.RecordCount
ActiveWorkbook.Sheets(planilha).Cells(CInt(linha), CInt(coluna)).CopyFromRecordset tabela
If a > 0 Then
    tabela.MoveFirst 
End If

Do Until tabela.EOF

看起来你必须先爬到顶端:

a = tabela.RecordCount
ActiveWorkbook.Sheets(planilha).Cells(CInt(linha), CInt(coluna)).CopyFromRecordset tabela
If a > 0 Then
    tabela.MoveFirst 
End If

Do Until tabela.EOF

我想古斯塔夫给了你你需要的答案。顺便说一句,我认为这一行没有用:
query.Execute
我认为古斯塔夫给了你需要的答案。作为补充,我不认为这行有用:
query.Execute