Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ifmoraes

Vários INSERTS de uma só vez

Recommended Posts

Boa tarde a todos

 

 

Gostaria da ajuda de vocês para fazer o seguinte:

 

- Eu gostaria de saber se há como em uma página que realiza a Inserção de dados no BD, ele executar o INSERT INTO para todos os produtos de uma lista, essa lista é preenchida em uma tabela temporária

- Esse procedimento é uma rotina de inserir da tabela temporária para a tabela de pedidos até acabar todos os produtos da temporária, pois depois ele serão excluidos desta tabela temporária

- Eu estou conseguindo pegar apenas o último produto acrescentado

- Não sei se há alguma forma usando o For ... Each ou algo do tipo

 

Conto com a ajuda de você's, e espero que todos tenham um excelente fds

 

 

Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim é possível, mostre apenas como você está fazendo atualmente que a correção, dependendo do caso, pode ser feita em seu code mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abaixo, está o SELECT que busca todos os produtos adicionados pelo cliente nesta última compra

 

Set rslista = cn.Execute("Select * From tb_pedido where id_cliente = '"& session("id")&"' ")

 

Abaixo são os dois INSERTS que tenho que fazer para cada item escolhido pelo cliente:

 

sql1 = sql1 & "INSERT INTO tb_assinatura_correto (id_cliente, inativo, fpagto, valor) "

sql1 = sql1 & "VALUES "

sql1 = sql1 & "('"&session("id")&"', 1, 'boleto','"&rslista("valor")&"')"

cn.execute(sql1)

 

sql2 = sql2 & "INSERT INTO tb_jornais_assinatura (id_cliente, id_jornal, edicao, periodo, datainicio, datafim) "

sql2 = sql2 & "VALUES "

sql2 = sql2 & "('"&session("id")&"', '"&rslista("id_jornais")&"','"&rslista("edicao")&"','"&rslista("periodo")&"','"&datainicio&"', '"&datafim&"')"

cn.execute(sql2)

 

Não sei se existe alguma forma de executar esses INSERTS para cada item encontrado no SELECT

 

Muito obrigado pela resposta e espero que possa me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao, eh mais ou menos isso:insert tabelavalues(select * from tabelatemporaria)flwww abcs

Compartilhar este post


Link para o post
Compartilhar em outros sites

mal ae veeelho, tenta assim:claro, você tenque substituir o nome das tabelas e dos campos aeeeinsert into tbl_cliente (cli_int_codigo, cli_str_nome, cli_str_sobrenome)(select * from tbl_temporaria)ouinsert into tbl_cliente (cli_int_codigo, cli_str_nome, cli_str_sobrenome)(select tmp_int_codigo, tmp_str_nome, tmp_str_sobrenome from tbl_temporaria)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela ajuda cara, mas agora eu coloquei o código:

 

sql1 = sql1 & "INSERT INTO tb_assinatura_correto (id_cliente, inativo, fpagto, valor) "

sql1 = sql1 & "VALUES "

sql1 = sql1 & "('"& cliente &"', 1, 'boleto','Select valor From tb_pedido')"

cn.execute(sql1)

sql2 = sql2 & "INSERT INTO tb_jornais_assinatura (id_cliente, id_jornal, edicao, periodo, datainicio, datafim) "

sql2 = sql2 & "VALUES "

sql2 = sql2 & "('"& cliente &"', Select 'id_jornais','edicao','periodo' From tb_pedido,'"&datainicio&"', '"&datafim&"')"

cn.execute(sql2)

 

Tive que colocar assim, pois essa tabela temporário TB_PEDIDO não possue alguns campos como FPAGTO ou INATIVO

 

Então eu tentei, mas se não coloco 'Select...' ele dá erro 80040e14 exatamente por causa disso

 

e se coloco ele grava como se fosse o texto que quero gravar no campo

 

 

Agora coloquei esse comando abaixo:

 

sql1 = sql1 & "INSERT INTO tb_assinatura_correto (id_cliente, inativo, fpagto, valor) "

sql1 = sql1 & "VALUES "

sql1 = sql1 & "('"& cliente &"', 1, 'boleto',(Select valor From tb_pedido))"

cn.execute(sql1)

sql2 = sql2 & "INSERT INTO tb_jornais_assinatura (id_cliente, id_jornal, edicao, periodo, datainicio, datafim) "

sql2 = sql2 & "VALUES "

sql2 = sql2 & "('"& cliente &"', (Select id_jornais, edicao, periodo From tb_pedido),'"&datainicio&"', '"&datafim&"')"

cn.execute(sql2)

 

 

 

... e apareceu o erro 80004005

 

