Olá amigos,
Tenho o código abaixo que utilizo no frmConferirLote e preciso fazer um comparativo com os registros selecionados na ListBox com base na (lstXML.Column(0)) , porém, não estou obtendo sucesso, sabendo que estes registro existe na tabela Enviado e Recebido.
'Deixo apenas o registros que preciso comparar o que consta na coluna 0 e 4 da listbox.
Enviado (Me.lstXML.Column(0, i))
Recebido (Me.lstXML.Column(4, i))
E ao executar o código o mesmo está me dizendo que o registro não existe na tabela Recebido, sendo assim, gostaria de uma dica para ajustar o mesmo para que ele faça a leitura correta das tabelas.
Segue exemplo: https://www.dropbox.com/s/pf4s0hbnkiq019n/BD_Teste.rar?dl=0
Dim Arquivo As String
Dim Msg As String
Dim nCount As Integer
'-----------------------------------------------------------------
'Se não fora selecionado registro na lista emite mensagem de aviso
'-----------------------------------------------------------------
If Me.lstXML.ItemsSelected.Count = 0 Then
'-------------------------------------------------------
'Emite mensagem de aviso para selecionar ao menos um XML
'-------------------------------------------------------
MsgBox "É necessário selecionar ao menos uma conta para iniciar o processo de conferência!", vbCritical, "Erro"
Exit Sub
Else
'---------------------------------------------
'Mensagem de questionamento sobre importar
'---------------------------------------------
Msg = MsgBox("Deseja conferir o(s) registro(s) selecionado(s)?", vbYesNo + vbQuestion, "Log")
Select Case Msg
Case vbYes
'-----------------------------------
'Coloca ampulheta no cursor do mouse
'-----------------------------------
Screen.MousePointer = 11
'--------------------------------------------------------------
'Executa loop pelos registros selecionados para importar o XML
'--------------------------------------------------------------
For i = 1 To Me.lstXML.ListCount - 1
'-------------------------------------------------------------------------------
'Invoca a função de importação passando como parâmetro o caminho completo
'-------------------------------------------------------------------------------
If Me.lstXML.Selected(i) Then
Call ConferirTodos(Me.lstXML.Column(1, i))
nCount = nCount + 1
End If
Next i
Case vbNo
MsgBox "Foram conferidos " & nCount & " Contas ", vbInformation, "Log"
Exit Sub
End Select
End If
'------------------------
'Reseta o cursor do mouse
'------------------------
Screen.MousePointer = 0
'----------------------
'DoCmd.Close
'DoCmd.OpenForm "frmConferirLote"
End Sub
Function ConferirTodos(Arquivo As String)
'Dim rsRecebidos As DAO.Recordset
Dim rsEnviados As DAO.Recordset
Dim rsComparativo As DAO.Recordset
Dim StrSQLRec As String
Dim nCount As Long
On Error GoTo 10
'-------------------------------------------------------------------------------------------------------------
'Carrego a variável com a SQL da tabela recebidos filtrados pelo campo senhaAutorizaao tendo
'como critério o valor selecionado na cboEnviados. A cboEnviados por sua vez é baseada na tabela Enviados
'Assim o recordset baseado na tabela recebidos conterá apenas os registros cuja guia esteja na tabela enviados
'---------------------------------------------------------------------------------------------------------------
StrSQLRec = "SELECT * FROM Recebido WHERE senhaAutorizacao = Me.lstXML.Column(1)"
'--------------------------------------
'Seto o recordset com a sql da consulta
'--------------------------------------
Set rsRecebidos = CurrentDb.OpenRecordset(StrSQLRec)
'------------------------------------------------------------------
'Movo o ponteiro do recordset para o final em seguida para o início
'------------------------------------------------------------------
rsRecebidos.MoveLast: rsRecebidos.MoveFirst
'-------------------------------------------------------------------------------------
'Caso retorne 1 ou mais registros seta o recordset baseado na tabela comparativo
'executo loop pelo recordset baseado na tabela Recebidos, adicionando um novo registro
'na tabela comparativo. Observe que fiz apenas para dois campo, siga a mesma
'lógica para os demais
'-------------------------------------------------------------------------------------
If rsRecebidos.RecordCount > 0 Then
'
Set rsComparativo = CurrentDb.OpenRecordset("Comparativo")
'
Do While Not rsRecebidos.EOF
'
With rsComparativo
'
.AddNew
'
!NomeUsuário = rsRecebidos!nomeBeneficiario 'Enviado
'
!CódUsuário = rsRecebidos!numeroCarteira 'Enviado
'
!CódGuia = rsRecebidos!senhaAutorizacao 'Enviado
'
!DtAtendimento = rsRecebidos!dataHoraInternacao 'Enviado
'
!DtAlta = DLookup("DtAlta", "Enviado", "CódGuia = '" & rsRecebidos!senhaAutorizacao & "'") 'Enviado
'
!CódServiço = rsRecebidos!codigo 'Enviado
'
!NomeServiço = rsRecebidos!descricao 'Enviado
'
!QtdRecebido = rsRecebidos!quantidade 'Recebido
'
!valorUnitario = rsRecebidos!valorUnitario 'Recebido
'
!valorTotalRecebido = rsRecebidos!valorTotal 'Recebido
'
!Nota = DLookup("Nota", "Enviado", "CódGuia = '" & rsRecebidos!senhaAutorizacao & "'") 'Enviado
'
!Fechamento = DLookup("Fechamento", "Enviado", "CódGuia = '" & rsRecebidos!senhaAutorizacao & "'") 'Enviado
'
!DataCredito = rsRecebidos!DataCredito 'Recebido
'
.Update
'
End With
'----------------------------------------------------------------
'Incremento o contador para exibir mensagem de registros copiados
'----------------------------------------------------------------
nCount = nCount + 1
rsRecebidos.MoveNext
Loop
'------------------------------------
CurrentDb.Execute "INSERT INTO EnviadoConf (NomeUsuário, CódUsuário, CódGuia, DtAtendimento, DtAlta, CódServiço, NomeServiço, QuantidadeServiço, Referencia, ValorPago, Fechamento, Nota)" & vbCrLf & _
"SELECT Enviado.NomeUsuário, Enviado.CódUsuário, Enviado.CódGuia, Enviado.DtAtendimento, Enviado.DtAlta, Enviado.CódServiço, Enviado.NomeServiço, Sum(Enviado.QuantidadeServiço) AS SomaDeQuantidadeServiço, Enviado.Referencia, Sum(Enviado.ValorPago) AS SomaDeValorPago, Enviado.Fechamento, Enviado.Nota" & vbCrLf & _
"FROM Enviado WHERE CódGuia = '" & Me.lstXML & "'" & vbCrLf & _
"GROUP BY Enviado.NomeUsuário, Enviado.CódUsuário, Enviado.CódGuia, Enviado.DtAtendimento, Enviado.DtAlta, Enviado.CódServiço, Enviado.NomeServiço, Enviado.Referencia, Enviado.Fechamento, Enviado.Nota;"
'Deleta os arquivos da tabela Enviado
'------------------------------------
CurrentDb.Execute "DELETE * FROM Enviado WHERE CódGuia = '" & Me.lstXML & "'"
'Deleta os arquivos da tabela Recebido
'------------------------------------
CurrentDb.Execute "DELETE * FROM Recebido WHERE senhaAutorizacao = '" & Me.lstXML & "'"
'---------------------------
Else
10 MsgBox "Nenhum registro encontrado no Demonstrativo de Pagamento!", vbCritical, "Dados Não Encontrados"
End If
End Function
Tenho o código abaixo que utilizo no frmConferirLote e preciso fazer um comparativo com os registros selecionados na ListBox com base na (lstXML.Column(0)) , porém, não estou obtendo sucesso, sabendo que estes registro existe na tabela Enviado e Recebido.
'Deixo apenas o registros que preciso comparar o que consta na coluna 0 e 4 da listbox.
Enviado (Me.lstXML.Column(0, i))
Recebido (Me.lstXML.Column(4, i))
E ao executar o código o mesmo está me dizendo que o registro não existe na tabela Recebido, sendo assim, gostaria de uma dica para ajustar o mesmo para que ele faça a leitura correta das tabelas.
Segue exemplo: https://www.dropbox.com/s/pf4s0hbnkiq019n/BD_Teste.rar?dl=0
Dim Arquivo As String
Dim Msg As String
Dim nCount As Integer
'-----------------------------------------------------------------
'Se não fora selecionado registro na lista emite mensagem de aviso
'-----------------------------------------------------------------
If Me.lstXML.ItemsSelected.Count = 0 Then
'-------------------------------------------------------
'Emite mensagem de aviso para selecionar ao menos um XML
'-------------------------------------------------------
MsgBox "É necessário selecionar ao menos uma conta para iniciar o processo de conferência!", vbCritical, "Erro"
Exit Sub
Else
'---------------------------------------------
'Mensagem de questionamento sobre importar
'---------------------------------------------
Msg = MsgBox("Deseja conferir o(s) registro(s) selecionado(s)?", vbYesNo + vbQuestion, "Log")
Select Case Msg
Case vbYes
'-----------------------------------
'Coloca ampulheta no cursor do mouse
'-----------------------------------
Screen.MousePointer = 11
'--------------------------------------------------------------
'Executa loop pelos registros selecionados para importar o XML
'--------------------------------------------------------------
For i = 1 To Me.lstXML.ListCount - 1
'-------------------------------------------------------------------------------
'Invoca a função de importação passando como parâmetro o caminho completo
'-------------------------------------------------------------------------------
If Me.lstXML.Selected(i) Then
Call ConferirTodos(Me.lstXML.Column(1, i))
nCount = nCount + 1
End If
Next i
Case vbNo
MsgBox "Foram conferidos " & nCount & " Contas ", vbInformation, "Log"
Exit Sub
End Select
End If
'------------------------
'Reseta o cursor do mouse
'------------------------
Screen.MousePointer = 0
'----------------------
'DoCmd.Close
'DoCmd.OpenForm "frmConferirLote"
End Sub
Function ConferirTodos(Arquivo As String)
'Dim rsRecebidos As DAO.Recordset
Dim rsEnviados As DAO.Recordset
Dim rsComparativo As DAO.Recordset
Dim StrSQLRec As String
Dim nCount As Long
On Error GoTo 10
'-------------------------------------------------------------------------------------------------------------
'Carrego a variável com a SQL da tabela recebidos filtrados pelo campo senhaAutorizaao tendo
'como critério o valor selecionado na cboEnviados. A cboEnviados por sua vez é baseada na tabela Enviados
'Assim o recordset baseado na tabela recebidos conterá apenas os registros cuja guia esteja na tabela enviados
'---------------------------------------------------------------------------------------------------------------
StrSQLRec = "SELECT * FROM Recebido WHERE senhaAutorizacao = Me.lstXML.Column(1)"
'--------------------------------------
'Seto o recordset com a sql da consulta
'--------------------------------------
Set rsRecebidos = CurrentDb.OpenRecordset(StrSQLRec)
'------------------------------------------------------------------
'Movo o ponteiro do recordset para o final em seguida para o início
'------------------------------------------------------------------
rsRecebidos.MoveLast: rsRecebidos.MoveFirst
'-------------------------------------------------------------------------------------
'Caso retorne 1 ou mais registros seta o recordset baseado na tabela comparativo
'executo loop pelo recordset baseado na tabela Recebidos, adicionando um novo registro
'na tabela comparativo. Observe que fiz apenas para dois campo, siga a mesma
'lógica para os demais
'-------------------------------------------------------------------------------------
If rsRecebidos.RecordCount > 0 Then
'
Set rsComparativo = CurrentDb.OpenRecordset("Comparativo")
'
Do While Not rsRecebidos.EOF
'
With rsComparativo
'
.AddNew
'
!NomeUsuário = rsRecebidos!nomeBeneficiario 'Enviado
'
!CódUsuário = rsRecebidos!numeroCarteira 'Enviado
'
!CódGuia = rsRecebidos!senhaAutorizacao 'Enviado
'
!DtAtendimento = rsRecebidos!dataHoraInternacao 'Enviado
'
!DtAlta = DLookup("DtAlta", "Enviado", "CódGuia = '" & rsRecebidos!senhaAutorizacao & "'") 'Enviado
'
!CódServiço = rsRecebidos!codigo 'Enviado
'
!NomeServiço = rsRecebidos!descricao 'Enviado
'
!QtdRecebido = rsRecebidos!quantidade 'Recebido
'
!valorUnitario = rsRecebidos!valorUnitario 'Recebido
'
!valorTotalRecebido = rsRecebidos!valorTotal 'Recebido
'
!Nota = DLookup("Nota", "Enviado", "CódGuia = '" & rsRecebidos!senhaAutorizacao & "'") 'Enviado
'
!Fechamento = DLookup("Fechamento", "Enviado", "CódGuia = '" & rsRecebidos!senhaAutorizacao & "'") 'Enviado
'
!DataCredito = rsRecebidos!DataCredito 'Recebido
'
.Update
'
End With
'----------------------------------------------------------------
'Incremento o contador para exibir mensagem de registros copiados
'----------------------------------------------------------------
nCount = nCount + 1
rsRecebidos.MoveNext
Loop
'------------------------------------
CurrentDb.Execute "INSERT INTO EnviadoConf (NomeUsuário, CódUsuário, CódGuia, DtAtendimento, DtAlta, CódServiço, NomeServiço, QuantidadeServiço, Referencia, ValorPago, Fechamento, Nota)" & vbCrLf & _
"SELECT Enviado.NomeUsuário, Enviado.CódUsuário, Enviado.CódGuia, Enviado.DtAtendimento, Enviado.DtAlta, Enviado.CódServiço, Enviado.NomeServiço, Sum(Enviado.QuantidadeServiço) AS SomaDeQuantidadeServiço, Enviado.Referencia, Sum(Enviado.ValorPago) AS SomaDeValorPago, Enviado.Fechamento, Enviado.Nota" & vbCrLf & _
"FROM Enviado WHERE CódGuia = '" & Me.lstXML & "'" & vbCrLf & _
"GROUP BY Enviado.NomeUsuário, Enviado.CódUsuário, Enviado.CódGuia, Enviado.DtAtendimento, Enviado.DtAlta, Enviado.CódServiço, Enviado.NomeServiço, Enviado.Referencia, Enviado.Fechamento, Enviado.Nota;"
'Deleta os arquivos da tabela Enviado
'------------------------------------
CurrentDb.Execute "DELETE * FROM Enviado WHERE CódGuia = '" & Me.lstXML & "'"
'Deleta os arquivos da tabela Recebido
'------------------------------------
CurrentDb.Execute "DELETE * FROM Recebido WHERE senhaAutorizacao = '" & Me.lstXML & "'"
'---------------------------
Else
10 MsgBox "Nenhum registro encontrado no Demonstrativo de Pagamento!", vbCritical, "Dados Não Encontrados"
End If
End Function