[resolvido] Erro com Instrução "INSERT INTO" !!!

Moderador: Avelino Sampaio

leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

[resolvido] Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 26 Set 2017, 12:36

Bom dia,

estou tendo dificuldades com a seguinte instrução:

CurrentDb.Execute "INSERT INTO SAP (Item, 4VE )
SELECT Mard.Campo4 AS Item,
Sum([Mard]![Campo12]+[Mard]![Campo16]+[Mard]![Campo17]) AS 4VE
FROM Mard
WHERE Mard.Campo6 = '4VE'"


Aparece "erro em tempo de execução 3122" - Sua consulta não inclui a expressão especificada 'Item' como parte de uma função de agregação


O que pode ser ?


Obrigado

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 1871
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor Avelino Sampaio » 26 Set 2017, 13:49

Leandro,

Experimente assim:

Código:
CurrentDb.Execute "INSERT INTO SAP (Item, 4VE ) 
SELECT Mard.Campo4 AS Item,
Sum([Mard]![Campo12]+[Mard]![Campo16]+[Mard]![Campo17]) AS 4VE
FROM Mard
WHERE Mard.Campo6 = '4VE'"
GROUP BY Mard.Campo4;



Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 26 Set 2017, 14:37

Avelino,

Código: Selecionar todos

CurrentDb.Execute "INSERT INTO SAP (Item, 4VE ) SELECT Mard.Campo4 AS Item, Sum([Mard]![Campo12]+[Mard]![Campo16]+[Mard]![Campo17]) AS 4VE FROM Mard WHERE Mard.Campo6 = '4VE' GROUP BY Mard.Campo4;"


Apresenta o erro:
Capturar.PNG


Reparei no bd que os Campos12, 16 e 17, são do tipo texto.
Pode ser esse o problema ?
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Avatar do usuário
Avelino Sampaio
Mensagens: 1871
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor Avelino Sampaio » 26 Set 2017, 16:10

Leandro,

acrescente o val() e veja se funciona.

Código:
CurrentDb.Execute "INSERT INTO SAP (Item, 4VE ) 
SELECT Mard.Campo4 AS Item,
Sum(Val([Mard]![Campo12])+val([Mard]![Campo16])+val([Mard]![Campo17])) AS 4VE
FROM Mard
WHERE Mard.Campo6 = '4VE'"
GROUP BY Mard.Campo4;


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 26 Set 2017, 17:09

Avelino Sampaio escreveu:Leandro,

acrescente o val() e veja se funciona.

Código:
CurrentDb.Execute "INSERT INTO SAP (Item, 4VE ) 
SELECT Mard.Campo4 AS Item,
Sum(Val([Mard]![Campo12])+val([Mard]![Campo16])+val([Mard]![Campo17])) AS 4VE
FROM Mard
WHERE Mard.Campo6 = '4VE'"
GROUP BY Mard.Campo4;


Aguardamos



Avelino,

Funcionou, mas, campos com valor 1.062 na tabela Mard, foi enviado para a tabela SAP com o valor 1,062.

Fiz da seguinte forma:

Código: Selecionar todos

CurrentDb.Execute "INSERT INTO SAP (Item, 4VE ) SELECT Mard.Campo4 AS Item, Replace(Sum(Val([Mard]![Campo12])+Val([Mard]![Campo16])+Val([Mard]![Campo17])),',','.') AS 4VE FROM Mard WHERE Mard.Campo6 = '4VE' GROUP BY Mard.Campo4;"


A principio funcionou (avaliei 3 itens). Mas achei que ficou um pouco mais lento, pois são quase 200.000 linhas.

Essa seria a melhor forma ?

leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 26 Set 2017, 17:41

Avelino,

o que eu preciso é fazer isso:

Tabela Mard
Capturar1.PNG


Virar isso:

Tabela SAP:
Capturar2.PNG



Consegui a primeira parte que era jogar o valor correspondente a '4VE' da tabela Mard na tabela SAP.
Mas não estou conseguindo jogar o valor correspondente a '6ST' , na mesma linha do item.


O máximo que consegui foi:

Tabela SAP
Capturar3.PNG


Usando as duas linhas de comando:

Código: Selecionar todos

CurrentDb.Execute "INSERT INTO SAP (Item, 4VE ) SELECT Mard.Campo4 AS Item, Replace(Sum(Val([Mard]![Campo12])+Val([Mard]![Campo16])+Val([Mard]![Campo17])),',','.') AS 4VE FROM Mard WHERE Mard.Campo6 = '4VE' GROUP BY Mard.Campo4;"

