Implementación a manera de ejemplo: Calculadora que guarda resultados en DB MySql


Ayuda para que siempre encuentres lo que buscas!

Conocimientos previos:

Necesitamos :
  • Aplicación de conexión a MySql por medio de conector Connector/ODBC
  • Pagina de descarga: http://www.mysql.com/downloads/connector/
  • Tener activo la aplicación “Orígenes de datos ODBC”
  • Entorno de trabajo Win 7 (para este tutorial, funciona también con Xp)
  • Matlab 2009 o 2010a/b
Entorno de Problema

Debemos implementar una calculadora que realize sumas, restas, multiplicacion y division y que los resultados de estas operaciones se guarden en una base de datos que en este caso sera una base creada en Mysql

Propuesta de Solucion

Lo que proponemos es una calculadora simple y en modo texto, claro que con el conocimiento adquirido por este solucion sera de utilidad para la implementacion grafica que es solamente la creacion de los botones y demas opciones graficas que se conectaran a lo que se tenga en modo texto.

Antes de empezar a desgranar el codigo de matlab, hay que ver que es lo que realmente hace para que no perdais el tiempo en un codigo que no os interesara.

Pues bien

Menu principal

en la primera figura podeis visualizar el menu principal de la aplicacion en matlab, sus 4 opciones de operaciones basicas que al ser accesada por el numero que  las presede, ademas de una 5ta opcion que es el resumen el cual nos dara el listado de resultados guardados en la base de datos por cada operacion dada (ver figura 2)

podemos decir tambien que este programa o script como se le llama a los codigos de matlab es muy simple, pues solamente pide uno a uno los valores a evaluar( limite de 2 variables numericas a evaluarse) al hacer la suma o resta u otra operacion el resultado lo mostrara en pantalla y mandara este mismo valor a la base de datos de Mysql.

para la figura 2 este menu se  base en pedir de la base de datos de Mysql los datos grabados por el primer menu (figura 1) segun lo que se requiera, esto es, solo mostrara los valores que fueron grabados en digamos suma y si quiere verse los grabados en resta debera ser accesado de nuevo en el menu para ver el siguiente valor de busqueda, estas busquedas las mostrara en pantalla (modo texto)

La descarga

DESCARGA EL SCRIPT

el codigo
Os recuerdo que al pegarlo este codigo en wordpress pues se desformatio de algunos caracteres que matlab usa y que al volverlo a copiar les dara algunos errores que deberan arreglar, pero os aconsejo mejor descargar el punto m de arriba o descargar este archivo de word calculadora, por tiempo no os podre explicar paso a paso el codigo, pero os aseguro que lo entenderan, que rayos!, la primeras 2 lineas son vairables que defini porque me daban problemas los ciclos while y debian ser inicializados a 0 sus variables de retorno, los demas codigos  son el encabezado que el querybuilder crea para configurar la base de datos(si no teneis el conector obdc, ni una base de datos en mysql, dificilmente les correra).
pese a que el codigo no les correra en la etapa de peticion a la base de datos, el programa es 100% funcional si:
  1. tienen el conector obdc ver: https://vertigo2040.wordpress.com/2011/01/13/conexion-de-mysql-en-matlab/
  2. tienen una base de datos que tenga las tablas suma, resta, multiplicacion y division ver: https://vertigo2040.wordpress.com/2011/01/01/creando-una-base-de-datos-en-mysql/
  3. tener Xammp activado

de otra manera solo sera de referencia para ver como se graba hacia la base de datos y como se pide datos de esta para mostrarla en matlab

