Não me é possivel testar a tua implementação, mas experimenta fazer debug
após a criação do array e ver a estrutura real desse array final.

Parece-me que estás a receber e a tratar mal a estrutura dos arrays. Utiliza
o service capture para veres o que é recebido pelo flex, vindo do PHP.
Depois faz debug no return ac1; para veres o que foi construído e o estado
dos arrays values e keys. Daí facilmente refazes os loops para acomodar a
estrutura.

Deixa aqui o resultado, por favor, gostava de ver isso a funcionar. :-)


Miguel Vaz







2008/9/23 Manel <[EMAIL PROTECTED]>

>
> O grande problema é que eu não sei os campos das colunas no ficheiro
> PHP, tem de ser totalmente genérico. Estou a tentar fazer desta forma
> mas ainda não consegui resolver:
>
> ///// PHP /////
>
> VOU BUSCAR AS COLUNAS DA TABELA (para serem os Keys do
> ArrayCollection)
>
> function getColumnsFromQuery($address, $user, $pass, $bd, $query)
>        {
>                $this->conn = @mysql_pconnect($address, $user, $pass);
>                mysql_select_db ($bd);
>                mysql_query("CREATE VIEW lol AS $query");
>                $result = mysql_query("SHOW COLUMNS FROM lol");
>                if (!$result) {
>                 echo 'Could not run query: ' . mysql_error();
>        }
>        $fieldnames=array();
>
>                if (mysql_num_rows($result) > 0) {
>                        while ($row = mysql_fetch_assoc($result)) {
>                                $fieldnames[] = $row['Field'];
>                        }
>        }
>         mysql_query("DROP VIEW lol");
>        return $fieldnames;
>
>
>     }
>
> VOU BUSCAR TODOS OS VALORES DA TABELA (para serem os Values do
> ArrayCollection)
>
>        function getValues($address, $user, $pass, $bd, $query) {
>                $this->conn = @mysql_pconnect($address, $user, $pass);
>                mysql_select_db ($bd);
>                $result = mysql_query($query);
>                while($row=mysql_fetch_array($result)) {
>                $return[] = $row;
>                }
>                return $return;
>        }
>
>
> /////// AS3 //////
>
> Apanho os resultados das chamadas destas funcoes como objectos, crio
> um Array 'columns' que contém as keys, e um array 'results' com os
> valores da tabela.
> De seguida chamo uma função que supostamente criaria o ArrayCollection
> a partir destes dois arrays:
>
>                public function createAC(keys:Array,
> values:Array):ArrayCollection {
>                        var ac1: ArrayCollection = new ArrayCollection();
>                        var k:int = 0;
>                        var v:int = 0;
>                        var temp:int = 0;
>
>                        for (; k<values.length; k++, temp++) {
>                                var array:Array = new Array();
>                                for (; v < values[0].length; v++){
>
>  array.push({(keys[temp]):values[temp][v]});
>                                }
>                                ac1.addItem(array);
>                                }
>                        return ac1;
>                }
>
> Aqui basicamente é criado um array por coluna, onde são inseridos os
> keys e respectivos valores, finalmente adicionando-os ao
> ArrayCollection que irá ser devolvido.
>
> O problema é que se eu for chamar qualquer coisa do tipo (sendo Mes)
> uma das colunas da tabela, logo uma das keys):
> ac1[0].Mes
> ele diz que não está definido.
>
> Assim, quando tento tornar este 'ac1' como o dataProvider do gráfico,
> ele não consegue,obviamente, ir buscar valores nenhuns!!
>
> Estou a ver isto tudo ao contrário? Há alguma solução + fácil pra
> isto?
>
> [ ]
> manel
>
> On 17 Set, 18:16, "Miguel Vaz" <[EMAIL PROTECTED]> wrote:
> > Os nomes dos campos são sempre os mesmos, correcto? Ou pretendes uma
> função
> > que se adapte ao tipo de tabelas que eventualmente tiveres? Megalómano,
> > vamos bloquear os nomes. ;-)
> >
> > imaginando que a tua tabela é:
> >
> > tabela_de_tralha
> >
> > campos:
> > id,month,profit,expense
> >
> > em PHP:
> >
> > function faz_super_ninja_query():void{
> >
> > $query = "Select * from tabela_de_tralha";
> >
> > $this->conn = @mysql_pconnect($address, $user, $pass);
> > mysql_select_db ($bd);
> > $result = mysql_query($query);
> > $i=0;
> >
> > while($row=mysql_fetch_array($result)) {
> >
> >    $dados[$i]["Month"] = $row["month"];
> >    $dados[$i]["Profit"] = $row["profit"];
> >    $dados[$i]["Expense"] = $row["expense"];
> >
> >    $i++
> >
> >  }
> >
> > return $dados
> >
> > }
> >
> > Não testei, mas parece-me bem. No flex recebes uma estrutura idêntica à
> que
> > pretendes. Trata de receber o resultado num arrayCollection.
> >
> > Ficas com algo assim:
> >
> > dados[1]["Month"] com valor "janeiro"; // ou dados.getItemAt(1).Month
> > dados[1]["Profit"] etc
> > ...
> > dados[2]...
> >
> > perdoa se entendi mal ou se escrevi código errado. Não me é possivel
> testar
> > onde estou. Espero que pelo menos ajude alguma coisa. :-)
> >
> > Miguel Vaz
> >
> > 2008/9/17 Manuel Rosa <[EMAIL PROTECTED]>
> >
> > > É mesmo apenas uma tabela... como não sabia criar o ArrayCollection de
> raíz
> > > tava a ir buscar o nome das colunas da tabela, e outro com os dados:
> > > function getColumnsFromQuery($address, $user, $pass, $bd, $query)
> > >  {
> > > $this->conn = @mysql_pconnect($address, $user, $pass);
> > > mysql_select_db ($bd);
> > >  mysql_query("CREATE VIEW lol AS $query");
> > > $result = mysql_query("SHOW COLUMNS FROM lol");
> > >  if (!$result) {
> > >         echo 'Could not run query: ' . mysql_error();
> > >                 }
> > >            $fieldnames=array();
> > >                 if (mysql_num_rows($result) > 0) {
> > >            while ($row = mysql_fetch_assoc($result)) {
> > >             $fieldnames[] = $row['Field'];
> > >            }
> > >                }
> > >         }
> >
> > > e,
> >
> > > function getValues($address, $user, $pass, $bd, $query) {
> > > $this->conn = @mysql_pconnect($address, $user, $pass);
> > >  mysql_select_db ($bd);
> > > $result = mysql_query($query);
> > > while($row=mysql_fetch_array($result)) {
> > >        $return[] = $row;
> > >    }
> > >     return $return;
> > >  }
> >
> > > Se houver uma forma melhor de criar logo o ArrayCollection com as Keys
> > > sendo o nome das colunas e os Values sendo os respectivos valores na
> tabela,
> > > melhor!!!
> >
> > > 2008/9/17 Miguel Vaz <[EMAIL PROTECTED]>
> >
> > >> Podes resolver o problema em AS, criando um novo array, mas talvez
> fosse
> > >> mais fácil resolver a nivel do mysql. Dizes que tens duas queries,
> talvez aí
> > >> possas construir de raiz a estrutura de dados mais facilmente.
> >
> > >> Podes mostrar os queries e estrutura das 2 tabelas?
> >
> > >> Miguel Vaz
> >
> > >> 2008/9/17 Manel <[EMAIL PROTECTED]>
> >
> > >>> Boas,
> >
> > >>> Tendo 2 arrays um com:
> > >>>  {Month, Profit, Expenses} e outro com { {"Jan", 2000, 1500} ,
> {"Feb",
> > >>> 1000, 200} , { "Mar", 1500, 500} }
> >
> > >>> como consigo criar um ArrayCollection do tipo:
> > >>> public var testValues:ArrayCollection = new ArrayCollection([
> > >>>        {Month: "Jan", Profit:2000, Expenses:1500},
> > >>>                {Month: "Feb", Profit:1000, Expenses:200},
> > >>>                {Month: "Mar", Profit:1500, Expenses:500}
> > >>>        ]);
> >
> > >>> Isto porque quero alimentar um gráfico com um arraycollection obtido
> > >>> através de duas queries mysql, sendo que recebo das mesmas um array
> > >>> com o nome das colunas, e outro com os respectivos valores em cada
> > >>> linha.
> >
> > >>> Para depois ter qualquer coisa do tipo:
> >
> > >>>                var vAxis:CategoryAxis = new CategoryAxis();
> > >>>                vAxis.categoryField = "Month" ;
> > >>>                vAxis.dataProvider =  testValues;
> > >>>                myChart.verticalAxis = vAxis;
> > >>>                myChart.dataProvider = testValues;
> > >>>                myChart.series = mySeries;
> >
> > >>> Espero ter-me feito entender.
> >
> > >>> Desde já obrigado.
> > >>> [ ]
> > >>> manel
> >
>

--~--~---------~--~----~------------~-------~--~----~
Recebeu esta mensagem porque está inscrito em Grupo "Mailing List da Comunidade 
Portuguesa de Desenvolvimento de RIAs - www.riapt.org" do Grupos Google.
 Para enviar mensagens para este grupo, envie um email para 
[email protected]
 Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED]
 Para mais opções, visite este grupo em 
http://groups.google.com/group/riapt?hl=pt-PT
-~----------~----~----~----~------~----~------~--~---

Responder a