Autor Tópico: [RESOLVIDO] - Ir buscar dados a outra tabela  (Lida 206 vezes)

Vandacardoso

  • Avançado
  • ****
  • Mensagens: 272
[RESOLVIDO] - Ir buscar dados a outra tabela
« Online: Junho 29, 2016, 09:03:28 am »
Bom dia,

Será que alguém me pode ajudar? Sei que isto pode ser feito com o relacionamento entre tabelas mas só me está a dar error #1452 quando tento criar a chave estrangeira.
É o seguinte: tenho 2 tabelas - tabelageral e tabelageral_novos. Na tabelageral_novos tenho os dados do utente atualizados e tem um campo 'dadosatualizados' onde aparece Sim.  O ID de cada uma das tabelas é igual.
Como é que posso fazer aparecer na tabelageral (que é a principal) no campo dadosatualizados a informação que foi preenchida na outra tabela? Isto quando estou a ver os registos para saber se aquele utente tem os dados atualizados.
Qual é a melhor solução?
« Última modificação: Junho 29, 2016, 03:06:20 pm por Ronyan Alves »

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Ir buscar dados a outra tabela
« Responder #1 Online: Junho 29, 2016, 09:14:19 am »
Se for usar em consultas só criar um SQL (INNER JOIN) entre as tabelas.

Se for usar em um controle ou formulário, crie um campo virtual com o tipo de dado do campo: número, texto, data, etc, marque ele
como 'label' e depois no OnLoad ou eventos Ajax, use o sc_lookup para trazer o valor do campo da outra tabela e colocar neste  campo.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Vandacardoso

  • Avançado
  • ****
  • Mensagens: 272
Re:Ir buscar dados a outra tabela
« Responder #2 Online: Junho 29, 2016, 11:16:58 am »
Se for usar em consultas só criar um SQL (INNER JOIN) entre as tabelas.

Se for usar em um controle ou formulário, crie um campo virtual com o tipo de dado do campo: número, texto, data, etc, marque ele
como 'label' e depois no OnLoad ou eventos Ajax, use o sc_lookup para trazer o valor do campo da outra tabela e colocar neste  campo.

Obrigada Jailton. Estou a tentar fazer isso num formulário que é Mestre detalhe.
Tentei fazer dessa forma com um SQl que já tinha feito no SQL Builder. E deu certo.

sc_lookup(dadosact, "select   tabelageral.ID, tabelageral_novos.ID,tabelageral_novos.dadosatualizados FROM tabelageral LEFT OUTER JOIN tabelageral_novos ON tabelageral.ID = tabelageral_novos.ID");


Mas ele está a mostrar a palavra Array no campo dadosact (campo que criei do tipo label). O que estou a fazer mal?

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Ir buscar dados a outra tabela
« Responder #3 Online: Junho 29, 2016, 11:30:47 am »
// Colocar no OnLoadRecord do filho do Mestre.

/* Macro sc_lookup */

$sql ="
SELECT
   tabelageral.ID,
   tabelageral_novos.ID,
   tabelageral_novos.dadosatualizados
FROM
    tabelageral LEFT OUTER JOIN tabelageral_novos ON tabelageral.ID = tabelageral_novos.ID
";

sc_lookup(tb_novos, $sql)

/* Erro no lookup */
if (FALSE === {tb_novos}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({tb_novos})) { /* EOF */

   // CONTINUA...
}
else {

   /* Inclua aqui sua rotina de processamento */

   {dadosact} = {tb_novos[0][2]}; // << Veja se o nome do campo que vai receber o valor é {dadosact}
   
}
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Vandacardoso

  • Avançado
  • ****
  • Mensagens: 272
Re:Ir buscar dados a outra tabela
« Responder #4 Online: Junho 29, 2016, 12:00:49 pm »
// Colocar no OnLoadRecord do filho do Mestre.

/* Macro sc_lookup */

$sql ="
SELECT
   tabelageral.ID,
   tabelageral_novos.ID,
   tabelageral_novos.dadosatualizados
FROM
    tabelageral LEFT OUTER JOIN tabelageral_novos ON tabelageral.ID = tabelageral_novos.ID
";

sc_lookup(tb_novos, $sql)

/* Erro no lookup */
if (FALSE === {tb_novos}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({tb_novos})) { /* EOF */

   // CONTINUA...
}
else {

   /* Inclua aqui sua rotina de processamento */

   {dadosact} = {tb_novos[0][2]}; // << Veja se o nome do campo que vai receber o valor é {dadosact}
   
}

Jailton,

Não estou a entender o que é tb_novos (é a minha tabelageral_novos?).
Quando fala em rotina é para dizer em que coluna está o campo dadosatualizados?

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Ir buscar dados a outra tabela
« Responder #5 Online: Junho 29, 2016, 12:11:50 pm »
tb_novos  é só uma variável qualquer para receber os dados da sql.

Se concentra no que tá em $sql =

E lá embaixo no campo que vai receber o retorno: {dadosact} veja se é esse mesmo.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Vandacardoso

  • Avançado
  • ****
  • Mensagens: 272
Re:Ir buscar dados a outra tabela
« Responder #6 Online: Junho 29, 2016, 12:24:56 pm »
tb_novos  é só uma variável qualquer para receber os dados da sql.

Se concentra no que tá em $sql =

E lá embaixo no campo que vai receber o retorno: {dadosact} veja se é esse mesmo.

Entendi. E sim, o campo que vai receber o valor é {dadosact}.
Mas não estou a entender o que quer dizer com rotina de processamento.

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Ir buscar dados a outra tabela
« Responder #7 Online: Junho 29, 2016, 12:52:30 pm »
/* esses símbolos em PHP /* são usados para Observação, você pode colocar qualquer coisa que quiser neles, não são relevantes.

No seu SQL também esta faltando um WHERE para filtrar o ID da tabela Geral que esta aberta no momento.

WHERE
    tabelageral.ID = {ID}
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Vandacardoso

  • Avançado
  • ****
  • Mensagens: 272
Re:Ir buscar dados a outra tabela
« Responder #8 Online: Junho 29, 2016, 01:08:36 pm »
/* esses símbolos em PHP /* são usados para Observação, você pode colocar qualquer coisa que quiser neles, não são relevantes.

No seu SQL também esta faltando um WHERE para filtrar o ID da tabela Geral que esta aberta no momento.

WHERE
    tabelageral.ID = {ID}

Jailton deu certo!!!!!
Faltava mesmo isso. Obrigada. Agora já estão a aparecer os registos que foram atualizados na tabelageral_novos.
Obrigada pela sua ajuda!!!!! :-)