opcion = 0;
opcion2=0;
encabezado de configuraciones de query builder para trabajar con el conector obsc para mysql
% Set preferences with setdbprefs.
s.DataReturnFormat = ‘cellarray’;
s.ErrorHandling = ‘store’;
s.NullNumberRead = ‘NaN’;
s.NullNumberWrite = ‘NaN’;
s.NullStringRead = ‘null’;
s.NullStringWrite = ‘null’;
s.JDBCDataSourceFile = ”;
s.UseRegistryForSources = ‘yes’;
s.TempDirForRegistryOutput = ‘C:\Users\sonia\AppData\Local\Temp’;
s.DefaultRowPreFetch = ‘10000’;
setdbprefs(s)
% Make connection to database.  Note that the password has been omitted.
% Using ODBC driver.
%conn = database(‘127.0.0.1′,”,’password’);
prime while o ciclo, este es el menu
while opcion ~= 6
clc
fprintf(‘1. Suma \n’);
fprintf(‘2. Resta \n’);
fprintf(‘3. Multiplicacion \n’);
fprintf(‘4. Division \n’);
fprintf(‘5. Resumen \n’);
fprintf(‘6. Salir \n’);
opcion=input(‘Elija opcion  ‘);
switch opcion
case 1
x=input(‘Ingrese primer numero  ‘);
y=input(‘Ingrese segundo numero  ‘);
S1=x+y;
fprintf(‘La suma es: %f \n’,S1);
%se conecta a la base de datos por el conector obdc
conn = database(‘127.0.0.1′,”,’password’);
% Write data to database. escribe los datos a la base
insert(conn,’suma’,{‘Suma’},S1)
% Close database connection. cierra la coneccion
close(conn)
pause();
case 2
x=input(‘Ingrese primer numero  ‘);
y=input(‘Ingrese segundo numero  ‘);
S1=x-y;
fprintf(‘La diferencia es: %f \n’,S1);
conn = database(‘127.0.0.1′,”,’password’);
% Write data to database.
insert(conn,’resta’,{‘resta’},S1)
% Close database connection.
close(conn)
pause();
case 3
x=input(‘Ingrese primer factor  ‘);
y=input(‘Ingrese segundo factor  ‘);
S1=x*y;
fprintf(‘El producto es: %f \n’,S1);
conn = database(‘127.0.0.1′,”,’password’);
% Write data to database.
insert(conn,’multiplicacion’,{‘multiplicacion’},S1)
% Close database connection.
close(conn)
pause();
case 4
x=input(‘Ingrese dividendo  ‘);
y=input(‘Ingrese divisor  ‘);
S1=x/y;
fprintf(‘La suma es: %f \n’,S1);
conn = database(‘127.0.0.1′,”,’password’);
% Write data to database.
insert(conn,’division’,{‘division’},S1)
% Close database connection.
close(conn)
pause();
case 5
while opcion2 ~= 5
clc
fprintf(‘indique cual resumen ver\n’);
fprintf(‘1. Suma \n’);
fprintf(‘2. Resta \n’);
fprintf(‘3. Multiplicacion \n’);
fprintf(‘4. Division \n’);
fprintf(‘5. Salir \n’);
opcion2=input(‘Elija opcion  ‘);
switch opcion2
case 1
conn = database(‘127.0.0.1′,”,’password’);
% Read data from database.
e = exec(conn,’SELECT ALL Suma FROM suma’);
e = fetch(e);
close(e)
% Assign data to output variable.
A = e.Data
pause();
% Close database connection.
close(conn)
case 2
conn = database(‘127.0.0.1′,”,’password’);
% Read data from database.
e = exec(conn,’SELECT ALL Resta FROM resta’);
e = fetch(e);
close(e)
% Assign data to output variable.
A = e.Data
pause();
% Close database connection.
close(conn)
case 3
conn = database(‘127.0.0.1′,”,’password’);
% Read data from database.
e = exec(conn,’SELECT ALL Multiplicacion FROM multiplicacion’);
e = fetch(e);
close(e)
% Assign data to output variable.
A = e.Data
pause();
% Close database connection.
close(conn)
case 4
conn = database(‘127.0.0.1′,”,’password’);
% Read data from database.
e = exec(conn,’SELECT ALL Division FROM division’);
e = fetch(e);
close(e)
% Assign data to output variable.
A = e.Data
pause();
% Close database connection.
close(conn)
case 5
opcion2=5;
otherwise
fprintf(‘Gracias..Adios  \n’);
end
end
otherwise
fprintf(‘Gracias..Adios  \n’);
end
end
Anuncios

