[RESOLVIDO] - Não consigo executar comando insert into

Pessoal estou usando dentro de um botão run em uma consulta o código abaixo, ele teria que pegar os registros selecionados na consulta e jogar para a tabela “lista” mas me retorna erro:

Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘from lista (secao_lista, id_precos, id_mercado, id_produtos" VALUES "session_id(’ at line 1
INSERT INTO from lista (secao_lista, id_precos, id_mercado, id_produtos" VALUES "session_id() , id_precos, id_mercado, id_produtos

O comando que estou usando é esse, eu sei que tem problema na sintax mas não consegui identificar onde.

sc_exec_sql (“INSERT INTO from lista (secao_lista, id_precos, id_mercado, id_produtos” VALUES “session_id() , id_precos, id_mercado, id_produtos”);

Pessoal consegui fazer funcionar o INSERT INTO, agora porem estou com um problema no seguinte, tenho os dados nos campos e ele não pega os dados e coloca para outra tabela.

Para dar certo pega o Sessão e joga para uma variável local antes:
$sessao_php = session_id();

Verifica se secao_lista é CHAR na base, se for use “$sessao_php” se não for $sessao_php.

sc_exec_sql ("
INSERT INTO FROM lista
(secao_lista,
id_precos,
id_mercado,
id_produtos
VALUES
‘$sessao_php’,
id_precos,
id_mercado,
id_produtos
");

Precisa remover as aspas duplas tb:
sc_exec_sql ("
INSERT INTO FROM lista
(secao_lista,
id_precos,
id_mercado,
id_produtos
VALUES
‘$sessao_php’,
id_precos,
id_mercado,
id_produtos
");

Essa é a solução

sc_exec_sql (“INSERT INTO lista (secao_lista, id_precos, id_mercado, id_produtos) VALUES (’$sessao_php’, id_precos, id_mercado, id_produtos)”);

Porém ele grava o valor da sessao na tabela lista mas os valores dos campos ele não passa. ou seja ele cria os registros e em cada um grava a sessao mas os campos da consulta ele não joga nos campos da tabela de destino.

Passo a passo:

BOTAO RUN - PROCESSAR CONSULTA

Primeiro na Consulta em Eventos (OnScriptInit) colocar:
// BOTÃO RUN
[j] = 0;
[registro_selecionados] = array();

Criar um BOTAO na consulta selecionar tipo = RUN

Dentro do BOTAO no EVENTO (OnRecord) Colocar:
$arr=[j];
[registro_selecionados][$arr]={TabelaConsulta.Movto};
[j]++;

Dentro do BOTAO no EVENTO (OnFinish) Colocar:

$qtde_registros=count([registro_selecionados]);

for($x=0; $x<$qtde_registros; $x++){

$Movto_x = [registro_selecionados][$x];

// Inserir Novo Registro

$sessao_php = session_id();

sc_exec_sql ("
INSERT INTO FROM lista
	 (secao_lista,
	  id_precos,
	  id_mercado,
	  id_produtos
 VALUES
	 '$sessao_php',
	  id_precos,
	  id_mercado,
	  id_produtos
");

} // Final for $x

Esta me retornando um erro

Atenção
Undefined variable: tabelaconsulta_movto

Mas mesmo com o erro, ele registra na tabela, por exemplo, se eu selecionar 3 registros e executa e registra 3 registros na outra tabela, porem só grava os dados da variavel sessão e não os valores que preciso do campo dos registros selecionados.

Fiz um teste adicionando 1 em cada campo para ver se ele caia corretamente

sc_exec_sql (“INSERT INTO lista (secao_lista, id_precos, id_mercado, id_produtos) VALUES (’$sessao_php’, 1, 1, 1)”);

é funcionou, agora quando tento pegar o dado que esta no campo (select) mas numerio na base de dados para jogar para outra tabela não vai, só o código da seção.

Este código eu colo no botao run do onrecord

tabelaconsulta_movto possivelmente é um campo da aplicação do Jailton.
Você deve analisar o código e adequar a sua necessidade.

Veja mais informações em: https://suporte.scriptcase.com.br/index.php?/Knowledgebase/Article/View/17/0/selecionando-os-registros-de-uma-consulta-utilizando-o-botao-run

Lembrando que :
Campos do tipo select inserem o valor interno na base e não o valor exibido.
Exemplo:
“SELECT id, nome FROM Tabela”

  • O nome é exibido na aplicação.
  • O id é inserido na tabela.

Sim isso mesmo, é só um exemplo, você deve adequar agora a sua tabela e campos.

Nossa estou quase largando de mão affff, ele não joga de jeito nenhum o valor dos campos no registro selecionados, ele cria o registro na tabela, grava o valor da seção, agora os campos mesmo que deveriam ser gravados na tabela de destino dos registros selecionados nada.

Sinceramente algo que na plataforma que estou acostumado a fazer é tão simples (VBA) e parece ser tambem no php fica esse entrave.

Não sei o que fazer, se não conseguir fazer um simples registros em uma tabela pegando dados das informações que estou selecionando nem vou tentar fazer outras coisas.

Desculpe o desabafo, mas achei que seria mais simples algo tão simples.

O conteúdo do VALUES não teria q ser variáveis tb?

Criei variaveis para receber o valor do campo Tipo assim $precoid = id_preco
Mas não recebe nada, não chega nada e tal. ai não sei mais o que fazer.

Tentei isso em pegar o valor da variavel e jogar o valor da variavel mas não estou conseguindo setar nada para o campo da tabela que contem o valor que quero.

Por exemplo, quando tento adicionar o valor do campo em uma variavel

[registro_selecionados][$arr]= {id_precos};

Ja fiz com e sem colchetes, e sempre me da retornando que a variavel não foi definida.

Atenção
Undefined variable: id_precos

OBS: Minha consulta é uma junção usando inner join de 3 tabelas, não sei se isso faz diferença, mas já tentei tambem por exemplo colocar na frente o nome da tabela tipo: Preco1.id_precos mas não resolveu e nem da resultado.

id_precos é um campo da sua aplicação?

Sim, 3 campos de id_* que tenho que jogar para uma outra tabela que contem os mesmos campos.

Com mais registros só criar mais arrays para pegar eles:
OnScriptInit
[registro_selecionados_id1] = array();
[registro_selecionados_id2] = array();
[registro_selecionados_id3] = array();

OnRecord
[registro_selecionados_id1][$arr]={SuaTabela.NumeroMovto};
[registro_selecionados_id2][$arr]={SuaTabela.DataBoleto};
[registro_selecionados_id3][$arr]={SuaTabela.Operacao};

OnFinish
for($x=0; $x<$qtde_registros; $x++){

$Movto_x = [registro selecionados_id1][$x];
$DataBoleto_x = [registro selecionados_id2][$x];
$Operação_x = [registro selecionados_id3][$x];

Agora até usei o código que esta no proprio scriptcase e mudei e nada, a mesma coisa, inclusive ele cria os registros da quantidade de itens que selecionei na consulta, quando abro a tabela os campos estão null sem nada mas com o registro criado.

Penso que se ele cria a quantidade de registros na outra tabela de acordo com os itens que selecionei na consulta quer dizer que a arrar e o acesso a tabela esta funcionando, se eu colocar um valor fixo no lugar do campo que quero puxar os dados, por exemplo eu coloquei 1 para os campos receberem, blz funciona perfeito, agora quero que os valores dos campos setados recebam os dados dos campos indicados e isso não funciona, ou estou fazendo algo muito errado ou isso é bug da ferramenta.

Preciso de ajuda.

// SQL statement parameters
$insert_table = ‘lista’; // Table name
$insert_fields = array( // Field list, add as many as needed
‘id_precos’ => ‘id_precos’,
‘id_produtos’ => ‘id_produtos’,
‘id_mercado’ => ‘id_mercado’,

);

FIZ ASSIM E AI RECEBE OS DADOS

‘id_precos’ => 1,
‘id_produtos’ => 1,
‘id_mercado’ => 1,

MAS NÃO É ISSO, TEM QUE PEGAR OS DADOS DOS CAMPOS DOS REGISTROS SELECIONADOS

// Insert record
$insert_sql = ‘INSERT INTO ’ . $insert_table
. ’ (’ . implode(’, ‘, array_keys($insert_fields)) . ‘)’
. ’ VALUES (’ . implode(’, ', array_values($insert_fields)) . ‘)’;

sc_exec_sql($insert_sql);

Faz o seguinte:

– OnScriptInit

[registro_selecionados_id1] = array();
[registro_selecionados_id2] = array();
[registro_selecionados_id3] = array();
[counter] = 0;

Configura todas as variáveis globais para SAÍDA

– OnRecord

$i = [counter];
[registro_selecionados_id1][$i]={SuaTabela.NumeroMovto};
[registro_selecionados_id2][$i]={SuaTabela.DataBoleto};
[registro_selecionados_id3][$i]={SuaTabela.Operacao};
[counter]++;

– OnFinish

$qtde = count(registro_selecionados_id1);
for($x=0; $x<$qtde; $x++){

$sql = "INSERT INTO tabela (campo1,campo2,campo3) VALUES ( ’ “.registro_selecionados_id1.” ’ , ’ “.registro_selecionados_id2.” ’ , ’ “.registro_selecionados_id3.” ’ ");
sc_exec_sql($sql);

}
sc_reset_global([registro_selecionados_id1],[registro_selecionados_id2] ,[registro_selecionados_id3],[counter]);

Possivelmente, com isso aí em cima, funciona corretamente.

Na consulta tem a parte SQL que gera a consulta, copia a SQL inteira e cola aqui pra gente ver, e lista os campos que estão aparecendo visualmente no grid da consulta.

Ai com esses dados consigo ter precisão, para montar o exemplo.

A solução do Ronyan Alves tem me retornado erro.

Jailton abaixo o que me pediu.

Produtos1.foto_produtos
Precos1.id_produtos
Precos1.id_mercado
Precos1.preco_produto
Precos1.data_atualizacao
Produtos1.tipo_produtos
Produtos1.subtipo_produtos
Mercado1.municipio_mercado
secao
Precos1.id_precos

SELECT
Precos1.id_precos,
Precos1.id_produtos,
Precos1.id_mercado,
Precos1.preco_produto,
Precos1.data_atualizacao,
Precos1.status_precos,
Produtos1.id_produtos,
Produtos1.descricao_produtos,
Produtos1.medida_produtos,
Produtos1.foto_produtos,
Produtos1.tipo_produtos,
Produtos1.subtipo_produtos,
Produtos1.status_produtos,
Mercado1.id_mercado,
Mercado1.nome_mercado,
Mercado1.logo_mercado,
Mercado1.municipio_mercado,
Mercado1.uf_mercado,
Mercado1.status_mercado
FROM
precos Precos1 INNER JOIN produtos Produtos1 ON Precos1.id_produtos = Produtos1.id_produtos
INNER JOIN mercado Mercado1 ON Precos1.id_mercado = Mercado1.id_mercado
WHERE
(Precos1.status_precos = ‘Ativo’) AND
(Produtos1.status_produtos = ‘Ativo’)