Resolvido * Exibir valor do campo de uma tabela em outro form

Boas,

Estou com a seguinte dificuldade:
Criei o seguinte método:
sc_lookup(dtdescricao,“SELECT descricao from tb_produtos
WHERE id_produtos = {id_produtos}”);

if(!empty({dtdescricao}))
{
{descricao} = {dtdescricao[0][0]};
}

else
{
{descricao} = " Produto não cadastrado!";
}
Coloquei ele no evento OnChange e OnLoad.
Até aqui td bem. Ocorre q, depois de efetuado o cadastrado, ao sair e entrar novamente no cadastro, a descrição desaparece. O campo é um label. O q acontece? Esqueci alguma coisa?
Abraços

Adriano, boa tarde!

Coloque o mesmo código no evento onRefresh, acredito que isso deverá resolver o problema…
Se não resolver, experimente nos eventos onAfterUpdate e onAfterInsert…

Abraços

explique melhor…
Isso é um cadastro de que???
se for tipo um “pedido de venda” onde vc coloca o codigo do produto e ele traz a descrição do produto pra tela… é melhor você criar somente um evento Ajax (onchange) do campo “código” e colocar esse mesmo código que vc fez.

pq… se vc colocou esse código no onload… ele vai tentar atualizar esse campo sempre que ele for exibir o cadastro… pode ser por isso que ele tá sumindo!!

Att

Jaqueline,

O que eu preciso é que apareça a descrição do produto que estou cadastrando, buscando-a de outra tabela chamada produtos, e quando o usuário for pesquisar os preços nesta outra tabela apareça a descrição do produto. Como não existe a necessidade de manter a descrição nesta tabela, eu utilizei um campo do tipo label, só p/ que apareça a descrição do produto. Eu aproveitei um código pronto e já conferi tudo. Não estou encontrando onde está o erro.
Fiz o que você sugeriu e não funcionou.

Robson,

Segui a sua sugestão e não funcionou…
Alguma sugestão?

Abs a ambos e obrigado pela ajuda!

Eu estou com um problema parecido… a instrução que estou dando funciona perfeitamente no onfocus, mais quando uso o onchange não funciona… ele não carrega o campo. por exemplo, ao digitar o pedido, quero que venha o valor gravado em uma tabela. Quando dou o SQL no onfocus, ele seta o valor corretamente, copiei e colei o mesmo SQL agora em um evento onchange, ele não seta o valor (o campo fica em branco). O que poderia ser ??? Obrigado e aguardo a atenção de vocês.

Posta seu código

Agora, No caso do OnFocus, que foi outra tentativa que eu fiz, o mesmo não passa os parametros nem para campo Numero Auto-Complet (Ajax) nem para campo SELECT. Passa somente para o campo Numerico. Ou seja, eu consigo “passar” o ID mais para consulta dele na tela, não consigo fazer com que apareça o LOOKUP, ou seja, o NOMEDOCLIENTE, para ficar mais amigavel para o usuario. Tentei fazer uma aplicação de captura para quando o valor setado no campo Id_cliente aparecer, que carregasse o NomeDoCliente, mais mesmo assim não aparece…O On-Change, nem carregou.

Segue o codigo funcionando no on_focus, com os problemas acima citados:

/* Macro sc_lookup */

