Crear Aplicacion Flex con Bases de datos y PHP

30 06 2009

Usted desea crear una aplicación sencilla pero no tiene tiempo suficiente?

Este tutorial muestra cómo crear rápidamente aplicaciones web utilizando la función de Flex Builder “Crear la aplicación de la base de datos” Aquí hay un ejemplo que utilizan php como back-end y MySql como DataSource, puede utilizar Asp.net ColdFusion J2EE u otras tecnologías como de fondo y cualquier otra base de datos como DataSource

En primer lugar, usted tiene que configurar el MySql de datos mediante la creación de una base de datos y una tabla;
Crear una base de datos

CREATE DATABASE `users` ;

Crear tabla:

CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 16 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL ,
`priviledge` INT( 1 ) NOT NULL
) ENGINE = innodb;

De crear un proyecto que utiliza tecnología de servidor como PHP:
Haga clic derecho sobre el panel de navegación Flex -> Nuevo -> Proyecto de Flex;
Elija el nombre del proyecto y seleccione Servidor de aplicaciones PHP como el tipo de
Haga clic en Siguiente;
Antes de hacer clic en el botón Finalizar estar seguro de que la carpeta raíz de la web URL principal y son válidas, para ello puedes hacer clic en Validar la configuración;

Ahora usted puede crear su aplicación!

Elija Datos -> Crear aplicaciones de base de datos desde el menú principal;

Seleccione su proyecto y crear una conexión nueva, darle un nombre a bis descripción (opcional) y comprobar la bandera de conexión automática cuando haya finalizado el asistente;

Configuración de la conexión por el llenado de texto y, a continuación, haga clic en Probar conexión
Este es un ejemplo típico de una conexión a MySql

Host URL: localhost
Database Name:users
User Name: root
Password: DatabasePasswordForRoot

Si su conexión es válida puede hacer clic en terminar y volver a la pantalla principal en la que puede seleccionar la tabla y la clave primaria;
En este ejemplo el nombre de la tabla de cuentas y es la clave principal de identificación es

Haga clic en el botón Siguiente;
elija la carpeta de origen y el nombre del archivo PHP y pasar;

en esta pantalla se puede ver toda la columna de su mesa y usted puede elegir uno que desea mostrar la columna y en la que habilita el filtrado;

Haga clic en Finalizar y eso es todo!





Procedimientos Almacenado en MySQL

30 06 2009

Crear procedimiento y Crear  Funcion

CREATE PROCEDURE sp_name ([parameter[,...]])
[characteristic ...] routine_body

CREATE FUNCTION sp_name ([parameter[,...]])
RETURNS type
[characteristic ...] routine_body

parameter:
[ IN | OUT | INOUT ] param_name type

type:
Any valid MySQL data type

characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

routine_body:
procedimientos almacenados o comandos SQL válidos

Estos comandos crean una rutina almacenada. Desde MySQL 5.0.3, para crear una rutina, es necesario tener el permiso CREATE ROUTINE , y los permisos ALTER ROUTINE y EXECUTE se asignan automáticamente a su creador. Si se permite logueo binario necesita también el permisos SUPER como se describe en Sección 19.3, “Registro binario de procedimientos almacenados y disparadores”.

Por defecto, la rutina se asocia con la base de datos actual. Para asociar la rutina explícitamente con una base de datos, especifique el nombre como db_name.sp_name al crearlo.

Si el nombre de rutina es el mismo que el nombre de una función de SQL, necesita usar un espacio entre el nombre y el siguiente paréntesis al definir la rutina, o hay un error de sintaxis. Esto también es cierto cuando invoca la rutina posteriormente.

La cláusula RETURNS puede especificarse sólo con FUNCTION, donde es obligatorio. Se usa para indicar el tipo de retorno de la función, y el cuerpo de la función debe contener un comando RETURN value.

La lista de parámetros entre paréntesis debe estar siempre presente. Si no hay parámetros, se debe usar una lista de parámetros vacía () . Cada parámetro es un parámetro IN por defecto. Para especificar otro tipo de parámetro, use la palabra clave OUT o INOUT antes del nombre del parámetro. Especificando IN, OUT, o INOUT sólo es valido para una PROCEDURE.

El comando CREATE FUNCTION se usa en versiones anteriores de MySQL para soportar UDFs (User Defined Functions) (Funciones Definidas por el Usuario). Consulte Sección 27.2, “Añadir nuevas funciones a MySQL”. UDFs se soportan, incluso con la existencia de procedimientos almacenados. Un UDF puede tratarse como una función almacenada externa. Sin embargo, tenga en cuenta que los procedimientos almacenados comparten su espacio de nombres con UDFs.

Un marco para procedimientos almacenados externos se introducirá en el futuro. Esto permitira escribir procedimientos almacenados en lenguajes distintos a SQL. Uno de los primeros lenguajes a soportar será PHP ya que el motor central de PHP es pequeño, con flujos seguros y puede empotrarse fácilmente. Como el marco es público, se espera soportar muchos otros lenguajes.

