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