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:
<?php            $repository = new TRepository('Ccust');            $limit = 10;            // creates a criteria            $criteria = new TCriteria;                        // default order            if (empty($param['order']))            {                $param['order'] = 'codigo';                $param['direction'] = 'asc';            }            $criteria->setProperties($param); // order, offset            $criteria->setProperty('limit', $limit);...            // load the objects according to criteria            $objects = $repository->load($criteria, FALSE);            print_r($objects);?>

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:
<?php            $stmt = $con->prepare($sql);            $stmt->execute();            $results = $stmt->fetchAll();            print_r($results);?>

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:
<?phpclass Ccust extends TRecord{    const TABLENAME = 'ccust';    const PRIMARYKEY= 'codigo';    const IDPOLICY =  'max'; // {max, serial}            private $tpocc;        /**     * Constructor method     */    public function __construct($codigo = NULL, $callObjectLoad = TRUE)    {        parent::__construct($codigo, $callObjectLoad);        parent::addAttribute('descricao');        parent::addAttribute('tpocc_cod');    }...?>


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:
<?phpclass Ccust extends TRecord{    const TABLENAME = 'ccust';    const PRIMARYKEY= 'CODIGO'; // ALTERADO PARA MAIÚSCULO    const IDPOLICY =  'max'; // {max, serial}            private $tpocc;        /**     * Constructor method     */    public function __construct($codigo = NULL, $callObjectLoad = TRUE)    {        parent::__construct($codigo, $callObjectLoad);        parent::addAttribute('DESCRICAO');        parent::addAttribute('TPOCC_COD');    }...?>

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:
<?php        // creates the datagrid columns        $column_check = new TDataGridColumn('check', '', 'center');        $column_CODIGO = new TDataGridColumn('CODIGO', 'Codigo', 'left');        $column_DESCRICAO = new TDataGridColumn('DESCRICAO', 'Descricao', 'left');        $column_TPOCC_COD = new TDataGridColumn('TPOCC_COD', 'Tipo', 'left');        // add the columns to the DataGrid        $this->datagrid->addColumn($column_check);        $this->datagrid->addColumn($column_CODIGO);        $this->datagrid->addColumn($column_DESCRICAO);        $this->datagrid->addColumn($column_TPOCC_COD);?>
DR

Uma solução para esta situação é adicionar a linha
<?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

<?phpclass TbLocais extends TRecord{    const TABLENAME  = 'TB_LOCAIS';    const PRIMARYKEY = 'IDLOC';    const IDPOLICY   =  'max'; // {max, serial}    /**     * Constructor method     */    public function __construct($id = NULL, $callObjectLoad = TRUE)    {        parent::__construct($id, $callObjectLoad);        parent::addAttribute('ATIVO');        parent::addAttribute('DESCLOCAL');                }}?>



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 :

<?phppublic 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();        }    }?>
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:

<?php?TTransaction::open('ctatst'); // abre uma transação $conn = TTransaction::get(); // obtém a conexão             $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 )');$stmt->execute();$results = $stmt->fetchAll();print_r($results);            TTransaction::close();?>


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.