Un procedimiento o función se considera “determinista” si siempre produce el mismo resultado para los mismos parámetros de entrada, y “no determinista” en cualquier otro caso. Si no se da ni DETERMINISTIC ni NOT DETERMINISTIC por defecto es NOT DETERMINISTIC.

Para replicación, use la función NOW() (o su sinónimo) o RAND() no hace una rutina no determinista necesariamente. Para NOW(), el log binario incluye el tiempo y hora y replica correctamente. RAND() también replica correctamente mientras se invoque sólo una vez dentro de una rutina. (Puede considerar el tiempo y hora de ejecución de la rutina y una semilla de número aleatorio como entradas implícitas que son idénticas en el maestro y el esclavo.)

Actualmente, la característica DETERMINISTIC se acepta, pero no la usa el optimizador. Sin embargo, si se permite el logueo binario, esta característica afecta si MySQL acepta definición de rutinas. Consulte Sección 19.3, “Registro binario de procedimientos almacenados y disparadores”.

Varias características proporcionan información sobre la naturaleza de los datos usados por la rutina. CONTAINS SQL indica que la rutina no contiene comandos que leen o escriben datos. NO SQL indica que la rutina no contiene comandos SQL . READS SQL DATA indica que la rutina contiene comandos que leen datos, pero no comandos que escriben datos. MODIFIES SQL DATA indica que la rutina contiene comandos que pueden escribir datos. CONTAINS SQL es el valor por defecto si no se dan explícitamente ninguna de estas características.

La característica SQL SECURITY puede usarse para especificar si la rutina debe ser ejecutada usando los permisos del usuario que crea la rutina o el usuario que la invoca. El valor por defecto es DEFINER. Esta característica es nueva en SQL:2003. El creador o el invocador deben tener permisos para acceder a la base de datos con la que la rutina está asociada. Desde MySQL 5.0.3, es necesario tener el permiso EXECUTE para ser capaz de ejecutar la rutina. El usuario que debe tener este permiso es el definidor o el invocador, en función de cómo la característica SQL SECURITY .

MySQL almacena la variable de sistema sql_mode que está en efecto cuando se crea la rutina, y siempre ejecuta la rutina con esta inicialización.

La cláusula COMMENT es una extensión de MySQL, y puede usarse para describir el procedimiento almacenado. Esta información se muestra con los comandos SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION .

MySQL permite a las rutinas que contengan comandos DDL (tales como CREATE y DROP) y comandos de transacción SQL (como COMMIT). Esto no lo requiere el estándar, y por lo tanto, es específico de la implementación.

Los procedimientos almacenados no pueden usar LOAD DATA INFILE.

Nota: Actualmente, los procedimientos almacenados creados con CREATE FUNCTION no pueden tener referencias a tablas. (Esto puede incluir algunos comandos SET que pueden contener referencias a tablas, por ejemplo SET a:= (SELECT MAX(id) FROM t), y por otra parte no pueden contener comandos SELECT , por ejemplo SELECT 'Hello world!' INTO var1.) Esta limitación se elminará en breve.

Los comandos que retornan un conjunto de resultados no pueden usarse desde una función almacenada. Esto incluye comandos SELECT que no usan INTO para tratar valores de columnas en variables, comandos SHOW y otros comandos como EXPLAIN. Para comandos que pueden determinarse al definir la función para que retornen un conjunto de resultados, aparece un mensaje de error Not allowed to return a result set from a function (ER_SP_NO_RETSET_IN_FUNC). Para comandos que puede determinarse sólo en tiempo de ejecución si retornan un conjunto de resultados, aparece el error PROCEDURE %s can't return a result set in the given context (ER_SP_BADSELECT).

El siguiente es un ejemplo de un procedimiento almacenado que use un parámetro OUT . El ejemplo usa el cliente mysql y el comando delimiter para cambiar el delimitador del comando de ; a // mientras se define el procedimiento . Esto permite pasar el delimitador ; usado en el cuerpo del procedimiento a través del servidor en lugar de ser interpretado por el mismo mysql.

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

Al usar el comando delimiter, debe evitar el uso de la antibarra (‘\’) ya que es el carácter de escape de MySQL.

El siguiente es un ejemplo de función que toma un parámetro, realiza una operación con una función SQL, y retorna el resultado:

mysql> delimiter //

mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
    -> RETURN CONCAT('Hello, ',s,'!');
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)

Si el comando RETURN en un procedimiento almacenado retorna un valor con un tipo distinto al especificado en la cláusula RETURNS de la función, el valor de retorno se coherciona al tipo apropiado. Por ejemplo, si una función retorna un valor ENUM o SET, pero el comando RETURN retorna un entero, el valor retornado por la función es la cadena para el miembro de ENUM correspondiente de un conjunto de miembros SET .





¿Que son los Triggers y como usarlos en MySQL 5.0?

26 06 2009

Desde la salida de la versión 5 de MySql se pueden usar triggers en nuestras bases de datos.

Peró, ¿qué son los triggers?, son objetos relacionados con tablas y almacenados en la base dedatos que se ejecutan o se muestran cuando sucede algún evento sobre sus tablas asociadas.

