Copiar registros de uma tabela para outra (Resolvido)

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.
”);
}
elseif (empty({resultado})) { /* EOF */
sc_error_message(“Nenhum valor foi retornado pelo banco.
”);
}
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 ?

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();
}

porque não usa direto no insert?

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

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:
[size=8pt]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.[/size]

Poxa… de cara já ví que minhas colunas estavam na ordem errada…
vou consertar e depois refazer a select.
postarei o resultado.
obrigado

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

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.
”);
}
elseif (empty({resultado})) { /* EOF */
sc_error_message(“Nenhum valor foi retornado pelo banco.
”);
}
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}");

Porque você esta usando sc lookup em vez de sc select, mas se fizer o insert direto com select funciona

Irmao… sou novato no ramo.
tem como vc construir a select correta pra facilitar minha vida ?

você estava no caminho no seu último post que você removeu.

execute:

$_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

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_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

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…

coloca em modo debug e copia o que o debug mostra aqui.

parou o erro… porem nao copia nada

Vamos analisar o código do debug.

(mssqlnative): select count(*) from dbo.cotacao_material where idcoleta = 18 (mssqlnative): UPDATE dbo.cotacao_material SET idrm = 10, datacoleta = ‘2012-06-02 13:27:00:000’, idfornecedor = 9, prazo = 1, desconto = 0.00, preco = 0.00 WHERE idcoleta = 18 (mssqlnative): SELECT idfornecedor, razaosocial FROM dbo.tblFornecedores WHERE idfornecedor = 9 ORDER BY razaosocial (mssqlnative): SELECT idprazo, descricao FROM dbo.prazos_pagamento ORDER BY descricao (mssqlnative): 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=10 (mssqlnative): INSERT INTO sc_log (inserted_date, username, application, creator, ip_user, action, description) VALUES (‘2012-06-04 23:14:03’, ‘’, ‘Mapa_de_coleta’, ‘Scriptcase’, ‘192.168.1.100’, ‘update’, ‘–> keys <-- idcoleta : 18||–> fields <-- datacoleta (old) : 2012-06-02 13:27:00.000||datacoleta (new) : 2012-06-02 13:27:00:000’) (mssqlnative): SELECT idcoleta, idrm, convert(char(23),datacoleta,121), idfornecedor, prazo, desconto, preco from dbo.cotacao_material WHERE (idcoleta = 18) order by idcoleta

OBS:
tenho uma tabela mestre chamada cotação, que tem a tabela precos como detalhe. a intensão é pegar os dados de uma outra tabela chamada tblDetalheRM e copiar pra tabela preco que é um form tipo grid view.

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=10

execute esse select ee veja o que retorna diretamente no banco:

SELECT cod_compos_compon,id_descricao_componente,dtqcomprar,idrm,codunidade FROM tblDetalheRM WHERE idrm=10

o insert tem que funcionar baseado nesse select.

19 4 0.00 10 12
178 1 0.00 10 1
1330 4 0.00 10 13
3559 3 0.00 10 1

esta retornando os valores corretos.

executa o comanda diretamente no banco:

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=10

tem que inserir.
verifica se já não tem um registro desse gravados na tabela de destino.