4 comentarios en “Implementación a manera de ejemplo: Calculadora que guarda resultados en DB MySql

  1. le di una lectura rapida, tendre que probarlo mañana en mi otra pc, mi win7x64 no me deja configurar bien las conecciones de datos

    esta funcion :
    insert(conn,’multiplicacion’,{‘multiplicacion’},S1)

    tengo entendido que inserta,y si quisiera reemplazar, hay otra funcion??
    o de donde pudo sacar mas informacion

    Saludos

    Me gusta

  2. lastimosamente para win7 64bit el trabajar con bases de datos tipo Access no funcionan, porque aunque los comandos son los mismos que con el mysql, estos no funcionan bien, pues cuando vas a panel de control y a origenes de obdc y tratas de configurar para Access o excel estos te indican que no estan instalados bien… esto se debe a que ya las versiones mas nuevas no usan este conector… si querias usar Access para tu implementacion, esto no se podra si tienes win 7, en xp y con matlab 6.5 el problema se resuelve…

    Me gusta

  3. Hola, gracias por el Post, me ha ayudado. Explicaré un poco lo que deseo hacer. Tengo un programa en matlab que recibe parámetros de entrada, de forma manual, y me arroja un resultado. Por otro lado, tengo una base de datos en mysql que tiene una lista de precios. Ahora, lo más interesante, a mi programa de matlab le ingreso todos los parámetros, menos uno, éste que falta ingresar se importará desde la base de datos, tomando sólo el primero valor (osea la primera fila). Luego, de un determinado tiempo (sean 15 ó 30 segundos, imagino que podrá colocar un temporizador), el mismo programa se ejcutará, pero considerando el segundo elemento de esa base de datos, que sería la fila 2. De esa forma, el programa se irá ejecutando, después de un determinando tiempo, hasta tomar todos los valores de esa base de datos.
    He revisado tu post conexion-de-mysql-en-matlab pero ahí se hace una lectura y se muestras los valores del base de datos por la pantalla de comandos. Pero lo que yo busco es poder jalar esos valores a una variable y que esta la pueda manipular en un archivo .m.
    Espero me puedas dar algunas ideas, ya que he estado averiguando y no he encontrado mucho al respecto y ya llevo algunos días con esto.
    De todas formas gracias por el tiempo.

    Me gusta

  4. Se me ocurre que esta tabla en mysql de la que hablas tenga un Id el cual es creciente, es decir que el mismo ponga el valor 1,2,3 4 5 etc que sera el indice de tu tabla, luego pongas los valores que deseas ingresar, esto para que cuando pidas buscar el valor en esa tabla, busque un 1 en la columna 1 y copia el valor de la columna 2 y como dices que agrega despues de un tiempo el siguiente, al tener ese sumador en matlab este buscara este indice y copiara la variable.

    Ahora con un e = exec(conn,’SELECT ALL Suma FROM suma’); donde e es donde la variable a guardar y conn la base, selecct all es una peticion que busca en todoa la tabla suma la palabra “suma” y copia el valor a “e”… pues ahora no tiene que buscar en todo la tablar sino solo en una columna y buscar el ID… siempre ten en cuenta que la busqueda debe ser o un string o numero, eso dependera de que tipo de variable creaste en la base de datos, si los numeros son enteros y la busqueda es string te va a dar error, asi que deberias de pasarlo o cambiarlo (eso es facil con comandos en matlab)…

    Siento no ayudarte mas, pero si tengo un tiempito adicional te doy mas ideas

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s