Ninguém??

Como voces realizam as pesquisas que utilizam duas ou mais tabelas??

On 29 jan, 22:24, RafaelViana <[email protected]> wrote:
> Não consegui aqui :/
>
> a coluna no data grid ta assim:
>
> <mx:DataGridColumn headerText="Tipo" dataField="tipoReuniao"
>                                                 width="150"
>                                                 
> labelFunction="getTipoReuniao"/>
>
> label function:
>
> public function getTipoReuniao(item:Object,
> column:DataGridColumn):String{
>                                 return item['tipo_reuniao']['tr_nome'];
>                         }
>
> A pesquisa está assim:
>
> @SuppressWarnings("unchecked")
>         public List<Reuniao> find(Date dataInicial, Date dataFinal,
> TipoReuniao tipo)
>                         throws Exception {
>                 return getHibernateTemplate().find("from Reuniao r INNER JOIN
> r.tipoReuniao tr " +
>                                 "WHERE tr.tr_codigo = ? AND r.reun_data 
> BETWEEN ? AND ? ORDER BY
> reun_data ASC",
>                                 new Object[] {tipo.getTr_codigo(), 
> dataInicial, dataFinal});
>         }
>
> Ela está funcionando PERFEITAMENTE, pois, quando debugo ele me
> preenche o array listReuniao com os dados certos.So a única diferença
> que percebi é a seguinte.EX:
>
> A pesquisa no banco retorna 5 resultados
>
> Consulta sem Inner Join:
> *Dentro do Array 5 objetos Reuniao (utilizo apenas o dateField no
> Datagrid ele apresenta corretamente)
> *Para preencher os campos da tabela Reuniao no datagrid só preenchia
> com o nome do campo. Ex: reun_data
> *Para preencher o nome do tipo da reunião, usava uma labelFunction.
> Ex: return tipoReuniao.tr_nome;
>
> Consulta com Inner Join:
> Dentro do Array tem 5 Arrays cada array tem 2 objetos um objeto
> Reuniao e um objeto TipoReuniao
> *Não sei como preencher nem os campos da tabela Reuniao nem os campos
> da tabela TipoReuniao
>
> Quando faço a pesquisa com inner join me retorna esse erro:
>
> TypeError: Error #1010: A term is undefined and has no properties.
>         at br.com.cauirs.maconaria.view.screen::CadastroReuniao/getTipoReuniao
> ()[F:\Projetos\SisMaconaria\src_flex\br\com\cauirs\maconaria\view
> \screen\CadastroReuniao.mxml:216]
>         at mx.controls.dataGridClasses::DataGridColumn/itemToLabel()[C:
> \autobuild\3.2.0\frameworks\projects\framework\src\mx\controls
> \dataGridClasses\DataGridColumn.as:1410]
>         at mx.controls.dataGridClasses::DataGridBase/makeListData()[C:
> \autobuild\3.2.0\frameworks\projects\framework\src\mx\controls
> \dataGridClasses\DataGridBase.as:1328]
>         at mx.controls::DataGrid/http://www.adobe.com/2006/flex/mx/
> internal::setupRendererFromData()[C:\autobuild\3.2.0\frameworks
> \projects\framework\src\mx\controls\DataGrid.as:1645]
>         at mx.controls::DataGrid/commitProperties()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\controls\DataGrid.as:1608]
>         at mx.core::UIComponent/validateProperties()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5807]
>         at mx.managers::LayoutManager/validateProperties()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:
> 539]
>         at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:
> 689]
>         at Function/http://adobe.com/AS3/2006/builtin::apply()
>         at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
>         at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild
> \3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]
>
> A linha 216 do datagrid é a seguinte:
>
> public function getTipoReuniao(item:Object,
> column:DataGridColumn):String{
>                                 return item['tipo_reuniao']['tr_nome']; 
> //linha 216
>                         }
>
> A minha duvida acho que esta bem explicada, e parece ter uma simples
> resolução.
>
> Raciocinando um pouco:
>
> *O primeiro array contem 5 arrays
> *Cada um desses arrays tem 2 objetos
>
> Na função estou referenciado assim: return item['tipo_reuniao']
> ['tr_nome'];
> Ou seja, ja acessa diretamente ??Tem algo errado...
>
> Precisaria primeiro acessar a array depois o outro array e depois só
> pegar o objeto.Só que mesmo debugando vi que esses arrays não tem id
> ou um nome que eu possa usar para referencia-los, então como acessá-
> los?
>
> Resumindo: Preciso saber como acessar esses objetos que estão dentro
> desses arrays sem nomes, ou então, qual outra maneira posso realizar
> as consultas que utilizem duas ou mais tabelas?
> On 22 jan, 21:09, RafaelViana <[email protected]> wrote:
>
>
>
> > Eu conheco a labelFunction, uso ela para formatar as datas.Mas não
> > tinha pensado nela nesse caso...Vou dar uma olhada, mas não sei com
> > qual nome me refiro a essa array...
>
> > On 22 jan, 19:03, Marco Catunda <[email protected]> wrote:
>
> > > Rafael,
>
> > > De uma olhada na propriedade 'labelFunction' do DataGrid
>
> > >http://livedocs.adobe.com/flex/2/langref/mx/controls/listClasses/List...
>
> > > Com essa propriedade você poderá criar uma função e trabalhar com o
> > > dado do jeito que vc
> > > quiser.
>
> > > Para o seu problema seria algo semelhante com isso:
>
> > > public function labelFunction(item:Object, column:DataGridColumn):String {
> > >    return item['InnerJoinTable']['Field'];
>
> > > }
>
> > > --
> > > Marco Catunda
>
> > > 2009/1/21 RafaelViana <[email protected]>:
>
> > > > Quando a pesquisa não utiliza inner join, o array é preenchido com
> > > > objetos do tipo Reuniao, quando a pesquisa utiliza inner join  ele é
> > > > preenchido com Arrays e dentro de cada array tem um objeto Reuniao e
> > > > um objeto TipoReuniao
>
> > > > Pesquisa com Inner Join:
>
> > > > @SuppressWarnings("unchecked")
> > > >        public List<Lancamento> findByDateAndUser(Date dataInicial,
> > > >                        Date dataFinal, User user) throws Exception {
> > > >                return getHibernateTemplate().find("from Lancamento l 
> > > > INNER JOIN
> > > > l.user as i WHERE i.user_codigo = ? AND l.lanc_data BETWEEN ? AND ?" +
> > > >                                "ORDER BY lanc_data ASC", new Object[] 
> > > > {user.getUser_codigo(),
> > > > dataInicial, dataFinal});
> > > >        }
>
> > > > Pesquisa sem Inner Join:
>
> > > > @SuppressWarnings("unchecked")
> > > >        public List<Lancamento> findByDate(Date dataInicial, Date 
> > > > dataFinal)
> > > > {
> > > >                return getHibernateTemplate().find("from Lancamento l 
> > > > WHERE
> > > > l.lanc_data BETWEEN ? AND ?" +
> > > >                                "ORDER BY lanc_data ASC", new Object[] 
> > > > {dataInicial, dataFinal});
> > > >        }
>
> > > > No DataGrid quando as pesquisas não utilizavam inner join, eu usava o
> > > > dataField do DataGridColumn dataField="reun_data" acessava o objeto
> > > > Reuniao diretamente, agora que ele retorna o array como faço para
> > > > acessar o objeto reuniao dentro do Array?
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a