Subquery returns more than 1 row

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora vai hein campeão...

Fiz uma bagaça aki só pra você entender, depois você adapta ao seu codigo

 

[b]-- EXECUTE UM PASSO DE CADA VEZ NO QUERY ANALYZER --[/b]-- 01) CRIAMOS A PRIMEIRA TABELA (tbl_teste1) QUE NO SEU CASO SERIA A "TABELA TEMPORARIA"create table [dbo].[tbl_teste1] (	[cli_int_codigo] [int] null ,	[cli_str_nome] [char] (50) collate SQL_Latin1_General_CP1_CI_AS null ,	[cli_str_sobrenome] [char] (50) collate SQL_Latin1_General_CP1_CI_AS null ) on [primary]GO-- 02) CRIAMOS A SEGUNDA TABELA (tbl_teste2) QUE NO SEU CASO SERIA A "TABELA DEFINITIVA"create table [dbo].[tbl_teste2] (	[cli_int_codigo] [int] NULL ,	[cli_str_nome] [char] (50) collate SQL_Latin1_General_CP1_CI_AS null ,	[cli_str_sobrenome] [char] (50) collate SQL_Latin1_General_CP1_CI_AS null ,	[cli_str_rg] [char] (20) collate SQL_Latin1_General_CP1_CI_AS null , 	[cli_str_cpf] [char] (20) collate SQL_Latin1_General_CP1_CI_AS null ) on [primary]GO-- 03) INSERIMOS ALGUNS DADOS NA (tbl_teste1) "TABELA TEMPORARIA"insert into tbl_teste1(cli_int_codigo, cli_str_nome, cli_str_sobrenome) values(1,'SIDNEI','JUNIOR')insert into tbl_teste1(cli_int_codigo, cli_str_nome, cli_str_sobrenome) values(2,'FABIO','ORTEGA')insert into tbl_teste1(cli_int_codigo, cli_str_nome, cli_str_sobrenome) values(3,'FELIPE','DOURADO')insert into tbl_teste1(cli_int_codigo, cli_str_nome, cli_str_sobrenome) values(4,'PAULO','ASSUNCAO')-- 04) SELECIONAMOS OS DADOS DA (tbl_teste1) "TABELA TEMPORARIA" SÓ PARA CONFERIR SE FORAM ADICIONADOselect * from tbl_teste1-- 05) FAZEMOS AS TRANFERENCIAS DOS DADOS DA (tbl_teste1) "TABELA TEMPORARIA", PARA (tbl_teste2) "TABELA DEFINITIVA"insert into tbl_teste2(cli_int_codigo, cli_str_nome, cli_str_sobrenome, cli_str_rg, cli_str_cpf)((select cli_int_codigo, cli_str_nome, cli_str_sobrenome, 'RG INDEFINIDO', 'CPF INDEFINIDO' from tbl_teste1))-- 06) SELECIONAMOS OS DADOS DA (tbl_teste1) "TABELA TEMPORARIA" SÓ PARA CONFERIR SE FORAM TRANSFERIDOSselect * from tbl_teste2

falowww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas dúvidas: - Nas linhas do INSERT você não colocou o "VALUES", não tem mesmo? - E os campos que não existem nas tabelas são colocados no meio do código SELECT mesmo? como o RG INDEFINIDO e etc.... - Existe como executar um WHILE NOT para funcionar como no preenchimento de tabelas? que a lógica seria que funcionasse, pois se no SELECT apareceram 4 linhas, ele executaria o INSERT 4 vezes, não é? não sei se é possível fazer isso no ASPValeu mesmo pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

Você pode inserir vários registros utilizando um "select" invés de utilizar a cláusula "values".

Ex:

insert into user(strLogin, strPassword, strName)select strLogin, strPassword, strName from oldUsers

flw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não rodou, para mim o que funcionaria fosse de alguma forma efetuar o while not para a cada registro do SELECT ele efetuar um INSERT nem cada tabela

 

Muito obrigado pela ajuda de você's

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao browww!você executou passo a passo esses comandos no query analizer, você vai entender direitinho...a)Nas linhas do INSERT você não colocou o "VALUES", não tem mesmo?NAOB)E os campos que não existem nas tabelas são colocados no meio do código SELECT mesmo? como o RG INDEFINIDO e etc....SIM- Existe como executar um WHILE NOT para funcionar como no preenchimento de tabelas? que a lógica seria que funcionasse, pois se no SELECT apareceram 4 linhas, ele executaria o INSERT 4 vezes, não é? não sei se é possível fazer isso no ASPSIM, porem esse metodo direto no query é bem mais inteligente e em mais simples...flwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu o erro:

 

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

 

