Oracle - Load Criteria - Não trás resultado Boa noite pessoal, Estava eu fazendo a configuração para minha aplicação funcionar com Oracle. Depois de muita cabeçada eu consegui habilitar o funcionamento. Porém, ao clicar em alguma "Control"(CcustList.class.php), percebi que nenhuma informação era carregada. Colocando um print_r na variável, tenho o seguinte resultado: ...
HJ
Oracle - Load Criteria - Não trás resultado  
Boa noite pessoal,

Estava eu fazendo a configuração para minha aplicação funcionar com Oracle. Depois de muita cabeçada eu consegui habilitar o funcionamento.
Porém, ao clicar em alguma "Control"(CcustList.class.php), percebi que nenhuma informação era carregada.
Colocando um print_r na variável, tenho o seguinte resultado:
 
  1. <?php
  2. $repository = new TRepository('Ccust');
  3. $limit = 10;
  4. // creates a criteria
  5. $criteria = new TCriteria;
  6. // default order
  7. if (empty($param['order']))
  8. {
  9. $param['order'] = 'codigo';
  10. $param['direction'] = 'asc';
  11. }
  12. $criteria->setProperties($param); // order, offset
  13. $criteria->setProperty('limit', $limit);
  14. ...
  15. // load the objects according to criteria
  16. $objects = $repository->load($criteria, FALSE);
  17. print_r($objects);
  18. ?>

Resultado:
Array ( [0] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [1] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [2] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [3] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [4] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [5] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [6] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [7] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [8] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) [9] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) )

Porém, caso eu faça um comando a parte do framework, o resultado é obtido, conforme abaixo:
 
  1. <?php
  2. $stmt = $con->prepare($sql);
  3. $stmt->execute();
  4. $results = $stmt->fetchAll();
  5. print_r($results);
  6. ?>

Resultado:
Array ( [0] => Array ( [CODIGO] => 10151 [0] => 10151 [DESCRICAO] => DIRETORIA [1] => DIRETORIA [TPOCC_COD] => 00 [2] => 00 ) [1] => Array ( [CODIGO] => 10152 [0] => 10152 [DESCRICAO] => JURIDICO [1] => JURIDICO [TPOCC_COD] => 00 [2] => 00 )

Alguém já passou por isso? No Mysql a aplicação estava funcionando perfeitamente.
Obrigado e no aguardo.

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 (10)


HJ

Acrescentando, abaixo o resultado da mesma execução acima, só que na base MYSQL:
Resultado:
Array ( [0] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => Array ( [codigo] => 001001 [descricao] => Adminstração [tpocc_cod] => 01 ) [vdata:protected] => [attributes:protected] => Array ( [0] => descricao [1] => tpocc_cod ) ) )
HJ