Los eventos pueden ser las sentencias INSERT, DELETE, UPDATE que modifican los datos de una tabla. Los triggeres se pueden ejecutar antes (BEFORE) y/o después (AFTER) de que sean modificados los datos.

Los triggers tienen dos palabras clave, OLD y NEW que se refieren a los valores que tienen las columnas antes y después de la modificación. Los INSERT permiten NEW, los DELETE sólo OLD y los UPDATE ambas.
Un ejemplo de trigger seria uno asociado a la sentencia DELETE en una tabla de clientes, para impedir que se elimine uno que tenga un saldo distinto de cero. Otro trigger seria guardar los datos que se modifican de un cliente en otra base de datos que serviria de auditoria.

Crearemos la tabla de clientes y le ponemos algunos registros:

CREATE TABLE clientes(
            id int not null auto_increment,
            nombre varchar(100),
            seccion varchar(10),
            PRIMARY KEY(id),
            KEY(nombre)
) ENGINE = InnoDB;

INSERT INTO clientes (nombre, seccion) VALUES
('Miguel','informatica'),
('Rosa','comida'),
('Maria','ropa'),
('Albert','informatica'),
('Jordi','comida');

Y una tabla que será la que guardará los datos de la “auditoria”.

CREATE TABLE auditoria_clientes
(
   id int not null auto_increment,
   nombre varchar(100),
   anterior_seccion varchar(10),
   usuario varchar(40),
   modificado datetime,
   primary key(id)
) ENGINE = InnoDB;

y finalmente un trigger que se disparará cada vez que alguien modifique un dato de la tabla clientes y lo guardará en una tabla junto al nombre del usuario y la fecha.

CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes
   FOR EACH ROW
   INSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado )
   VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );




Generar reloj II, fecha y hora a intervalos de un segundo con JavaScript

25 06 2009
<html>
<head>
<title>Proforma de Computadora</title>
<script>
function relojFecha(){
	var mydate=new Date();var year=mydate.getYear();
	if (year < 1000)year+=1900;
	var day=mydate.getDay();
	var month=mydate.getMonth();
	var daym=mydate.getDate();
	if (daym<10)daym="0"+daym;
	var dayarray=new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");
	var montharray=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
	                                             "Septiembre","Octubre","Noviembre","Diciembre");
	var horas = mydate.getHours();
	horas = (horas<10)?"0"+horas:horas;
	var minutos = mydate.getMinutes();
	minutos = (minutos<10)?"0"+minutos:minutos;
	var segundos = mydate.getSeconds();
	segundos = (segundos<10)?"0"+segundos:segundos;
	document.getElementById("idReloj").innerHTML = "<"+"small><"+"font color='000000' face='Verdana'>"+
	                                                dayarray[day]+" "+daym+" de "+montharray[month]+" de "+
                                                       year+" "+horas+":"+minutos+":"+segundos+"<"+"/font><"+"/small>";
	setTimeout('relojFecha()',1000);
}
</script>
</head>
<body onload="relojFecha()">
<p id="idReloj"></p>
</body>
</html>

Téngase en cuenta que, a diferencia del anterior ejemplo, el reloj está orientado a usar setTimeout, que permite lanzar la función relojFecha cada segundo. Por ello, no se puede parar y se lanza usando el evento onload de body.





Generar un reloj a intervalos de un segundo con JavaScript

25 06 2009
<html>
   <head>
   <script language="javascript">
   var intval=""
   function start_Int()
   {
           if(intval=="")
           {
                   intval=window.setInterval("start_clock()",1000);
           }
           else
           {
                   stop_Int();
           }
   }

   function stop_Int()
   {
           if(intval!="")
           {
                   window.clearInterval(intval);
                   intval="";
                   document.formu.tiempo.value="Tiempo detenido";
           }
   }

   function start_clock()
   {
           var d=new Date();
           var sw="am";
           var h=d.getHours();
           var m=d.getMinutes() + "";
           var s=d.getSeconds() + "";
           if(h>12)
           {
                   h-=12;
                   sw="pm";
           }
           if(m.length==1)
           {
                   m="0" + m;
           }
           if(s.length==1)
           {
                   s="0" + s;
           }
           document.formu.tiempo.value=h + ":" + m + ":" + s + " " + sw;
   }
   </script>
   </head>

   <body>
   <form id="formu" name="formu">
   <input type="text" name="tiempo" value="Tiempo parado">
   </form>
   <input type="button" value="Empezar" onclick="start_Int()">
   <input type="button" value="Parar" onclick="stop_Int()">
   <p>Este ejemplo actualiza el contenido del cuadro de texto cada segundo.
   Pulsa "Empezar" para iniciar la función setInterval. Pulsa "Parar" para detener el
   tiempo con la función clearInterval.</p>
   </body>
   </html>

Estudiese bien este ejemplo. La variable intval contiene un valor que setInterval genera, y con el que podremos detener el intervalo usándolo en la llamada a clearInterval. Especialmente interesante es la función start_clock, que formatea la hora para su visualización.