Preencher campos automaticamente

Rodrigo vou por aqui as tabelas relacionada nessa dúvida:

1ª Tabela de contas_bancaria

create table CONTA_BANCARIA
(
ID_CONTA_BANCARIA int not null,
CODIGO_BANCO int not null,
AGENCIA int not null,
DIG_AGENCIA int(1),
CONTA int not null,
DIG_CONTA int(1),
NOME_BANCO varchar(55) not null,
CEP varchar(10),
ENDERECO varchar(60),
BAIRRO varchar(55),
COMPLEMENTO varchar(55),
MUNICIPIO varchar(55),
UF char(2),
TELEFONE varchar(14),
CELULAR varchar(14),
GERENTE varchar(55),
CONSI_FLUXO char(1),
DATA_ABERTURA date,
primary key (ID_CONTA_BANCARIA)
);

Essa tabela têm dados inseridos nela.

2ª é a tabela contas_receber, onde tem uma chave FK da tabela acima, do campo CONTA;

create table CONTAS_RECEBER
(
ID_CONTAS_RECEBER int not null,
CODIGO int,
DATA_CONTA date,
DESCRICAO varchar(60),
CONTA varchar(45),
BANCO varchar(35),
CENTRO_CUSTO varchar(55),
CLIENTE varchar(65),
DOCUMENTO varchar(55),
DATA_VENCIMENTO date,
PREVISAO char(1),
VALOR float,
PROTADOR varchar(55),
ANOTACOES text,
primary key (ID_CONTAS_RECEBER)
);

Através dessa 2ª tabela, eu criei o formulário: Contas a Receber onde tem um campo FK_CONTA que é um select, e outro campo BANCO que é exatamente que quero que ao ser selecionado a conta corrente apareça o nome do Banco relacionado a essa C/C.

Isso ajuda?

Na realidade, o problema esta também na forma que tento explicar, Oh senhor! rsrs…

Abração!

Fred, pelo que eu entendi, vc não quer apenas escolher um banco num select a partir do contas a receber, vc quer tb capturar o nome do banco num outro campo é isso?

Com relação a estes detalhe, eu faria assim:

Tabela de contas bancárias
ID_CONTA_BANCARIA int(11) not null autoincrement

Tabela de contas a receber
ID_CONTA_BANCARIA int(11) not null

Nomes iguais facilitariam a manutenção posterior;
Mesmo tipo de campo INT nas 2 tabelas
Na tabela 1 usaria autoincremento, na tabela 2 não.
Eu padronizo todas as minhas tabelas e campos, sempre minusculo, sem espaço, usando apenas “_” pra separar palavras.

Na tela de contas a receber, apenas este campo como tipo select:
SELECT id_conta_bancaria, nome_conta_bancaria FROM contas_bancarias ORDER BY nome_conta_bancaria)
nome_conta_bancaria vc pode interpretar como o campo que descreve em texto de qual conta se trata, pra exibir pro usuário.
Ideal que a tabela de contas bancárias tenha um índice por este campo também.

O select, no momento do submit do form, vai gravar no contas a receber apenas o ID da conta bancária. Essa deve ser a única informação que vc precisa, pois se precisar pegar algum campo da conta depois, basta vc pesquisar no banco, evitando redundância de dados no banco, a não ser que vc precise mesmo desta descrição, depende do seu caso.

Se vc quiser pegar realmente o nome do banco pra gravar no contas a receber, vc pode criar um evento ajax (onChange) do campo conta bancária no contas a receber. Assim que vc escolher a conta no select, essa função pesquisaria essa descrição no banco e jogaria ela no campo que vc quer no contas a receber.

Rodrigo fiz como combinado, só modifiquei o nome dessa maneira: que da no mesmo.

Tabela de contas bancárias
CONTA int(11) not null autoincrement

Tabela de contas a receber
CONTA int(11) not null

Na tela de contas a receber eu fiz:

SELECT ID_CONTA_BANCARIA, CONTA FROM conta_bancaria ORDER BY CONTA

E esse campo tem um índice sim.

Eu preciso pegar o nome de cada conta e jogar em outro campo, fazendo isso no evento ajax no onChange ficou assim: (O Dário esta me dando uma grande ajuda remota e ele me fez esse select)

