Vba 我可以´;t对来自Access的查询使用EOF命令
在运行查询并获得596条记录的recordcount之后,我尝试使用EOF执行do-Until/Loop来填充listview 但问题是,它已经启动了“Do Until tabela.EOF”,识别文件的结尾 为什么,如果桌上有超过500个ITENVba 我可以´;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
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