Sistema de Clientes (AIR y SQLite) Parte I (Crear Base de datos)

Adobe AIREsta es la primera parte del proyecto "Sistema de Clientes" desarrollado en AIR con SQLite como administrador de base de datos. Para este proyecto usaremos Flex Builder 3, del cual puedes bajarte una versión de prueba del Flex Builder 3 aquí. Si requieres más información sobre qué es AIR y qué puedes hacer con él visita esta entrada. Los archivos de este proyecto los encontrarás al terminar de publicar todas las partes (entradas) de este proyecto.

Para este proyecto, abre Flex Builder 3 y crea un nuevo proyecto de AIR (File -> New -> Flex Project. Como nombre de proyecto (Project name) ponle Sistema_Clientes; en la sección de Application type selecciona la opción Desktop application (runs in Adobe AIR) y haz click en el botón Finish.
Como lo comenté en la sección de Proyectos, aquí mostraré solamente la información más importante y sobre la cual trata el tema, sin embargo el archivo fuente del proyecto está completo y tiene integrado todo lo que se mostrará en esta entrada y en las siguientes, para así formar un proyecto completo. Dicho lo anterior, a continuación iniciaré la explicación sobre cómo crear una base de datos en SQLite.

Parte 1: Crear Base de Datos en SQLite con AIR

Para mantener organizado el código de nuestro proyecto y para evitar que se pierdan con toda la información aquí mostrada, vamos a dividir el código del proyecto en archivos .as. Estos archivos estarán almacenados en la carpeta actionscript. La estructura de nuestro proyecto será la siguiente:

Imagen 1

Imagen 1

Comenzamos con el archivo CrearBaseDatos.as:

Necesitamos de las siguientes librerías para poder tener acceso a los métodos de conexión con la base de datos, la ejecución de los queries, etc. Las clases que usaremos son SQLConnection, SQLErrorEvent y SQL Event:

Actionscript:
  1. import flash.data.SQLConnection;
  2. import flash.events.SQLErrorEvent;
  3. import flash.events.SQLEvent;   
  4. import mx.controls.Alert; /* Haremos uso de los mensajes de alerta, por lo que de una vez añadimos la clase */

Ahora vamos a crear los objetos de estas clases y las variables que requeriremos a lo largo de este archivo:

Actionscript:
  1. private var conexion:SQLConnection; // Nuestro objeto de la clase SQLConnection
  2. private var database:File; /* Aquí guardaremos la referencia de nuestro archivo .sqlite que es nuestra base de datos */
  3. private var existeBD:Boolean = false; /* Variable booleana en la cual guardaremos el valor de true si existe la base de datos y false en caso contrario */
  4. private var queryStatement:SQLStatement = new SQLStatement(); /* Creamos una variable de tipo SQLStatement en la cual estableceremos los queries y parámetros de nuestras consultas */

Para crear las sentencias de SQL, necesitamos de un objeto de la clase SQLStatement, a este objeto lo llamamos queryStatement.

La función abreConexion (que mostraremos a continuación) será llamada desde la aplicación principal, es decir desde el archivo Sistema_Clientes.mxml (recuerda que al crear un nuevo proyecto, Flex Builder construye automáticamente un archivo MXML con el nombre del proyecto y el cual es el punto de partida de nuestra aplicación). Esta función se encargará de verificar si existe la base de datos la cual la pasamos como parámetro del constructor de la clase File. Si no existiera la base de datos la aplicación se encargará de crearla. En caso contrario, se establecería la conexión con la base de datos. El nombre de nuestra base de datos será clientesDB.sqlite, presta atención a la primera línea de nuestra función:

Actionscript:
  1. private function abreConexion():void {
  2.     /* Asignamos a nuestra variable database el archivo de nuestra base de datos */
  3.     database = new File(File.applicationStorageDirectory.nativePath + "\database\clientesDB.sqlite");
  4.     /* Inicializamos nuestra variable conexion */
  5.     conexion = new SQLConnection();
  6.     /* Creamos el listener que será llamado cuando se abra la conexión a la base de datos */
  7.     conexion.addEventListener(SQLEvent.OPEN, dbAbrirConexion);
  8.     /* Creamos el listener que será llamado cuando exista algún error en la conexión a la bd */
  9. conexion.addEventListener(SQLErrorEvent.ERROR, dbErrorConexion);
  10. queryStatement.sqlConnection = conexion; /* Le asignamos a su propiedad sqlConnection la variable conexion que creamos al inicio del archivo  */
  11.         
  12.     if(!database.exists) { // Comprobamos si existe o no la base de datos
  13.         existeBD = false; // No existe la bd, por lo tanto le asignamos a existeBD el valor de falso
  14.             conexion.open(database); // Abrimos la conexión a la bd       
  15.     }
  16.     else {
  17.             conexion.open(database); // Abrimos la conexión a la bd
  18.     }   
  19. }

Observa que al constructor de la clase File le estamos pasando como parámetro el URL de donde estará almacenada nuestra base de datos. Para construir este URL estamos usando la propiedad applicationStorageDirectory, la cual hace referencia al directorio privado donde se encuentra la aplicación. Además, estamos usando la propiedad nativePath la cual nos regresa la ruta completa de acuerdo al sistema operativo donde se encuentra el sistema. A grandes rasgos, esta línea crea un directorio con el nombre de la aplicación (en este caso el directorio se llama Sistema_Clientes) dentro de la carpeta de Application Data (Datos de programa). Esta carpeta es donde los programas que tenemos instalados guardan información o las preferencias del usuario de la computadora. En Windows Vista, el directorio donde está almacenada la base de datos es C:\Users\Nombre_Usuario\AppData\Roaming\Sistema_Clientes. En Windows XP, el directorio es: C:\Documents and Settings\Nombre_Usuario\Datos de programa\Sistema_Clientes.

Al hacer la llamada a la función open, la función dbAbrirConexion será llamada en caso de que no exista error; en caso contrario la función dbErrorConexion será llamada. El código de estas funciones se muestra a continuación:

Actionscript:
  1. private function dbAbrirConexion(event:SQLEvent):void {  
  2.     if(!existeBD) { /* Si no existe la base de datos, llamamos a la función createTBLCliente */
  3.         createTBLCliente();
  4.     }
  5. }
  6.    
  7. private function dbErrorConexion():void {
  8.     Alert.show("No se pudo conectar a la base de datos"); /* Mostramos un mensaje de error*/
  9. }

Nuestra base de datos estará conformada por solamente una tabla (sólo para fines del ejercicio, ya que no es común que una base de datos esté formada por sólo una tabla). Nuestra tabla se llama cliente y sus elementos son los siguientes:

Imagen 2

Imagen 2

De la imagen anterior podemos determinar que el query para crear esta tabla es:

SQL:
  1. CREATE TABLE `cliente` (`id` INTEGER PRIMARY KEY  NOT NULL, `nombre` TEXT, `direccion` TEXT, `telefono` TEXT, `email` TEXT)

Este query lo usaremos en la función createTBLCliente, el cual es llamado desde dbAbrirConexion.

Actionscript:
  1. private function createTBLCliente():void {
  2.     queryStatement.clearParameters();
  3.     var sql:String = "CREATE TABLE `cliente` ";
  4.     sql += "(`id` INTEGER PRIMARY KEY  NOT NULL, `nombre` TEXT, `direccion` TEXT ";
  5.     sql += ", `telefono` TEXT, `email` TEXT)";
  6.     queryStatement.text = sql;
  7.     try {
  8.         queryStatement.execute();
  9.         insertDefaultData();
  10.     }
  11.     catch(error:SQLError) {
  12.         Alert.show("Error al insertar el registro: " + error.toString());            
  13.     }
  14. }

Para crear las sentencias de SQL, necesitamos de un objeto de la clase SQLStatement, a este objeto lo llamamos queryStatement y lo declaramos al inicio del programa. Para asegurarnos de que no tengamos parámetros asignados a este SQLStatement, usamos la función clearParameters, de no hacer esto el programa generará un error indicándonos que la cantidad de parámetros establecidos en el query no concuerda con los parámetros del SQLStatement. Posteriormente declaramos una variable sql de tipo String que contiene el query de crear la tabla de cliente.
La propiedad text de la clase SQLStatement nos permite asignarle la sentencia SQL, por lo que le asignamos la variable sql.

Para poder "cachar" cualquier error que ocurra al ejecutar la sentencia, colocamos la llamada a la función execute dentro del bloque try. Cualquier error que ocurra será detectado y administrador en el bloque catch. En caso de que no exista ningún error al llamar a la función execute, llamaremos a la función insertDefaultData para insertar algunos registros por default.

A continuación pego el código de la función insertDefaultData:

Actionscript:
  1. private function insertDefaultData():void {
  2.     queryStatement.clearParameters();
  3.     var sql:String = "INSERT INTO `cliente` (nombre, direccion, telefono, email) VALUES (:nombre, :direccion, :telefono, :email)";
  4.     queryStatement.parameters[":nombre"] = 'Ernesto Trujillo';
  5.     queryStatement.parameters[":direccion"] = 'Avenida Importante #33';
  6.     queryStatement.parameters[":telefono"] = '55667788';
  7.     queryStatement.parameters[":email"] = 'etrujillo@email.com';
  8.     queryStatement.text = sql;
  9.     try {
  10.         queryStatement.execute();
  11.     }
  12.     catch(error:SQLError) { 
  13.         Alert.show("Error al crear la tabla cliente: " + error.toString());  
  14.     }
  15. }

Este código es similar al de la función createTBLCliente en cuanto a la creación de la variable del SQLStatement, la creación del query y su asignación a la propiedad text. Sin embargo, presta atención en la forma en cómo se le pasan los valores al query; esto es usando dos puntos seguidos de un nombre cualquiera que quieras asignarle. Posteriormente debes establecer el valor de estos parámetros usando la propiedad parameters la cual recibe un arreglo asociativo con los valores del parámetro especificado.

Como recomendación y para que te asegures de que tu base de datos, la tabla y el registro fueron creados, puedes bajar el complemento para Firefox llamado SQLite Manager, el cual es un pequeño y simple administrador de bases SQLite.


Enlaces recomendados:

» Working with local SQL databases
» Adobe® Flex® 3 Language Reference
Tags: , , , ,

Si te gustó esta entrada anímate a escribir un comentario o suscribirte al feed y obtener los artículos futuros en tu lector de feeds.

Comentarios

[...] "Sistema de Clientes" desarrollado en AIR con SQLite como administrador de base de datos. En la entrada anterior vimos cómo crear la base de datos (clientesDB.sqlite), y cómo llenar con algunos [...]

HIZE TODO LO QUE DESCRIBE EL PROYECTO Y NO ME FUNCIONO KIESIERA SABER EL MOTIVO

Hola Roberto,

Sin más datos no puedo saber por qué no te funciona.
Como comento en esta entrada, solamente estoy explicando la parte de crear una base de datos en SQLite y cómo meterle algunos datos por default; por lo tanto con sólo copiar y pegar el código no funcionará.

Visita la parte IV de este tutorial en donde encontrarás los archivos de todas las partes de estas entradas. Baja el archivo Sistema_Clientes.zip y ponlo en el workspace de tu Flex Builder 3. Si no te corre el programa por favor dime el error que te marca.

http://www.codigometropoli.com/sistema-de-clientes-parte-iv/

Saludos.

Te molestaria si me dices como ponerlo en el workspace del flex

Hola Roberto,

Generalmente el directorio del workspace de Flex se encuentra en la carpeta de "Mis Documentos" o "Documentos" y la carpeta se llama "Flex Builder 3".

Extrae los archivos de Sistema_Clientes.zip dentro de la carpeta Flex Builder 3. Corre el programa Flex Builder 3 y del lado izquierdo encontrarás el panel de "Flex Navigator". Haz click sobre alguna de las partes blancas de ese panel y selecciona la opción "Import...". Dentro de la opción General haz click en "Existing Projects into Workspace"; haz click en el botón de Next. Verifica que la opción "Select root directory" esté seleccionada y haz click en el botón Browse... Selecciona la carpeta raíz de nuestro proyecto (Sistema_Clientes) da click en el botón de Aceptar y posteriormente en el botón de Finish.

Después de lo anterior observarás que nuestro proyecto aparece dentro del panel izquierdo de "Flex Navigator", da click en el botón de + que está al lado del nombre del proyecto, busca el archivo Sistema_Clientes.mxml (dentro de la carpeta src) y haz doble click sobre él. Verás el código de ese archivo en el panel del lado derecho. Haz click en el botón verde que tiene una flecha blanca que está al lado del botón de imprimir y debajo del menú "Navigate" para ejecutar la aplicación.

Saludos.

Ya solucione todo eso, solo tengo unas dudad ya le he buscado y no le he podido encontrar.

1.-Como quitar que no me genere automaticamente el numero de cliente sino k yo lo meta en un text, y me lo guarde.

2.-Como veo la los registros que tengo en la BD en sqlite

Hola Roberto,

1. Si el tipo de dato que usarás para diferenciar al cliente seguirá siendo de tipo int, entonces no tienes que hacer modificaciones; simplemente agrega un campo de texto (TextInput) en el archivo AltaCliente.mxml y ponle de ID id_txt. En el archivo AltaCliente.as función insertaClientes deberás agregar como parámetro el ID, ejemplo:

Actionscript:
  1. var sql:String = "INSERT INTO `cliente` (id, nombre, direccion, telefono, email)";
  2. sql += " VALUES (:id, :nombre, :direccion, :telefono, :email) ";
  3. queryStatement.clearParameters();
  4. queryStatement.parameters[":id"] = id_txt.text;
  5. queryStatement.parameters[":nombre"] = nombre_txt.text;
  6. ...

No olvides en la función compruebaCliente hacer la comprobación para ver si ya existe algún cliente con ese número.

2. Existen varios programas, en la última parte de esta entrada hablo del SQLite Manager (que es un Complemento para Mozilla Firefox) y ahí viene la liga para descargarlo.

Saludos.

OK CARLA YA HIZE LO QUE ME CONTESTASTES Y FUNCIONO LO QUE NO HE PODIDO HACER ES ABRIR LA BD EN SQLITE MANAGER YA LO BAJE Y YA LO EJECUTO PERO LA BD NO LA HE PODIDO ABRIR NO SE SI ME PUEDAS ORIENTAR O SI TIENES DOCUMENTACION TE LO AGRADECERIA

ahi si me pudieras decir u orientar para hacer la comprobacion de si hay un cliente con ese numero

Hola Roberto,

La base de datos la encuentras en Windows Vista dentro C:\Users\Nombre_Usuario\AppData\Roaming\Sistema_Clientes\database\clientesDB.sqlite. En Windows XP, el directorio es: C:\Documents and Settings\Nombre_Usuario\Datos de programa\Sistema_Clientes\database\clientesDB.sqlite. Una vez que localices la Base de Datos si no la puedes abrir por favor avísame qué sucede o te indica el SQLite Manager. También puedes usar el SQLite Administrator, el cual encuentras en http://sqliteadmin.orbmu2k.de/

Para hacer la comprobación del cliente considera el siguiente código:

Actionscript:
  1. private function compruebaCliente():void {
  2.     var numero:String = id_txt.text;
  3.  
  4.     queryStatement.clearParameters();
  5.     queryStatement.text = "SELECT 1 FROM cliente WHERE id = :id LIMIT 1";
  6.     queryStatement.parameters[":id"] = numero;
  7.  
  8.     try {
  9.         queryStatement.execute();
  10.  
  11.         var result:SQLResult = queryStatement.getResult();
  12.  
  13.         if(result.data != null)
  14.             Alert.show("Ya existe un cliente con ese número");
  15.         else
  16.         insertaCliente();
  17.     }
  18.     catch(error:SQLError) {
  19.         trace("Error: " + error.toString());
  20.     }      
  21. }

Saludos.

Hola carla de Nuevo yo.. haz de pensar como doy lata verdad pero la verdad me interesa mucho aprender esto y me ha sevido mucho tu proyecto para orientarme en algo parecido que quiero hacer las preguntas son las siguientes:

1.- Como hacer para que en un combox aparezcan una lista de varias opciones que puedes selccionar y segun el selecciona guarde ese dato en el campo de la base de datos.

2.- y tambien como hacer que cuando esta checado un checkbox me guarde un dato en el campo de tabla x ejemplo:
si esta checado el checkbox quieros que me guarde si en un campo que tengo que se llama retencion en la tabla clientes y si no esta checado el checkbox me guarde no.

Gracias te lo agradeceria mucho.. yo he programado en delphi pero es muy distinta la sintaxis.

Hola Roberto,

1. Suponiendo que quieres llenar tu combo con forme a los registros de una tabla en la base de datos, te comparto el siguiente código que yo utilizo:

Actionscript:
  1. private function obtenInstituciones():void {
  2.     var query:SQLStatement = new SQLStatement();
  3.     query.sqlConnection = conn;
  4.     query.text = "SELECT * FROM tblinstitucion ORDER BY STRNOMBRE asc";
  5.  
  6.     try {
  7.         query.execute();
  8.         var result:SQLResult = query.getResult();
  9.         var numResults:int = result.data.length;
  10.         for (var i:int = 0; i <numResults; i++)
  11.         {
  12.         var row:Object = result.data[i];
  13. inst_array.push({label:result[i].STRNOMBRE, value:result[i].INTNUMINST});
  14.         }
  15.         cboInstituciones.dataProvider = inst_array; 
  16.     }
  17.     catch(error:SQLError) {
  18.         trace("Error");
  19.     }      
  20. }

Dondo cboInstituciones es nuestro ComboBox. Si simplemente quieres llenar tu Combo con datos estáticos puedes crear un arreglo y asígnarlo a la propiedad dataProvider del combobox:

Actionscript:
  1. inst_array.push({label:"Opción 1", value:1});
  2. inst_array.push({label:"Opción 2", value:2});
  3. inst_array.push({label:"Opción 3", value:3});
  4.  cboInstituciones.dataProvider = inst_array;

Ahora, cuando vayas a almacenar los datos en la base de datos, basta con que obtengas cualquiera de las dos propiedades de nuestro ComboBox (label o value):

Actionscript:
  1. private function insertaCliente():void {
  2.     var sql:String = "INSERT INTO `cliente` (nombre, direccion, telefono, email)";
  3.     sql += " VALUES (:nombre, :direccion, :telefono, :email) ";
  4.     queryStatement.clearParameters();
  5.     queryStatement.parameters[":nombre"] = nombre_txt.text;
  6.     queryStatement.parameters[":direccion"] = direccion_txt.text;
  7.     queryStatement.parameters[":telefono"] = telefono_txt.text;
  8.     queryStatement.parameters[":email"] = correo_txt.text;
  9.         queryStatement.parameters[":institucion"] = cboInstituciones.selectedItem; /* O bien cboInstituciones.selectedLabel */
  10.     queryStatement.text = sql;
  11.     try {
  12.         queryStatement.execute();
  13.         Alert.show("Sus datos han sido almacenados");
  14.         restableceForma();
  15.     }
  16.     catch(error:SQLError){
  17.         trace("Error: " + error.toString());
  18.     }
  19. }

2. Agrega a un CheckBox a tu formulario y ponle como ID sino_check. Para comprobar si un CheckBox está seleccionado o no se utiliza la propiedad selected:

Actionscript:
  1. var sel:String = "";
  2. if(sino_check.selected == true)
  3.      sel = "Sí";
  4. else
  5.      sel = "No";

Y para pasarlo al query como parámetro:

Actionscript:
  1. queryStatement.parameters[":seleccion"] = sel;

Saludos.

Hola carla de Nuevo yo Mira lo del Combobox lo resolvi de la siguiente manera:

//Meto los Datos al Combobox //

//Aqui guardo lo que tenga en text el combobox

queryStatement.parameters[":prestaservicio"] = cbSucursales.text;

No se si eso me cause problemas despues... Por otro lado tengo otras preguntas:

1.- He modificado varias cosas y ahora en la del reporte de la cosulta ya lo he checado y no he podido hacer k me salga la inf. que esta en la bd

2.- No se si esta aplicacion una ya vez terminada se puede subir a una web en donde pueda funcionar

bueno es todo carlas y espero me puedas ayudar Gracias.

Saludos

Hola Roberto,

No puedo ver el código con el que metes los datos al combobox (te recomiendo que el código lo pongas entre los tags [_as_] y [_/as_], sin _ claro está), pero si funciona supongo que no tendrás problemas después.

1. ¿Qué no muestra en el reporte de la consulta? ¿Qué te muestra? ¿Qué error te marca?
2. Esta aplicación está realizada en AIR, el cual solamente puede ser utilizado para aplicaciones de escritorio. En el próximo tutorial (el cual ya estoy próximo a terminar y espero que salga entre semana) veremos cómo realizar una aplicación similar pero usando Flex y AMFPHP con base de datos MySQL (la cual puede ser utilizada como aplicación Web). La única diferencia es que para la consulta no podremos crear el archivo HTML.

Saludos.

Mira carla lo que me sale en el reporte es k no me muestra los datos, y por otra parte que ak te refieres de escritorio a que nomas se podra utilizar en mi pc o tambien red, pues para ir aprendiendo sobre esto es muy bueno tu tutorial y esperare con ancias el proximo tutorial

Así es Roberto, sólo puede funcionar en tu PC, Mac o Linux ya que AIR es multiplataforma. AIR es para aplicaciones de escritorio y Flex es para aplicaciones web. Aún así, verás que en el siguiente tutorial no hay muchos cambios más que la forma de acceder a la base de datos.

Si pudieras subir tu aplicación a algún servidor o bien en RapidShare o MegaUpload y pegar aquí la liga podría revisar por qué no funciona tu consulta.

Saludos.

El codigo esta igual Carla como lo tienes en tu aplicacion no se que es lo que debo de cambiar para que me muestre los datos, pero son mas de los que tu mostrabas en el reporte....

Hola Roberto,

Lo que pasa es que así está en chino saber cuál es el problema... Si tu no sabes qué es lo que debes de cambiar para que muestre los datos yo menos ya que no sé qué modificaciones pudiste hacerle.
Te recomiendo lo de subir el proyecto a un servidor.

Saludos.

Carla, muy buenas tardes, antes que nada gracias por postear el tutorial. Una pregunta SQLite es lo mismo que SQL, porque yo teng una Base de datos armada con PHPMyAdmin me sirve esa? Otra consulta, puede ser que la aprte 3 y 4 del tutorial no funsionen asi como tampoco la descarga de archivos. Bueno era eso solo, te dejo saludos

federico Castellano

Hola Federico,

SQLite no es lo mismo que SQL.
SQL (Structured Query Language) es el lenguaje que se utiliza para acceder y realizar consultas a una base de datos (tu sabes, las sentencias de insert, delete, update, select, create, alter table, etc.)
SQLite es un administrador de base de datos (como SQLServer, MySQL, Oracle, Access, etc.)
PHPMyAdmin genera y administra bases de datos de MySQL, por lo tanto no te sirve tu base de datos para este proyecto.

Este proyecto está realizado en AIR para crear aplicaciones de escritorio; AIR permite el uso de bases de datos de SQLite, pero no te preocupes, en el siguiente tutorial veremos cómo acceder a una base de datos en MySQL desde Flex utilizando AMFPHP (te darás cuenta que lo aprendido en este tutorial te servirá mucho para el siguiente, ya que la forma en que mostramos los registros en los DataGrid(s) es la misma). Es más, me atrevería a decir que es más fácil por medio de AMFPHP y MySQL que usando SQLite.

Saludos.

P.D. No encuentro error en las partes III y IV ni para bajar el archivo ¿qué te muestra? ¿te marca algún error?

Ahh, gracias . De AMFPHP algo manejo pero con Flash. Es mas lo que estaba intentando hacer lo estaba intentando hacer con eso pero me trabe en una parte y decidi cambiar de porgrama y cai aca.
Lo que queria hacer es que tengo 3000 clientes con nombre, empresa, etc,etc y poder buscar uno, editar, borrar e ingresar uno nuevo. Todo esto que este en una base de datos unica ya que acceden diariamente varias personas de difrentes lugares fisicos.
Esto lo habia empezado a hacer con Flash y AMFPHP y SQL, logre bastante pero me trabe y nose si esto servira para eso.

pd: Ya se arreglaron los links, me funsiono mal a mi una ves nose que paso

Muchos Saludos

gracias

Hola Federico,

Como ya tienes conocimientos de AMFPHP con Flash yo creo que te será más fácil lo que veamos en el siguiente tutorial.
En ese nuevo tutorial usaremos varias tablas (a diferencia de éste en el cual solamente tenemos la tabla de clientes), pero la sección de servicios o la de divisas te servirían mucho para tu sistema.

Espero poder publicarlo mañana, si no pudiera te propongo enviarte el archivo de ese tutorial a tu correo.

Saludos.

Dale buenisimo Carla, sos un fenomeno. Espero a que lo publiques, y si me lo podes mandar mejor asi lo voy mirando porque seguro algo no voy a entender. Muchas gracias

Saludos!

Hola, me gustaria saber si con este programa se puede enviar mails masivos a todos los clientes, debido a que hice la base de datos en el Outlook pero ya tengo mas de 3000 clientes y tarda aprox 2 dias en mandar un mail. En caso que no se pueda, existe algun programa que lo permita, y además me avise cuando son los cumpleaños de los clientes??? Muchas gracias y espero algun respuesta. Saludos

Hola Sofía,

En ninguna parte del tutorial se habla sobre enviar mails masivos a los clientes; simplemente es un sistema administrador de información sobre clientes.
Podrías utilizar PHP para enviar tus mails, para eso puedes utilizar la clase PHPMailer o bien revisar el post "Enviar Formulario de Contacto" con Flash y PHP (prestándole atención solamente al código PHP).
Importante: El envío de tus correos dependerá de la configuración de tu ISP o bien del servidor donde corras la aplicación. Además, el uso de estas tecnologías no te exime de que tus correos sean considerados como spam.

Saludos.

excelente todos estos tutoriales, gracias¡¡¡¡¡¡

que es lo que debo de hacer para crear una base de datos para el ingreso de remiciones

Es posible conectar con una bd Access, lo he intentado sin exito modificando esta línea de CrearBaseDatos.as
private function abreConexion():void {
//database = new
database = new File("clientesDB.mdb");

La bd está dentro del directorio src.

Gracias y un saludo.
Javier

Hola, yo tengo el problema de que baje el arhivo zip del proyecto y lo importe como lo explicas en los primeros post pero al momento de darle run flex no hace nada, sabes porque sucede esto?

Hola gracias por el ejemplo.
Disculpe, baje el archivo .zip y lo exporte a mi estacio de trabajo de flex, ejecuto la aplicación pero no hace nada. les agradeceré y me puedan ayudar. Quiero aprender

Hola Alejandro,

Es posible que sea por algún cambio en la versión del Flex Builder o algo por estilo.
¿No marca ningún error? ¿No muestra ni el menú ni las formas?

Saludos.

Escribe un comentario

Nota: Es posible que tu comentario requiera autorización, si es así tu comentario será publicado a la brevedad. Gracias.

(requerido)

(requerido)