Pessoal, descobri que é por causa do case. O Oracle parece funcionar apenas com a referente aos campos em MAIÚSCULO.
O problema é que TODAS as minhas models estão em minusculo. Vejam abaixo:
 
  1. <?php
  2. class Ccust extends TRecord
  3. {
  4. const TABLENAME = 'ccust';
  5. const PRIMARYKEY= 'codigo';
  6. const IDPOLICY = 'max'; // {max, serial}
  7. private $tpocc;
  8. /**
  9. * Constructor method
  10. */
  11. public function __construct($codigo = NULL, $callObjectLoad = TRUE)
  12. {
  13. parent::__construct($codigo, $callObjectLoad);
  14. parent::addAttribute('descricao');
  15. parent::addAttribute('tpocc_cod');
  16. }
  17. ...
  18. ?>


Ao alterar para MAIÚSCULO os campos da tabela, o print_r que coloquei apenas para debugar o problema começa a trazer informações, vejam:
 
  1. <?php
  2. class Ccust extends TRecord
  3. {
  4. const TABLENAME = 'ccust';
  5. const PRIMARYKEY= 'CODIGO'; // ALTERADO PARA MAIÚSCULO
  6. const IDPOLICY = 'max'; // {max, serial}
  7. private $tpocc;
  8. /**
  9. * Constructor method
  10. */
  11. public function __construct($codigo = NULL, $callObjectLoad = TRUE)
  12. {
  13. parent::__construct($codigo, $callObjectLoad);
  14. parent::addAttribute('DESCRICAO');
  15. parent::addAttribute('TPOCC_COD');
  16. }
  17. ...
  18. ?>

Resultado após a alteração acima no model CCUST.:
Array ( [0] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => Array ( [CODIGO] => 10151 [DESCRICAO] => DIRETORIA [TPOCC_COD] => 00 ) [vdata:protected] => [attributes:protected] => Array ( [0] => DESCRICAO [1] => TPOCC_COD ) ) [1] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => Array ( [CODIGO] => 10152 [DESCRICAO] => JURIDICO [TPOCC_COD] => 00 ) [vdata:protected] => [attributes:protected] => Array ( [0] => DESCRICAO [1] => TPOCC_COD ) ) [2] => Ccust Object ( [tpocc:Ccust:private] => [data:protected] => Array ( [CODIGO] => 10153 [DESCRICAO] => PESSOAL [TPOCC_COD] => 00 )

Ou seja, o conteúdo existente na tabela começou a ser listado.
Terei mesmo então que alterar TODOS OS MEUS MODELS?

Porém o problema não se finalizou por ai. Apesar de o meu "print_r" estar listado o conteúdo da tabela, meu GRIDVIEW continua não listando NADA.
Sabem a solução para este problema?

Agradeço muito quem puder me ajudar, pois estou já com o projeto atrasado.
Abraços
HJ

Para ajudar alguém que passe pelo mesmo, a solução foi refazer os models, lists e forms, desta vez, sempre se referenciando ao nome dos campos em MAIUSCULO. Não sei se foi a melhor das soluções, já que terei muito trabalho alterando todos os já criados(que não são poucos). Porém foi a solução que encontrei e funcionou.
Exemplo:
 
  1. <?php
  2. // creates the datagrid columns
  3. $column_check = new TDataGridColumn('check', '', 'center');
  4. $column_CODIGO = new TDataGridColumn('CODIGO', 'Codigo', 'left');
  5. $column_DESCRICAO = new TDataGridColumn('DESCRICAO', 'Descricao', 'left');
  6. $column_TPOCC_COD = new TDataGridColumn('TPOCC_COD', 'Tipo', 'left');
  7. // add the columns to the DataGrid
  8. $this->datagrid->addColumn($column_check);
  9. $this->datagrid->addColumn($column_CODIGO);
  10. $this->datagrid->addColumn($column_DESCRICAO);
  11. $this->datagrid->addColumn($column_TPOCC_COD);
  12. ?>
DR

Uma solução para esta situação é adicionar a linha
 
  1. <?php $conn->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); // to identify that our database use lowercase ?>
após a criação da conexão na classe TConnection.php (Sei que não é o lugar correto, mas resolve o problema para quem usa Oracle).
SG

Olá,

Estou tendo um problema semelhante.

Ao usar o metodo $repository->load(), o dados dos atributos retornados estão vazios nos atributos do objeto:

Array ( [0] => TbLocais Object ( [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => ATIVO [1] => DESCLOCAL ) ) [1] => TbLocais Object ( [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => ATIVO [1] => DESCLOCAL ) ) [2] => TbLocais Object ( [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => ATIVO [1] => DESCLOCAL ) ) )


classe TRecord Tb

 
  1. <?php
  2. class TbLocais extends TRecord
  3. {
  4. const TABLENAME = 'TB_LOCAIS';
  5. const PRIMARYKEY = 'IDLOC';
  6. const IDPOLICY = 'max'; // {max, serial}
  7. /**
  8. * Constructor method
  9. */
  10. public function __construct($id = NULL, $callObjectLoad = TRUE)
  11. {
  12. parent::__construct($id, $callObjectLoad);
  13. parent::addAttribute('ATIVO');
  14. parent::addAttribute('DESCLOCAL');
  15. }
  16. }
  17. ?>



Metodo onReload na Classe de Controle TbLocaisList.class.php :

public function onReload($param = NULL) { try { // open a transaction with database 'ctatst' TTransaction::open(self::$database); // creates a repository for TbLocais $repository = new TRepository(self::$activeRecord); $limit = 20; // creates a criteria $criteria = new TCriteria; if (empty($param['order'])) { $param['order'] = 'IDLOC'; } if (empty($param['direction'])) { $param['direction'] = 'desc'; } $criteria->setProperties($param); // order, offset $criteria->setProperty('limit', $limit); if($filters = TSession::getValue(__CLASS__.'_filters')) { foreach ($filters as $filter) { $criteria->add($filter); } } // load the objects according to criteria $objects = $repository->load($criteria, FALSE); print_r($objects); $this->datagrid->clear(); if ($objects) { // iterate the collection of active records foreach ($objects as $object) { // add the object inside the datagrid $this->datagrid->addItem($object); } } // reset the criteria for record count $criteria->resetProperties(); $count= $repository->count($criteria); $this->pageNavigation->setCount($count); // count of records $this->pageNavigation->setProperties($param); // order, page $this->pageNavigation->setLimit($limit); // limit // close the transaction TTransaction::close(); $this->loaded = true; } catch (Exception $e) // in case of exception { // shows the exception error message new TMessage('error', $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }


Estou usando Oracle 11g com o drive PDO.

Podem me ajudar?
SG

Colocando o codigo do Metodo onReload na Classe de Controle TbLocaisList.class.php :

 
  1. <?php
  2. public function onReload($param = NULL)
  3. {
  4. try
  5. {
  6. // open a transaction with database 'ctatst'
  7. TTransaction::open(self::$database);
  8. // creates a repository for TbLocais
  9. $repository = new TRepository(self::$activeRecord);
  10. $limit = 20;
  11. // creates a criteria
  12. $criteria = new TCriteria;
  13. if (empty($param['order']))
  14. {
  15. $param['order'] = 'IDLOC';
  16. }
  17. if (empty($param['direction']))
  18. {
  19. $param['direction'] = 'desc';
  20. }
  21. $criteria->setProperties($param); // order, offset
  22. $criteria->setProperty('limit', $limit);
  23. if($filters = TSession::getValue(__CLASS__.'_filters'))
  24. {
  25. foreach ($filters as $filter)
  26. {
  27. $criteria->add($filter);
  28. }
  29. }
  30. // load the objects according to criteria
  31. $objects = $repository->load($criteria, FALSE);
  32. print_r($objects);
  33. $this->datagrid->clear();
  34. if ($objects)
  35. {
  36. // iterate the collection of active records
  37. foreach ($objects as $object)
  38. {
  39. // add the object inside the datagrid
  40. $this->datagrid->addItem($object);
  41. }
  42. }
  43. // reset the criteria for record count
  44. $criteria->resetProperties();
  45. $count= $repository->count($criteria);
  46. $this->pageNavigation->setCount($count); // count of records
  47. $this->pageNavigation->setProperties($param); // order, page
  48. $this->pageNavigation->setLimit($limit); // limit
  49. // close the transaction
  50. TTransaction::close();
  51. $this->loaded = true;
  52. }
  53. catch (Exception $e) // in case of exception
  54. {
  55. // shows the exception error message
  56. new TMessage('error', $e->getMessage());
  57. // undo all pending operations
  58. TTransaction::rollback();
  59. }
  60. }
  61. ?>
DR

Adicione
flow = "1"
no seu arquivo de conexão com o banco de dados.

Exemplo:

host = localhost
port = 1521
name = XE
user = testes
pass = testes
type = oracle
char = WE8ISO8859P1
slog =
prep = "1"
flow = "1"
date = "DD-MON-YYYY"
time = "DD-MON-YYYY HH:MI:SS"
nsep = ',.'
SG

Obrigado pela ajuda Davy, este parametro eu ja tinha definido como '1', desde do inicio da configuração. Adicionei o 'prep', porém não funcionou.

Ficou assim o arquivo ini:

host = "XXXXXXX"
port = "1521"
name = "XXXXX"
user = "XXXXX"
pass = "XXXXX"
type = "oracle"
char = "AL32UTF8"
prep = "1"
flow = "1"
date = "YYYY-MM-DD"
time = "YYYY-MM-DD HH:MI:SS.FF"
nsep = ",."

Quando o usei o metodo para uma query manual, os resultados foram retornados:

 
  1. <?php?
  2. TTransaction::open('ctatst'); // abre uma transação
  3. $conn = TTransaction::get(); // obtém a conexão
  4. $stmt = $conn->prepare('SELECT IDLOC, ATIVO, DESCLOCAL FROM ( SELECT rownum "__ROWNUMBER__", A.IDLOC, ATIVO, DESCLOCAL FROM (SELECT IDLOC, ATIVO, DESCLOCAL FROM TB_LOCAIS ORDER BY IDLOC desc) A WHERE rownum <= 20 )');
  5. $stmt->execute();
  6. $results = $stmt->fetchAll();
  7. print_r($results);
  8. TTransaction::close();
  9. ?>


Query Manual:

Array ( [0] => Array ( [idloc] => 3 [0] => 3 [ativo] => 0 [1] => 0 [desclocal] => LOJA 03 [2] => LOJA 03 ) [1] => Array ( [idloc] => 2 [0] => 2 [ativo] => 1 [1] => 1 [desclocal] => LOJA 02 [2] => LOJA 02 ) [2] => Array ( [idloc] => 1 [0] => 1 [ativo] => 1 [1] => 1 [desclocal] => LOJA 01 [2] => LOJA 01 ) )

Query do Load da classe TRecord:

Array ( [0] => TbLocais Object ( [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => ATIVO [1] => DESCLOCAL ) ) [1] => TbLocais Object ( [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => ATIVO [1] => DESCLOCAL ) ) [2] => TbLocais Object ( [data:protected] => [vdata:protected] => [attributes:protected] => Array ( [0] => ATIVO [1] => DESCLOCAL ) ) )








SG

Consegui resolver.

No meu caso, tive que colocar todos os atributos das Classes Model, Form e List como minusculo, mesmo que no Oracle estejam como maiúsculo.

Que que coisa não!

:)

Obrigado pela ajuda Davy.
DR

Eu até ia comentar isso agora, olhei nas minhas classes e os nomes do atributos estão em minusculo mesmo.