Comunidad de diseño web y desarrollo en internet online

ayuda para creacion de clase con loadVars

Citar            
MensajeEscrito el 03 Abr 2007 11:57 pm
Hola a todos,
Estoy intentando crear una clase llamada Mysql, que con el objeto LoadVars y PHP se pueda insertar i consultar datos en una base de datos.
Todo funciona bien, excepto cuando quiero almazenar la informacion que me devuelve el sendandload de la funcion select de la clase que estoy creando..haga lo que haga no consigo almazenar la consulta que hago en una variable...
aqui os pongo el codigo aver si me podeis dar una ayudita..(los datos que lee del php, la variable &consulta llega bien) supongo que es algun problema relacionado con las clases y metodos..(si en lugar de almacenarlo en una variable, lo pongo en un campo de texto si k funciona) :crap:

Código :

class Mysql {
   private var _sHostname:String = null;
   private var _sUsername:String = null;
   private var _sDatabase:String = null;
   private var _sConsulta:String = null;
   private var _resultat:String = null;
   private var rebre : LoadVars;
   private var enviar : LoadVars;
   private var rebre1 : LoadVars;
   private var enviar1 : LoadVars;
   //public var resultat:String = null;
   public var insertOk:Number = null;
   public function get hostname():String {
      return _sHostname;
   }
   public function set hostname(sHostname:String):Void {
      _sHostname = sHostname;
   }
   public function get username():String {
      return _sUsername;
   }
   public function set username(sUsername:String):Void {
      _sUsername = sUsername;
   }
   public function get database():String {
      return _sDatabase;
   }
   public function set database(sDatabase:String):Void {
      _sDatabase = sDatabase;
   }
   public function get consulta():String {
      return _sConsulta;
   }
   public function set consulta(sConsulta:String):Void {
      _sConsulta = sConsulta;
   }
   public function insert(taula:String, nom:String, valor:String):Void {
      enviar=new LoadVars();
      rebre=new LoadVars();
      enviar.taula = taula;
      enviar.nom = nom;
      enviar.valor = valor;
      enviar.hostname = this.hostname;
      enviar.database = this.database;
      enviar.username = this.username;
      enviar.sendAndLoad("http://localhost/insert.php", rebre, "POST");
      rebre.onLoad = function(ok) {
         if (ok) {
            this.insertOk = 0;
         } else {
            this.insertOk = 1;
         }
      };
   }
   public function select(taula:String, camp:String, valor:String, campconsulta:String):Void {
      enviar1=new LoadVars();
      rebre1=new LoadVars();
      enviar1.taula = taula;
      enviar1.camp = camp;
      enviar1.valor = valor;
      enviar1.campconsulta = campconsulta;
      enviar1.hostname = this.hostname;
      enviar1.database = this.database;
      enviar1.username = this.username;
      enviar1.sendAndLoad("http://localhost/select.php", rebre1, "POST");
      rebre1.onLoad = function(ok) {
         if (ok) {
            _resultat = this.consulta;
         } else {
                 _resultat = "Error connecting to server";
         }
      };
   }
}

Porfavor, si alguien me puede ayudar se lo agradeceria mucho! es urgente!! :crap:

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Abr 2007 10:07 pm
me di el tiempo para revisarlo

solo aumente en tu linea 72 el trace

Código :

if (ok) {
        _resultat = this.consulta;
   trace(_resultat+"<<<<<<<-------");
}
y si llega bien

quizas sea por

Código :

private var _resultat:String = null;
osea
private
o deberias hacer un return, quedaria asi tu metodo:

Código :

public function select(taula:String, camp:String, valor:String, campconsulta:String):String{
      enviar1=new LoadVars();
      rebre1=new LoadVars();
      enviar1.taula = taula;
      enviar1.camp = camp;
      enviar1.valor = valor;
      enviar1.campconsulta = campconsulta;
      enviar1.hostname = this.hostname;
      enviar1.database = this.database;
      enviar1.username = this.username;
      enviar1.sendAndLoad("http://www.eldervaz.com/archivos/select.php", rebre1, "POST");
      rebre1.onLoad = function(ok) {
         if (ok) {
            _resultat = this.consulta;
       trace(_resultat+"<<<<<<<-------");
         } else {
                 _resultat = "Error connecting to server";
         }
         return _resultat;
      };
   }

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 06 Abr 2007 04:25 pm
muchisimas gracias por dedicar un poco de tu tiempo ayduandome..
He modificado el código haciendo el trace y efectivamente si que llega bien..
luego he intentado lo del return (k me parece k ya habia probado algo semejante) y siempre que pongo un return dentro de un loadvars.onLoad me sale el error:

**Error** C:\**********\middleware\Mysql.as: Línea 58: Esta función requiere una acción 'return'.
public function select(taula:String, camp:String, valor:String, campconsulta:String, info:TextField):String {

Total de errores de ActionScript: 1 Errores comunicados: 1


sabes porque razon es? kizas porque se llama un metodo de una clase dentro de otra clase?
muchas gracias de anticipado!!

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Abr 2007 04:27 pm
ahi dice q NO estas haciendo el RETURN

Código :

Esta función requiere una acción 'return'.

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 06 Abr 2007 04:31 pm
ya pero esk si k lo estoy haciendo:

Código :

public function select(taula:String, camp:String, valor:String, campconsulta:String):String {
      Stage.scaleMode = "noScale";
      System.useCodepage = true;
      enviar1=new LoadVars();
      rebre1=new LoadVars();
      enviar1.taula = taula;
      enviar1.camp = camp;
      enviar1.valor = valor;
      enviar1.campconsulta = campconsulta;
      enviar1.hostname = this.hostname;
      enviar1.database = this.database;
      enviar1.username = this.username;
      enviar1.sendAndLoad("http://localhost/select.php", rebre1, "POST");
      rebre1.onLoad = function(ok) {
         if (ok) {
             _resultat = this.consulta;
            trace(_resultat+"<<<<<<<-------");
         } else {
            _resultat = "Error connecting to server";
         }
         return _resultat;
      };
   }

ya te digo, nunca he podido hacer un return desde dentro de un loadvars.onLoad xq siempre me sale este error..como si no lo leyera.. :crap:

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Abr 2007 04:37 pm
si ahi esta mal

Código :

rebre1.onLoad = function(ok) {
         if (ok) {
             _resultat = this.consulta;
            return _resultat;
         } else {
            _resultat = "Error connecting to server";
            return _resultat;
         }
      };


intenta asi y vemos sino q hacer

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 06 Abr 2007 04:38 pm
No tiene caso hacer un return en un onLoad, el onLoad es un evento, que se dispara al leer los datos.

Una buena opción en AS 2.0 es que uses el Delegate.


saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 06 Abr 2007 04:41 pm
si, el onLoad ya se para que sirve, porque la funcion no puede hacer un return cuando recibe los datos? no lo acabo de entender..

mmm..me puedes indicar como usar el Delegate en mi caso porfavor?
muchas gracias!

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Abr 2007 05:07 pm
bueno, no queria q toques este tema planteado por Dano, pero asi seria:

Código :

//esto en tu primera linea de la clase
import mx.utils.Delegate;

//en tu metodo
enviar1.onLoad=Delegate.create(this, aaa);

//creas otro metodo
private function aaa() {
   trace(enviar1.consulta);
}

igual aqui te dejo un ejemplo reBasico

dime.as

Código :

import mx.utils.Delegate;
class dime {
   private var t:LoadVars;
   public function dime() {
      t = new LoadVars();
   }
   public function dar() {
      t.load("texto.txt");
      t.onLoad = Delegate.create(this, aaa);
   }
   private function aaa() {
      trace(t.dato);
   }
}


fla

Código :

var z:dime = new dime();
z.dar();

es la misma logica con tu php, saludos

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 06 Abr 2007 05:22 pm
muchas gracias,
lo he provado pero con esto estoy igual..que ventaja tiene hacer un Delegate?
me sale bien el trace, pero no puedo(o no se) guardar mis datos "recibir1.consulta" en una variable, o devolverlo con un return...

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Abr 2007 05:25 pm

Código :

//creas otro metodo
var aquiaqui:String;
private function aaa() {
   trace(enviar1.consulta);
   aquiaqui = enviar1.consulta;
}

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 06 Abr 2007 05:42 pm
Dano, gracias por tu ayuda pero si fuera tan facil no lo preguntaria..
voy a explicarlo mejor, quizas no em e explicado bien:

Tengo mi clase:

Código :

import mx.utils.Delegate;
class Mysql {
   private var _resultat:String = null;
   private var rebre1:LoadVars;
   private var enviar1:LoadVars;
   public function select(taula:String, camp:String, valor:String, campconsulta:String, info:TextField):Void {
      Stage.scaleMode = "noScale";
      System.useCodepage = true;
      enviar1 = new LoadVars();
      rebre1 = new LoadVars();
      enviar1.taula = taula;
      enviar1.camp = camp;
      enviar1.valor = valor;
      enviar1.campconsulta = campconsulta;
      enviar1.hostname = this.hostname;
      enviar1.database = this.database;
      enviar1.username = this.username;
      enviar1.sendAndLoad("http://localhost/select.php", rebre1, "POST");
      rebre1.onLoad = Delegate.create(this, tornar);
   }
   private function tornar() {
      trace(rebre1.consulta); //<----En este trace recibo bien la consulta
      _resultat=rebre1.consulta;
   }
   public function get resultat():String {
      return _resultat;
   }
}

I luego quiero que se pueda acceder a la consulta, he intentado:

Código :

import Mysql;
var connexio:Mysql= new Mysql();
connexio.select("beta","id","17","nom",info);
info.text=connexio.resultat; //[b]<----Me sale "Null"![/b]


No funciona!! como puedo hacerlo para que el usuario pueda acceder a la variable "rebre1.consulta"??

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Abr 2007 06:03 pm

Código :

import Mysql;
var connexio:Mysql= new Mysql();
connexio.select("beta","id","17","nom",info);
connexio.onMiLoad = function()
{
  info.text=connexio.resultat; //[b]<----Me sale "Null"![/b]
};


en tu clase declara esto:

Código :

public var onMiLoad:Function;



y listo, saludos


pd. yo prefiero dispatchar eventos, pero por ahora con esa solución te funcionará

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 07 Abr 2007 01:02 am
Muchísimas gracias pero sigue sin funcionarme!! No lo entiendo de verdad..me estoy volviendo loco..
Ahora en lugar de salirme "Null" no sale nada en el campo de texto..
Os paso mi código completo, para si quereis probarlo o si podeis entenderlo mejor:

El código:

Código :

var connexio:Mysql= new Mysql();
connexio.hostname="localhost";
connexio.database="middle";
connexio.username="root2";
connexio.insert("beta","nom","rogerinho");
connexio.select("beta","id","17","nom",info);
connexio.onMiLoad = function()
{
  info.text=connexio.resultat;
}


i la clase:

Código :

import mx.utils.Delegate;
class Mysql {
   private var _sHostname:String = null;
   private var _sUsername:String = null;
   private var _sDatabase:String = null;
   private var _sConsulta:String = null;
   private var _resultat:String = null;
   private var rebre:LoadVars;
   private var enviar:LoadVars;
   private var rebre1:LoadVars;
   private var enviar1:LoadVars;
   public var onMiLoad:Function;
   public var insertOk:Number = null;

   public function get hostname():String {
      return _sHostname;
   }
   public function set hostname(sHostname:String):Void {
      _sHostname = sHostname;
   }
   public function get username():String {
      return _sUsername;
   }
   public function set username(sUsername:String):Void {
      _sUsername = sUsername;
   }
   public function get database():String {
      return _sDatabase;
   }
   public function set database(sDatabase:String):Void {
      _sDatabase = sDatabase;
   }
   public function get consulta():String {
      return _sConsulta;
   }
   public function set consulta(sConsulta:String):Void {
      _sConsulta = sConsulta;
   }
   public function get resultat():String {
      return _resultat;
   }
   public function insert(taula:String, nom:String, valor:String):Void {
      enviar = new LoadVars();
      rebre = new LoadVars();
      enviar.taula = taula;
      enviar.nom = nom;
      enviar.valor = valor;
      enviar.hostname = this.hostname;
      enviar.database = this.database;
      enviar.username = this.username;
      enviar.sendAndLoad("http://localhost/insert.php", rebre, "POST");
      rebre.onLoad = function(ok) {
         if (ok) {
            this.insertOk = 0;
         } else {
            this.insertOk = 1;
         }
      };
   }
   public function select(taula:String, camp:String, valor:String, campconsulta:String, info:TextField):Void {
      Stage.scaleMode = "noScale";
      System.useCodepage = true;
      enviar1 = new LoadVars();
      rebre1 = new LoadVars();
      enviar1.taula = taula;
      enviar1.camp = camp;
      enviar1.valor = valor;
      enviar1.campconsulta = campconsulta;
      enviar1.hostname = this.hostname;
      enviar1.database = this.database;
      enviar1.username = this.username;
      enviar1.sendAndLoad("http://localhost/select.php", rebre1, "POST");
      rebre1.onLoad = Delegate.create(this, tornar);
   }
   private function tornar() {
      trace(rebre1.consulta);
      _resultat=rebre1.consulta;
   }
   public function elimina(taula:String, camp:String, valor:String):Void {
      enviar = new LoadVars();
      rebre = new LoadVars();
      enviar.taula = taula;
      enviar.camp = camp;
      enviar.valor = valor;
      enviar.hostname = this.hostname;
      enviar.database = this.database;
      enviar.username = this.username;
      enviar.sendAndLoad("http://localhost/delete.php", rebre, "POST");
      rebre.onLoad = function(ok) {
         if (ok) {
            this.insertOk = 0;
         } else {
            this.insertOk = 1;
         }
      };
   }
   public function update(taula:String, camp1:String, camp2:String, valor_nou:String, valor:String):Void {
      enviar = new LoadVars();
      rebre = new LoadVars();
      enviar.taula = taula;
      enviar.camp1 = camp1;
      enviar.nou_valor = valor_nou;
      enviar.camp2 = camp2;
      enviar.valor = valor;
      enviar.hostname = this.hostname;
      enviar.database = this.database;
      enviar.username = this.username;
      enviar.sendAndLoad("http://localhost/update.php", rebre, "POST");
      rebre.onLoad = function(ok) {
         if (ok) {
            this.insertOk = 0;
         } else {
            this.insertOk = 1;
         }
      };
   }
}


muchas gracias otra vez..

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Abr 2007 01:04 am
Agrega esto please:

Código :

   private function tornar() {
      trace(rebre1.consulta);
      _resultat=rebre1.consulta;
     if( this.onMiLoad )
         this.onMiLoad();
   }

^^

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 07 Abr 2007 11:09 am
MUCHISIMAS GRACIAS!!!
ya funciona!!
gracias a los dos..

Por rogerflash

6 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.