Lançado Adianti Framework 7.6!
Clique aqui para saber mais
comparar campos com registros ja cadastrados Ola Pessoal.... Preciso de uma ajuda... Como procedo para que no ato de gravar os dados eu possa avaliar se os campos digitados já não pertencem a um registro gravado anteriormente ? Exemplo dos campos: Empresa_ID * Data_Cadastro * Operador_ID * Sequencia Caso já exista algo no banco gravado anteriormente o sistema mostra que já possui um registro..... Caso não tenha sido gra...
MC
comparar campos com registros ja cadastrados  
Ola Pessoal....

Preciso de uma ajuda...
Como procedo para que no ato de gravar os dados eu possa avaliar se os campos digitados já não pertencem a um registro gravado anteriormente ?

Exemplo dos campos:

Empresa_ID *
Data_Cadastro *
Operador_ID *
Sequencia

Caso já exista algo no banco gravado anteriormente o sistema mostra que já possui um registro.....
Caso não tenha sido gravado vem um numero sequencia iniciando do "01"

Estou utilizando Postgres e criei um índice para que talvez pudesse facilitar tal analise....
Como estou iniciando no PHP e Adianti estou tento um pouco de dificuldade....
Caso algum dos amigos tenha uma sugestão, por favor, agradeço..

Att
Marcelo Carvalho

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (7)


MC

Fiz a inclusao //select no metodo onSave


  1. <?php
  2.     public function onSave$param )
  3.     {
  4.         try
  5.         {
  6.             TTransaction::open('loterica'); // open a transaction
  7.             
  8.             /**
  9.             // Enable Debug logger for SQL operations inside the transaction
  10.             TTransaction::setLogger(new TLoggerSTD); // standard output
  11.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  12.             **/
  13.             
  14.             $this->form->validate(); // validate form data
  15.             
  16.             $object = new VinculoCxOpTrm;  // create an empty object
  17.             $data $this->form->getData(); // get form data as array
  18.             $object->fromArray( (array) $data); // load the object with data
  19.             $object->store(); // save the object
  20.             
  21.             //select
  22.             $result '';
  23.             $sql "select * from vinculo_cx_op_trm where (id_empresa = {$param['id_empresa']}) and (dt_operacao = '{$param['dt_operacao']}') and (id_caixa = {$param['id_caixa']}) and (id_operador = {$param['id_operador']}) and (id_terminal = {$param['id_terminal']})";
  24.             $conn TConnection::open('loterica'); // abre uma conexão
  25.             // executa a instrução SQL
  26.             $result $conn->query($sql);
  27.             $resp $result->fetchObject(); 
  28.                   
  29.             // get the generated id
  30.             $data->id $object->id;
  31.             
  32.             $this->form->setData($data); // fill form data
  33.             TTransaction::close(); // close the transaction
  34.             
  35.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved')); // success message
  36.             $this->onReload(); // reload the listing
  37.         }
  38.         catch (Exception $e// in case of exception
  39.         {
  40.             new TMessage('error'$e->getMessage()); // shows the exception error message
  41.             $this->form->setData$this->form->getData() ); // keep form data
  42.             TTransaction::rollback(); // undo all pending operations
  43.         }
  44.     }
  45. ?>


E estou recebendo o erro "Object of class PDOStatement could not be converted to string" Quando comento as linhas $result = $conn->query($sql); $resp = $result->fetchObject(); grava normalmente


NR

Use as classes do Adianti para realizar a consulta:
  1. <?php
  2. VinculoCxOpTrm::where('id_empresa','=',$param['id_empresa'])->where('dt_operacao','=',$param['dt_operacao'])->where('id_caixa','=',$param['id_caixa'])->where('id_operador','=',$param['id_operador'])->where('id_terminal','=',$param['id_terminal'])->load();
  3. ?>
MC

Nataniel obrigado

Aquela forma que eu fiz ate não deu mais o erro....
Porem a variável $result eu não consigo saber oque esta apresentando...
Meu intuito é verificar se os campos digitados na tela, já estão gravados em no Banco de Dados...

Não sei se essa forma é a mais indicada....

Essa sua sugestão, devo colocar na classe de modelo do VinculoCxOpTrm ?
Se for isso como devo chama-la ???
NR

Marcelo, pode substituir o sql manual pelo código que passei, dentro da onSave mesmo. A função load retorna um array de objetos, então pode testá-la diretamente:
  1. <?php
  2. //onsave
  3. $registros_bd VinculoCxOpTrm::where('id_empresa','=',$param['id_empresa'])->where('dt_operacao','=',$param['dt_operacao'])->where('id_caixa','=',$param['id_caixa'])->where('id_operador','=',$param['id_operador'])->where('id_terminal','=',$param['id_terminal'])->load();
  4. if ($registros_bd)
  5. {
  6.     throw new Exception('Dados repetidos');
  7. }
  8. ?>
MC

Ola Nataniel
Só agora pude testar sua dica...

Exclui todos os registros da tabela, digitei os campos para inclusão, porem no ato da gravação gera a mensagem "Dados Repetidos"...

Ou seja, esta validando, porem não aceita inclusão na base de dados mesmo que não tenha nenhum dado registrado....tabela zerada....

Apenas copiei o seu código e inseri na minha onSave

Tem alguma ideia ?? Sugestão ??

Att
AF

Bom dia Marcelo.

Fiz no model da classe onde precisa verificar dessa forma.

Veja se te ajuda.

public function onAfterStore($object)
{

$this->contas = new Contas($object->id_conta);

if ($this->contas->nome_conta == 'MENS')
{
$criteria = new TCriteria;
$criteria->add(new TFilter('mes_referencia', '=', $object->mes_referencia));
$criteria->add(new TFilter('ano_referencia', '=', $object->ano_referencia));
$criteria->add(new TFilter('id_mensalista', '=', $object->id_mensalista));
$criteria->add(new TFilter('id_conta', '=', $object->id_conta));

$repository = new TRepository('Lancamentos');
$count = $repository->count($criteria);
if ($count > 1)
{
throw new Exception('Já existe mensalidade paga com esse vencimento.');
}
}
}

Atenciosamente,
Ailton Furtado
NR

Marcelo, a verificação está sendo feita após a função store. Ou seja, está verificando após gravar, por isso sempre encontra os dados.