Convidado 28/2/2014, 13:29
Desculpe-me a demora.. tenho estado muito atarefado..
Ei-lo:
Dim rs As DAO.Recordset
Dim rsCount As DAO.Recordset
Dim yCount As Long
Dim StrSQL As String, strSQLCount As String
Dim StrId As Long, StrIDOld As Long
Dim nCount As Byte
Dim StrCampo1 As String, StrCampo2 As String, StrCampo3 As String
Dim dtVenc As Date, dtdata
Dim X As Long
'-----------------------------------------------------------------------------
'Carrego na variável a sql que comporta a contagem dos registros de mesma ID
'-----------------------------------------------------------------------------
strSQLCount = "SELECT tmpfatura.grupox, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idproposta FROM tmpfatura" _
& " GROUP BY tmpfatura.grupox, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idproposta;"
'------------------------------------------------------------------------
'Seto o recordset para abrir a SQL para contagem de registros de mesma ID
'------------------------------------------------------------------------
Set rsCount = CurrentDb.OpenRecordset(strSQLCount)
'-------------------------------------------------------------------
'movo o ponteiro para o último registro e em seguida para o primeiro
'-------------------------------------------------------------------
rsCount.MoveLast: rsCount.MoveFirst
'----------------------------------------------
'Carrego na variável a contagem para o registro
'----------------------------------------------
yCount = rsCount.RecordCount
'---------------------------------
'Executo loop baseado no contador
'---------------------------------
Do While Not rsCount.EOF
StrSQL = "SELECT tmpfatura.grupox, tmpfatura.contax, Sum(tmpfatura.total) AS SomaDetotal, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idProposta" _
& " FROM tmpfatura GROUP BY tmpfatura.grupox, tmpfatura.contax, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.venc, tmpfatura.idProposta" _
& " HAVING (((Sum(tmpfatura.total))<>0)) And tmpfatura.venc = " & rsCount!IdProposta & ";"
'--------------------------
'Seto o Recordset com a sql
'--------------------------
Set rs = CurrentDb.OpenRecordset(StrSQL)
'-----------------------------------------------------------------------------------------
'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
'assim sucessivamente modificando os nomes a cada loop inserindo os registros
'-----------------------------------------------------------------------------------------
nCount = 1
'------------------------------------------------------------------------------------------------
'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
'------------------------------------------------------------------------------------------------
StrCampo1 = "Conta"
StrCampo2 = "Valor"
StrCampo3 = "Grupo"
'-------------------
'Loop pelo recordset
'-------------------
Do While Not rs.EOF
'---------------------------------------------------------------------------
'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
'porque os campos não são precedidos de numeração igual
'---------------------------------------------------------------------------
dtdata = rs!Venc & "/" & Left(Me.competencia, 2) & "/" & Right(Me.competencia, 4)
'MsgBox dtdata
If nCount = 1 Then
CurrentDb.Execute "INSERT INTO [movim geral] (conta, grupo, valor1, cliente_fornecedor, idclienteforn, Venc) Values" _
& "(""" & rs!Contax & """,""" & rs!Grupox & """,""" & rs!SomaDetotal & """,""" & rs!Empresa & """,""" & rs!idcliente & """, """ & dtdata & """)"
'--------------------------------------------------------------------------------
'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
'isto porque será necessário para atualizar o mesmo apartir do segundo laço
'--------------------------------------------------------------------------------
StrId = DMax("ID", "[Movim Geral]")
'StrIDOld = rs!idpropostad
ElseIf nCount >= 1 And nCount <= 16 Then
'--------------------------------------------------------------------------------------
'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
'dos campos sejam modificados a cada laço
'--------------------------------------------------------------------------------------
CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & " = '" & rs!Contax & "', " & StrCampo2 & "" & nCount & " = " & rs!SomaDetotal & ", " & StrCampo3 & "" & nCount & " = '" & rs!Grupox & "' WHERE ID = " & StrId & ""
ElseIf nCount > 16 Then
nCount = 0
End If
'---------------------
'Incremento a variável
'---------------------
nCount = nCount + 1
'----------------------------
'Movo para o próximo registro
'----------------------------
rs.MoveNext
'--------------
'Executa o Loop
'--------------
Loop
rsCount.MoveNext
Loop
MsgBox "Pronto"
End Sub
Cumprimentos.