Povoar campo

Boa noite.

Gostaria da ajuda novamente dos colegas.

É seguinte:

Tenho uma consulta formato livre baseada na tabela (tbIP) e criei 3 campos nomeados como: v_pessoa1, v_pessoa2, vpessoa3.

No evento OnRecord, criei um select para verificar se na tabela (tbIPPessoa) existe alguma pessoa cadastrada neste IP e se houver, colocar o conteúdo do campo pessoa (da tabela tbIPPessoa) nos campos criados acima.

As duas tabelas estão relacionadas pelo campo idIP.

Como estou tentando.

/*
**Rotina criada para pesquisar se existe pessoas envolvidas no IP. Caso existam
**devemos povoar os dados nos campos.
*/

//variável que guarda o id do IP
$var1 = {idIP};
//criar um select para encontrar, se houver, as pessoas cadastradas neste IP
$sql = “SELECT
tbIP_idIP,
tbPessoa_idPessoa,
tbSituacao_IdSituacao,
IpPessoaMandado
FROM
tbIpPessoa
WHERE
tbIP_idIP = '”.$var1."’";

sc_select(rs, $sql);

if (false == {rs})
{
// Erro de acesso ao Banco de Dados
}
elseif ({rs}->EOF)
{
// Não encontrou pessoas cadastradas no IP
}
else
{
$campo0 = $rs->fields[0]; //id do IP

//fazer enquanto não for fim de arquivo

1 while (!$rs->EOF)
2 {
3 if($campo0 == $var1) //se o campo da tabela for igual ao idIP
4 {
5 if($rs->fields[2] == 1) // se idSituacao for igual a 1
6 {
7 {v_pessoa1} = $rs->fields[1]; //atribui ao campo o id da pessoa
8 }
9
10 }
11 $rs->MoveNext();
12 }
13 $rs->Close();
14}

O problema está quando é encontrado mais de um registro (só podem ser até no máximo três). Não consegui fazer com que os campos v_pessoa2, vpessoa3 recebam os valores.

Minha lógica para a solução.

  1. Tentei concatenar o nome do campo da consulta na hora de atribuir a ele (campo) o valor retornado no select, mas não consegui. Seria mais ou menos assim: {v_pessoa."$i"} = $rs->fields[1]. Onde o $i seria um contador que seria incrementado e concatenado no campo, e na primeira vez que entrasse no if (linha 5) ele seria {v_pessoa1), na segunda {v_pessoa2}, etc. Só que esta maneira que estou usando para concatenar não está funcionando (v_pessoa."$i"}.

  2. A segunda ideia seria usar array, porém não conheço bem a sua manipulação.

Alguma sugestão?

Obrigado.

Walter,

Tente assim (não testei):

{v_pessoa.$i} = $rs->fields[1];

Bom dia Kleyber.
Já havia tentado assim. Não funcionou.

Obrigado pela sua atenção.

Uma outra solução seria:

    while (!$rs->EOF)
     $nI = 1;
     {
       if($campo0 == $var1) //se o campo da tabela for igual ao idIP
       {
          if($rs->fields[2] == 1) // se idSituacao for igual a 1
          {
               if ($nI == 1) {
                {v_pessoa1} = $rs->fields[1];   //atribui ao campo o id da pessoa
              } else if ($nI == 2) {
                {v_pessoa2} = $rs->fields[1];   //atribui ao campo o id da pessoa
              } else if ($nI == 3) {
                {v_pessoa3} = $rs->fields[1];   //atribui ao campo o id da pessoa
              }
          }
 
        }
          ++$nI;
        $rs->MoveNext();
     }
     $rs->Close();
  }

Aí seria adaptar a tua necessidade.

Oi Kleyber. Eu entendi a sua lógica. Mudei apenas a posição do contador e agora o negócio vai.

Obrigado mais uma vez.

Por nada.