Column count doesn't match value count at row 1

 

/contasteste/diarios_eletronicos/boleto.asp, line 39

 

Deve ser por causa do SELECT que no caso selecionou 3 itens

Compartilhar este post


Link para o post
Compartilhar em outros sites

maaanow, vamos solucinar essa zinka ou nom me chamo sidnei huauauha...poem seu codigo ae do insert, ou me manda o arquivo ASP zipado em stertuliano@gmail.comfalowwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

ISSO:

Set rspedido1 = cn.Execute("Select * From tb_pedido where id_cliente = '"& cliente &"' ") while not rspedido1.eofsql1 = sql1 & "INSERT INTO tb_assinatura_correto (id_cliente, inativo, fpagto, valor) "sql1 = sql1 & "VALUES "sql1 = sql1 & "((Select '"& cliente &"', '"& inativo &"',  'boleto', valor From tb_pedido where id_cliente = '"& cliente &"'))"cn.execute(sql1)rspedido1.movenextwendrspedido1.close
POR ISSO:

sql1 = sql1 & "INSERT INTO tb_assinatura_correto (id_cliente, inativo, fpagto, valor) "sql1 = sql1 & "(Select '"& cliente &"', '"& inativo &"',  'boleto', valor From tb_pedido where id_cliente = '"& cliente &"')"cn.execute(sql1)
E ISSO:

Set rspedido2 = cn.Execute("Select * From tb_pedido where id_cliente = '"& cliente &"' ") while not rspedido2.eofsql2 = sql2 & "INSERT INTO tb_jornais_assinatura (id_cliente, id_jornal, edicao, periodo, datainicio, datafim) "sql2 = sql2 & "VALUES "sql2 = sql2 & "((Select '"& cliente &"', id_jornal, edicao, periodo, '"&datainicio&"',  '"&datafim&"' From tb_pedido where id_cliente = '"& cliente &"'))"cn.execute(sql2)rspedido2.movenextwendrspedido2.close
POR ISSO:

sql2 = sql2 & "INSERT INTO tb_jornais_assinatura (id_cliente, id_jornal, edicao, periodo, datainicio, datafim) "sql2 = sql2 & "(Select '"& cliente &"', id_jornal, edicao, periodo, '"&datainicio&"',  '"&datafim&"' From tb_pedido where id_cliente = '"& cliente &"')"cn.execute(sql2)
OBS.: utilizando o "response.write Sql" sempre confira se nao esta tentando iserir valores em branco nos campos inteiros, e tambem usando o "response.write Sql" tente executar a query gerada copiando e colando no query analizer para corrigir o erro mais facilmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Set rslista = cn.Execute("Select * From tb_pedido where id_cliente = '"& cliente &"' ") Set rspedido1 = cn.Execute("Select * From tb_pedido where id_cliente = '"& cliente &"' ") while not rspedido1.eofsql1 = sql1 & "INSERT INTO tb_assinatura_correto (id_cliente, inativo, fpagto, valor) "sql1 = sql1 & "VALUES "sql1 = sql1 & "( "& cliente &", "sql1 = sql1 & " "& inativo &", "sql1 = sql1 & " 'boleto', "sql1 = sql1 & "'"&rspedido1("valor")&"')"cn.execute(sql1)rspedido1.movenextwendrspedido1.closeSet rspedido2 = cn.Execute("Select * From tb_pedido where id_cliente = '"& cliente &"' ") while not rspedido2.eofsql2 = sql2 & "INSERT INTO tb_jornais_assinatura (id_cliente, id_jornal, edicao, periodo, datainicio, datafim) "sql2 = sql2 & "VALUES "sql2 = sql2 & "('"& cliente &"', " sql2 = sql2 & "'"&rspedido2("id_jornais")&"', "sql2 = sql2 & "'"&rspedido2("edicao")&"', "sql2 = sql2 & "'"&rspedido2("periodo")&"', "sql2 = sql2 & "'"&datainicio&"', "sql2 = sql2 & " '"&datafim&"') "cn.execute(sql2)rspedido2.movenextwendrspedido2.close

O Código ficou como acima, e utilizando o Response.Write está certinho repetindo os códigos corretamente, colocados os INSERTS separados eles gravam no BD direto, ou seja acho que ele não está entendendo todos juntosValeu a ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, é nois veeeelho...Entao, num tava funcionando por causa do:"WHILE NOT"Não precisa dele, pois você esta copiando os dados de uma só vez pela query, ou seja a pagina ASP só manda uma query pro banco e ele faz o resto....flwww, qualqer duvioda é nois !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.