$check_sql = “SELECT *”
. " FROM conta_bancaria"
. " WHERE CONTA = ‘{CONTA}’";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]})) // Row found
{
{BANCO} = {rs[0][0]};

}
else // No row found
{

}

Mas o campo BANCO da tabela contas_receber não é atualizado com o nome do banco q que se refere cada conta q o usuário escolher.

Sim, pra não complicar, como eu mudei o nome dos campos na tabela vou por elas aqui atualizadas (Cor vermelho):

create table CONTA_BANCARIA
(
ID_CONTA_BANCARIA int not null,
CODIGO_BANCO int not null,
AGENCIA int not null,
DIG_AGENCIA int(1),
CONTA int not null,
DIG_CONTA int(1),
NOME_BANCO varchar(55) not null,
CEP varchar(10),
ENDERECO varchar(60),
BAIRRO varchar(55),
COMPLEMENTO varchar(55),
MUNICIPIO varchar(55),
UF char(2),
TELEFONE varchar(14),
CELULAR varchar(14),
GERENTE varchar(55),
CONSI_FLUXO char(1),
DATA_ABERTURA date,
primary key (ID_CONTA_BANCARIA)
);

create table CONTAS_RECEBER
(
ID_CONTAS_RECEBER int not null,
CODIGO int,
DATA_CONTA date,
DESCRICAO varchar(60),
CONTA int not null,
BANCO varchar(35),
CENTRO_CUSTO varchar(55),
CLIENTE varchar(65),
DOCUMENTO varchar(55),
DATA_VENCIMENTO date,
PREVISAO char(1),
VALOR float,
PROTADOR varchar(55),
ANOTACOES text,
primary key (ID_CONTAS_RECEBER)
);

Acho que no onChange do select de contas vai ficar mais ou menos assim:
É o nome do banco que vc quer?

$sql = “SELECT NOME_BANCO from CONTA_BANCARIA WHERE ID_CONTA_BANCARIA = {SEU_CAMPO_CONTA_TIPO_SELECT}”;
sc_lookup(rs_conta, $sql);
if (isset({rs_conta[0][0]})) // Row found
{
{BANCO} = {rs_conta[0][0]};
}
else // No row found
{
sc_error_message(“Banco não selecionado”);
}

Aproveita esses trechos de código pra ir estudando. Procura entender linha a linha o que está acontecendo, ajuda muito.

Pessoal eu consegui fazendo dessa forma:

$check_sql = “SELECT nome_banco FROM conta_bancaria WHERE id_conta_bancaria = ‘{CONTA}’”;
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]})) // Row found
{
{BANCO} = {rs[0][0]};

}
else // No row found
{
echo ‘Erro!’;

}

Gostaria de agradecer a paciência do Dário por ter me ensinado a lógica, e pela força do Rodrigo por me encorajar a procurar e entender como funciona o SC.
Obrigado irmãos!

Que bom…

Precisando não se exite em postar, sou novo por aqui e percebi que o pessoal ajuda bastante.

Abraço a todos

Agradecendo ao Dário, rrma e também ao Fred pelo post.

As informações deste post foram EXTREMAMENTE úteis para mim.

Graças a este tópico consegui fazer o campo carregar automaticamente após atualizar outro campo.
Obrigado a todos.

Resolveu este problema?

Resolveu este problema?

Aqui não era um problema apenas uma dúvida como pegar dados de outra tabela e preencher os campos use:

sc_lookup recomendado para ser usado para verificar se registros existem, se for ler uma grande
quantidade de registros usar sc_select

/* Macro sc_lookup */

sc_lookup(cli, "
SELECT
CodigoClienteID,
NomeCliente,
CPF
FROM
clientes
WHERE
CodigoClienteID = {CodigoClienteID}
")

/* Erro no lookup /
if (FALSE === {cli}) {
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({cli})) { /
EOF */

sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");

}
else {

/* Inclua aqui sua rotina de processamento */

     {NomeCliente} = {cli[$j][1]};
     {CPF}= {cli[$j][2]};		 

}

Agora tá dando erro:

Fatal error: Cannot use object of type ADORecordSet_pdo as array in C:\Program Files (x86)\NetMake\v81\wwwroot\scriptcase\app\

1 Curtida