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. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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. function __construct()
  6. {
  7. parent::__construct();
  8. $this->form = new TQuickForm('teste');
  9. $pessoalocatario = new TDBEntry('pessoalocatario','cia','Pessoa','pessoa');
  10. $this->form->addQuickField('Pessoa', $pessoalocatario, 280);
  11. $vbox = new TVBox;
  12. $vbox->add($this->form);
  13. parent::add($vbox);
  14. }
  15. }
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->setCompletion( array_values( $items));
  11. TTransaction::close();
  12. ?>