É apenas um campo na tabela "tmpfatura" com até 10 lançamentos que será lançado na tbl movim geral igual fez para conta, exemplo: grupo, grupo1, grupo2, grupo3....grupo10, o problema que está ocorrendo é quando o grupo tem nome diferente ele esta quebrando a linha "duplicando", sendo que deveria lançar nos campos: grupo, grupo1, grupo2, grupo3....grupo10.
3 participantes
Colar registro da tabela sequencial em campos fixos
joseantonio- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 142
Registrado : 18/07/2011
- Mensagem nº51
Re: Colar registro da tabela sequencial em campos fixos
Convidado- Convidado
- Mensagem nº52
Re: Colar registro da tabela sequencial em campos fixos
Está gerando 5 registro na movim geral.
aponte-me os erros.. quantos registros deveria gerar? e onde está o erro nos registros gerados?
Cumprimentos.
aponte-me os erros.. quantos registros deveria gerar? e onde está o erro nos registros gerados?
Cumprimentos.
Convidado- Convidado
- Mensagem nº53
Re: Colar registro da tabela sequencial em campos fixos
Boas José.. bem vou tentar te explicar o erro..
Primeiramente eu carrego rsCount com os dados agrupados para cada proposta, ou seja, este recordset teria que exibir a quantidade de registros condizente com a quantidade de proposta... Se 3 propostas, 3 registros.
Pois bem.. no exemplo que enviou acrescentou descrições de grupox diferentes (11-Evetual e 12-Financeiro)... o que ocorreu é como a consulta do RsCount é agrupada.. a adição de nomes de grupox diferentes fez com que a consulta exibisse mais de um registro para a proposta ID = 1
O que fiz.. nesta primeira SQL retirei o campo Grupox da SQL assim o rsCount(Recordset baseado na SQL) voltou a exibir apenas 3 registros...
Cumprimentos.
Primeiramente eu carrego rsCount com os dados agrupados para cada proposta, ou seja, este recordset teria que exibir a quantidade de registros condizente com a quantidade de proposta... Se 3 propostas, 3 registros.
Pois bem.. no exemplo que enviou acrescentou descrições de grupox diferentes (11-Evetual e 12-Financeiro)... o que ocorreu é como a consulta do RsCount é agrupada.. a adição de nomes de grupox diferentes fez com que a consulta exibisse mais de um registro para a proposta ID = 1
O que fiz.. nesta primeira SQL retirei o campo Grupox da SQL assim o rsCount(Recordset baseado na SQL) voltou a exibir apenas 3 registros...
Private Sub DuplicarConta_Click()
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 nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
'------------------------------------------------------------------------------------------------
StrCampo1 = "Conta"
StrCampo2 = "Valor"
StrCampo3 = "Grupo"
'-----------------------------------------------------------------------------
'Carrego na variável a sql que comporta a contagem dos registros de mesma ID
'-----------------------------------------------------------------------------
strSQLCount = "SELECT tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idproposta" _
& " FROM tmpfatura GROUP BY 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.IdProposta = " & 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
'-------------------
'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.