sc_select(codigo, "
SELECT
adm_os.id_cliente,
adm_clientes.ClienteId,
adm_clientes.NomeCliente
FROM
adm_os,
adm_clientes
WHERE
(adm_os.id = ‘{qru}’)
");

while (!$codigo->EOF) {
/* Utilize a linha abaixo como exemplo
	para atribuir os valores do banco a seus campos. */

	{id_cliente} = $codigo->fields[0];


	$codigo->MoveNext();
}
$codigo->Close();

Se puder me dar uma mão, sou eternamente grato…estou quebrando a cabeça com essa duplicação de dados / Orçamento / Novo Orçamento (duplicando dados, com Novo ID auto increment

Deixa eu ver se entendi.

Você chega no seu escritório de manhã e cria uma lista de produtos do dia que os parceiros pode tem acesso para pedir somente produtos desta lista. Cada conjunto de pedidos desta lista - um conjunto de cada cliente - gera um pedido.

É isso?

Este campo que vc tem SELECT é criado ou baseado em tabela?

baseado na tabela… eu dou carga em um ID de orçamento mais o mesmo não carrega se o campo que ira receber os dados estiver SELECT.

Tenta usar o botão do tipo RUN

Tentei fazer um botão PHP com o mesmo codigo do on focus, ele busca certinho (no echo) mais não carrega ao voltar para o formulario o campo ID_Cliente. Como seria esse botão RUN ???

Ou melhor explicando, se tivesse no Atribuir Valores / Valor de Banco de Dados, um AUTO-INCREMENT na atualização tb, eu chamaria com uma consulta o Orçamento que necessito e, ao atualiza-lo, ele viria igualzinho ao outro, so que com o ID alterado. Entendeu ?

Eu ainda não usei o Botão do Tipo RUN em consultas, mas acho que ele resolve o seu problema:

No código do botão, vc faz uma sc_lookup para ler o último ID da tabela orçamento e manda uma sc_sql_exec para gravar no banco com um incremento no ID de retorno. Esse código vai ser executado em cada linha marcada. Assim vc duplica somente os produtos que vc quer com novo ID de orçamento. Depois busca o novo orçamento.

Uma primeira idéia poderia ser algo como isto:

tab_orcamento
ID
DATA

tab_orcamento_itens
ID
ID_ORCAMENTO
ID_PRODUTO
QUANTIDADE
VALORUNIT

Aqui vc escreve uma sc_exec_sql gerando um novo orçamento

sc_lookup retornando 31 como último id de orçamento

$orcamento = 31+1

Aqui vc faz outra sc_exec_sql gravando os produtos marcado na grid na tabela de itens do orçamento usando $orcamento para o campo ID_ORCAMENTO

Não analisei concorrência ou outro impacto da idéia, lendo o seu relato foi o que veio na cabeça. Tem que ir implementando para ver. Mas acho que a forma mais fácil vai ser usando o Botão do tipo RUN na grid.

Pra ficar melhor, não preciso acessar da consulta mais sim, direto do cadastro. Por ex. abri o Orçamento ID 31, eu enxergo ele todo na tela (todos os campos da tabela), seria um botão DUPLICAR ORÇAMENTO, onde ele repetiria todo o mesmo orçamento somente acrescentando um auto-increment (ultimo ID +1) com os mesmos dados da tela. Teria uma forma mais facil de fazer isso ?

Tu pode colocar todos o código no onload de um controle, que após fazer tudo o que tem que fazer redireciona para uma grid abrindo o último orçamento.

Tá, ai vc ta pegando o ID do cliente. Como que tu tá passando o parâmetro e para que tipo de aplicação.

Acho que tem que trabalhar essa:

sc_select(meus_dados, “SELECT id, id_cliente FROM adm_os”);

Isso ai está trazendo todos os registro da tabela.

Se quer pegar o último use o LIMIT com ordenação DESC

Consegui cara: segue como ficou o Botão: (So está re-direcionando errado - abrindo o ID antigo, mais isso eu vou dar uma olhada melhor):

sc_select(meus_dados, “SELECT id, id_cliente FROM adm_os WHERE id={id}”);

if (FALSE === {meus_dados}) {sc_erro_mensagem(“Ocorreu um erro no acesso ao banco de dados.
”);
} else { while (!$meus_dados->EOF) {

/* Utilize a linha abaixo como exemplo para atribuir os valores do banco a seus campos. */

$chave=$meus_dados->fields[0];
$id_cliente=$meus_dados->fields[1];

sc_exec_sql(“INSERT INTO adm_os (id_cliente) VALUES ($id_cliente)”);

$meus_dados->MoveNext(); }
$meus_dados->Close(); }

/* Macro sc_lookup */

sc_lookup(ult_id, “SELECT max(id) FROM adm_os FROM adm_os”);
$max_id=$ult_id[0][0];
sc_redir(cad_os.php,where_id="$max_id");

Se voce souber como faço para direcionar corretamente para o ultimo ID Gravado (ID Duplicado), me dê uma luz por favor. …Obrigado pela mão !!!

Isso tá errado:
sc_redir(cad_os.php,where_id="$max_id");

sc_redir(cad_os.php?PARAMENTRO=$max_id);

Onde parametro é a variavel que espera valor na aplicacao chamada.