Código: Selecionar todos

CurrentDb.Execute "INSERT INTO SAP (Item, 6ST ) SELECT Mard.Campo4 AS Item, Replace(Sum(Val([Mard]![Campo12])+Val([Mard]![Campo16])+Val([Mard]![Campo17])),',','.') AS 4VE FROM Mard WHERE Mard.Campo6 = '6ST' GROUP BY Mard.Campo4;"



Pode me ajudar ?
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Avatar do usuário
Avelino Sampaio
Mensagens: 1871
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor Avelino Sampaio » 26 Set 2017, 18:17

leandro.

a consulta INSERT INTO acrescenta linhas de registro. Teria que usar a consulta UPDATE. Tente algo assim:

Código: Selecionar todos

Dim rs as DAO.REcordset
Dim strSql$
strSql = "SELECT campo4,campo12,campo16,campo17 FROM Mard WHERE campo6 ='6st';"
set rs = currentdb.OpenRecordSet(strSql)
Do While Not rs.eof
   currentdb.execute "UPDATE sap SET 6sp ='" & (val(rs!campo12) + val(rs!campo16) + val(rs!campo17)) & "' WHERE Item = " & me!campo4 & ";"
   rs.movenext
loop
rs.close
set rs = nothing
Msgbox "Terminou..."


Pergunta - o campo6 da tabela mark, está com a propriedade INDEXADO para SIM ? Se não tiver, coloque e veja se a consulta INSERT vai ficar mais rápida.

Nota: Backup dos dados antes de testar.

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 26 Set 2017, 20:39

Funcionou Avelino.
Alterei o Campo6 para indexado e ajudou na velocidade do INSERT.

Uma duvida: esse código faz com que os dados da tabela Mard sejam gravados no recordset e depois o comando UPDATE percorre a tabela SAP, preenchendo o campo 6ST conforme ele encontra um 'Item' que seja igual ao Campo4 do recordset, estou certo ?
Se sim, seria possível, em uma textbox, adicionar uma contagem, enquanto o UPDATE percorre a tabela ?
Teria uma forma de "ver" os campos sendo atualizados ? Não sei se consegui explicar......
Na tabela SAP tenho cerca de 200.000 linhas, e gostaria de uma textbox (ou outra coisa), que me mostrasse a contagem enquanto a programação trabalha.....

Se tiver duvida, posso arrumar um exemplo...


Grato

Avatar do usuário
Avelino Sampaio
Mensagens: 1871
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor Avelino Sampaio » 26 Set 2017, 21:24

leandro,

amanhã tento te oferecer uma ideia para este seu caso de contagem.
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 27 Set 2017, 12:00

Bom dia Avelino,

obrigado pela ajuda...


Pensei em fazer conforma o frm abaixo:
Capturar.PNG



Acha possível ?


Grato
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Avatar do usuário
Avelino Sampaio
Mensagens: 1871
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor Avelino Sampaio » 27 Set 2017, 14:22

leandro,

supondo que o campo se chame "registro", tente assim:

Código: Selecionar todos

Dim rs as DAO.REcordset
Dim strSql$
Dim j&
strSql = "SELECT campo4,campo12,campo16,campo17 FROM Mard WHERE campo6 ='6st';"
set rs = currentdb.OpenRecordSet(strSql)
Do While Not rs.eof
   j = j + 1
   Me!Registro = j
   DoEvents
   currentdb.execute "UPDATE sap SET 6sp ='" & (val(rs!campo12) + val(rs!campo16) + val(rs!campo17)) & "' WHERE Item = " & me!campo4 & ";"
   rs.movenext
loop
rs.close
set rs = nothing
Msgbox "Terminou..."


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Avatar do usuário
Avelino Sampaio
Mensagens: 1871
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor Avelino Sampaio » 28 Set 2017, 12:31

Leandro,

conseguiu ?

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

leandroandrea07
Mensagens: 123
Registrado em: 02 Mai 2016, 18:06

Re: Erro com Instrução "INSERT INTO" !!!

Mensagempor leandroandrea07 » 28 Set 2017, 20:09

Avelino,

Consegui sim, apenas adaptei algumas coisas.

Mas o código funcionou perfeitamente.


Obrigado

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Tabelas”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 1 visitante