Autor Tópico: Copiar registros de uma tabela para outra (Resolvido)  (Lida 22242 vezes)

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Copiar registros de uma tabela para outra (Resolvido)
« Online: Junho 03, 2012, 10:58:43 pm »
Prezados, estou precisando copiar varios registros de uma tabela para outra.
Segue script.

sc_lookup(resultado,
                 "SELECT cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade
                  
               FROM
                     tblDetalheRM
               WHERE
                     idrm = {idrm}");

if (FALSE === {resultado}) {
   sc_error_message("Ocorreu um erro no acesso ao banco.<BR>");
}
elseif (empty({resultado})) { /* EOF */
   sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");
}
else {
   
   $cod_compos_compon          = {resultado[0][0]};
   $id_descricao_componente            = {resultado[0][1]};
   $dtqcomprar                     = {resultado[0][2]};
   $idrm                   = {resultado[0][3]};
   $codunidade                = {resultado[0][4]};
}
echo
sc_exec_sql("INSERT INTO precos (cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade)
         VALUES({idcoleta},$cod_compos_compon,$id_descricao_componente,$dtqcomprar,$idrm,$codunidade) ");


o que está faltando ?
« Última modificação: Junho 05, 2012, 12:29:50 pm por Jean Matos »
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

George Carvalho

  • Expert
  • *****
  • Mensagens: 1371
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #1 Online: Junho 04, 2012, 06:49:55 am »
Monte seu script baseado na macro sc_select:

sc_select(meus_dados, "select clienteid, nomecliente, limitecred from clientes");
if ({meus_dados} === false)
{
     echo "Erro de acesso. Mensagem = " . {meus_dados_erro};
}
else
{
     while (!$meus_dados->EOF){
          {nome_cliente} = $meus_dados->fields[1];
          $meus_dados->MoveNext();
     }
     $meus_dados->Close();
}

 
George Carvalho
Porto de Galinhas/PE

Haroldo

  • Expert
  • *****
  • Mensagens: 6268
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Copiar registros de uma tabela para outra
« Responder #2 Online: Junho 04, 2012, 08:05:01 am »
porque não usa direto no insert?


INSERT INTOO TABELA (COLUNAS) VALUE (SELECT COLUNAS FROM TABELA2 WHERE ...)

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #3 Online: Junho 04, 2012, 12:19:24 pm »
Como o Haroldo falou, é instantâneo e basta uma linha de comando.
Eu uso desta forma

INSERT INTO tabela1 (campos...) SELECT mesmoscampos... FROM tabela 2 WHERE ....

Numa passada rápida pelo google:
Muitas vezes é necessário fazer um insert de dados em uma tabela trazendo resultados de outra na mesma base ou em bases diferentes. Como fazer? Simples:

INSERT INTO banco.tabela-destino (campo1, campo2, campo3...)
SELECT campo1,campo2,campo3... FROM banco.tabela-origem;

Atente-se para que os campos estejam na mesma seqüência tanto na instrução INSERT quanto na instrução SELECT pois é seguida a seqüência de campos em ambas as instruções. Também não se esqueça do ponto e vírgula no final da última instrução. Imprescindível.
Rodrigo Araújo

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #4 Online: Junho 04, 2012, 08:24:52 pm »
Poxa.. de cara já ví que minhas colunas estavam na ordem errada...
vou consertar e depois refazer a select.
postarei o resultado.
obrigado
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6268
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Copiar registros de uma tabela para outra
« Responder #5 Online: Junho 04, 2012, 08:58:19 pm »
Verifique a sintaxe para sql server, não tem esse parênteses depois do select
http://msdn.microsoft.com/pt-br/library/ms189872(v=sql.105).aspx

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #6 Online: Junho 04, 2012, 09:07:52 pm »
sc_lookup(resultado,
                 "SELECT cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade
                  
               FROM
                     tblDetalheRM
               WHERE
                     idrm = {idrm}");

if (FALSE === {resultado}) {
   sc_error_message("Ocorreu um erro no acesso ao banco.<BR>");
}
elseif (empty({resultado})) { /* EOF */
   sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");
}
else {
   
   $cod_compos_compon          = {resultado[0][0]};
   $id_descricao_componente    = {resultado[0][1]};
   $dtqcomprar             = {resultado[0][2]};
   $idrm                   = {resultado[0][3]};
   $codunidade                = {resultado[0][4]};
}
sc_exec_sql("INSERT INTO precos (idcoleta,cod_compos_compon,id_descricao_componente,dtqcomprar,idrm,codunidade)
         VALUES({idcoleta}, $cod_compos_compon, $id_descricao_componente, $dtqcomprar, $idrm, $codunidade)");

fiz a correção das posições dos campos... agora tá copiando..porém apenas o primeiro registro...
preciso que copia tudo  WHERE
                     idrm = {idrm}");
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6268
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Copiar registros de uma tabela para outra
« Responder #7 Online: Junho 04, 2012, 09:12:13 pm »
Porque você esta usando sc lookup em vez de sc select, mas se fizer o insert direto com select funciona

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #8 Online: Junho 04, 2012, 10:01:23 pm »
Irmao.. sou novato no ramo.
tem como vc construir a select correta pra facilitar minha vida ?
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6268
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Copiar registros de uma tabela para outra
« Responder #9 Online: Junho 04, 2012, 10:29:06 pm »
você estava no caminho no seu último post que você removeu.

execute:

Código: [Selecionar]
$_sql="
INSERT INTO precos (idcoleta, cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade)
SELECT             idcoleta, cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade   FROM  tblDetalheRM WHERE  idrm = {idrm}
";
c_sql_exec($_sql);

as colunas do select tem que vir nas mesma sequência do insert e os mesmos tipo de campos
« Última modificação: Junho 04, 2012, 10:36:01 pm por Haroldo »

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #10 Online: Junho 04, 2012, 10:41:53 pm »
ok.. ficou assim:

sc_exec_sql(
   
"INSERT INTO precos
   (cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade)
         FROM tblDetalheRM  cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade
         WHERE idrm = {idrm}");

deu esse erro :

Erro ao acessar o banco de dados
SQLState: 42000 Error Code: 156 Message: [Microsoft][SQL Server Native Client 10.0][SQL Server]Sintaxe incorreta pr¢xima … palavra-chave 'FROM'.
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6268
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Copiar registros de uma tabela para outra
« Responder #11 Online: Junho 04, 2012, 10:46:27 pm »
sc_exec_sql(
   
"INSERT INTO precos
   (cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade)
  SELECT        cod_compos_compon, id_descricao_componente, dtqcomprar, idrm, codunidade  FROM tblDetalheRM
         WHERE idrm = {idrm}");


http://msdn.microsoft.com/pt-br/library/ms189872(v=sql.105).aspx
« Última modificação: Junho 04, 2012, 10:51:13 pm por Haroldo »

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #12 Online: Junho 04, 2012, 10:55:16 pm »
Erro ao acessar o banco de dados
SQLState: 42000Error Code: 156Message: [Microsoft][SQL Server Native Client 10.0][SQL Server]Sintaxe incorreta pr¢xima … palavra-chave 'FROM'.


continua a novela..
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6268
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Copiar registros de uma tabela para outra
« Responder #13 Online: Junho 04, 2012, 10:57:10 pm »
coloca em modo debug e copia o que o debug mostra aqui.

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Copiar registros de uma tabela para outra
« Responder #14 Online: Junho 04, 2012, 11:00:15 pm »
parou o erro.. porem nao copia nada
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775