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
-~----------~----~----~----~------~----~------~--~---