Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Auto Complete com TEntry Não consigo fazer o componente TDBEntry funcionar. Copiei o exemplo do tutor (classe FormDBAutoSelectionView) e... nada! Inicialmente achei que fosse a versão do meu PHP (5.4.17), mas o componente executa perfeitamente a consulta no tutor rodando localmente, portanto usando o mesmo PHP da minha app, cheguei a conclusão que não é isso. Outra possibilidade é o banco de dados, estou usando o ...
JF
Auto Complete com TEntry  
Fechado
Não consigo fazer o componente TDBEntry funcionar. Copiei o exemplo do tutor (classe FormDBAutoSelectionView) e... nada!
Inicialmente achei que fosse a versão do meu PHP (5.4.17), mas o componente executa perfeitamente a consulta no tutor rodando localmente, portanto usando o mesmo PHP da minha app, cheguei a conclusão que não é isso.
Outra possibilidade é o banco de dados, estou usando o PostgreSQL. Alguém tem alguma coisa em relação a isto?
A terceira possibilidade que cogito para o mal funcionamento é o formulário que estou usando. Quero fazer funcionar dentro de um campo de busca em uma listagem de registro e não em um formulário de cadastro. Será isso???
E a última hipótese é estar errando o código que posto a baixo, porém o PHP está com todos os módulos de erro habilitados e não mostra NADA!!

  1. <?php
  2.         // create the form fields
  3.         2318patrimonio = new TEntry('idpatrimonio');
  4.         $pessoalocatario = new TDBEntry('pessoalocatario''cia''Pessoa''pessoa');
  5.         /** Onde:
  6.           * pessoalocatario - widget's name
  7.           * cia                      - nome do banco de dados, configurado em app/config/cia.ini
  8.           * Pessoa               - nome da classe, configurado em app/model/Pessoa.class.php
  9.           * pessoa               - campo da tabela de onde são coletado os dado
  10.           * Onde está o erro?
  11.         */
  12.         2318contrato = new TEntry('idcontrato');
  13.         2318tipo        = new TDBCombo('idtipo''cia','tipo''idtipo''tipo''tipo');
  14.         2318marca    = new TDBCombo('idmarca''cia','marca''idmarca''marca''marca');
  15.         2318modelo   = new TDBCombo('idmodelo''cia','modelo''idmodelo''modelo''modelo');;
  16.         $modelonl   = new TEntry('modelonl');
  17.         $serial         = new TEntry('serial');
  18.  ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (6)


JF

P.S.: Testei no Firefox, Opera e Chrome. Não rolou em nenhum ! :(
JC

Saudações João Leonel, do fragmento que você passou é difícil avaliar, mas da forma que você passou dá a entender que você possui uma classe Pessoa com um atributo pessoa, isso não é redundante???
JF

Oi Jorge.
Minha intenção é sugerir ao usuário um nome já cadastrado na tabela Pessoa. Se uso um TDBCombo eu estaria preso ao que já foi cadastrado. E se o nome buscado não está na lista? O usuário teria de fazer o cadastramento desta pessoa, que não é meu objetivo.
E respondendo a questão: Sim, uso este padrão desde a época do DBASE em que os bancos não eram relacionais e nem tinham o auto complete para ajudar. O editor era o EDIT do DOS :( - Veja os TDBCombo:
EX: Pessoa->idpessoa, Pessoa->pessoa (para o que seria NOME).
Isso me facilita até no SQL como: SELECT idpessoa, pessoa FROM Pessoa WHERE pessoa LIKE 'joão'
Uso o nome Pessoa pois cadastro TUDO ali, como clientes, fornecedores, usuários, pessoas físicas e jurídicas só usando FLAGs para identificá-las. Com isso evito um monte de tabelas (Clientes, Fornecedores, Colaboradores, Usuários) além de evitar a repetições de dados como: Um colaborador não pode ser também Cliente? Um Cliente não pode também ser Fornecedor?
IF

Olá João, faça um simples teste como abaixo somente com o campo pessoalocatario para ver se o sistema busca os seus dados.
Se funcionar, o erro está em outra linha do sistema

  1. <?php
  2. class TesteTDBEntry extends TPage
  3. {
  4.     protected $form;
  5.     
  6.     function __construct()
  7.     {
  8.         parent::__construct();
  9.         
  10.         $this->form = new TQuickForm('teste');
  11.         
  12.         $pessoalocatario = new TDBEntry('pessoalocatario','cia','Pessoa','pessoa');
  13.         
  14.         $this->form->addQuickField('Pessoa'$pessoalocatario280);
  15.         
  16.         $vbox = new TVBox;
  17.         $vbox->add($this->form);
  18.         parent::add($vbox);
  19.         
  20.         
  21.         
  22.     }
  23.     
  24. }
JC

Entendi João, a pergunta da redundância foi mesmo para verificar se realmente existia o atributo pessoa "nome", bora lá testar a sugestão do Ivan.
JF

Ivan, não funcionou :(, mas resolvi!!!!
Até criei um formulário novo com este único campo e.... NADA. O diabo é que simulei (substitui) no tutor e lá funciona :P
Resolvi fazendo a carga manual dos itens. Tem o exemplo na página 124 do livro ou na classe FormDBManualSelectionView do tutor.
Fiquei sem saber a causa, mas quando tiver mais tempo volto a este galho!
Obrigado a todos!!!!

  1. <?php
  2. {...}      
  3.         //  preenche items para o autocomplete de pessoas
  4.         TTransaction::open('cia');
  5.         $repository = new TRepository'Pessoa' );
  6.         $colletion $repository->load(new TCriteria);
  7.         $items = array();
  8.         foreach($colletion as $object)
  9.             $items[$object->idpessoa] = $object->pessoa;
  10.         $pessoalocatario->setCompletionarray_values$items));
  11.         TTransaction::close();
  12. ?>