Saltar al contenido principal

 none
Funciones Matemáticas desde Base de Datos o un Textbox RRS feed

  • Pregunta

  • Hola, necesito que el usuario cree las funciones aritméticas y lógicas desde un textbox (estilo celda de excel) y guardarlas en una base de datos, hasta acá todo bien.

    El tema es cuando las quiero usar a esas formulas, xq me las lee como un string. 

    Ejemplo. Guardo en la base de datos (A + B) * 2 + C / D

    Ejemplo. si (a > b); a = c; a= d;

    Las letras son variables que las recupero de otra tabla de la base de datos.

    Si me pueden orientar con este tema se los agradezco.

    domingo, 20 de octubre de 2019 23:42

Todas las respuestas

  • Me temo que lo que quieres hacer es mucho más complicado de lo que piensas. En otros lenguajes, como por ejemplo javascript, tienes una función "eval" que te permite pasar como argumento un string a ejecutar y lo interpreta sobre la marcha. Pero no existe nada parecido en VB.NET. Aquí todo el código tiene que ser compilado antes de ejecutarse.

    Tienes varias opciones:

    1) Compilar tus fórmulas. Esto se puede hacer llamando a la clase VBCodeProvider y pasándole el parámetro GenerateInMemory=True, y luego llamando al ensamblado que te genera mediante System.Reflection. Seguramente te convendrá cargar el ensamblado en un AppDomain, porque sino no se puede descargar y te quedaría permanentemente consumiendo memoria. Hay bastantes ejemplos en la red sobre cómo se hacen estas cosas, pero hay que saber bien lo que haces, requiere conocimientos extensos sobre programación en .Net.

    2) Llamar a algún motor externo que interprete la fórmula, por ejemplo, al "engine" de javascript o de vbscript si están instalados en ese equipo. Una variante de esta técnica usa la "chapucilla" de usar un DataTable y añadirle una columna calculada, metiendo en el cálculo la expresión que quieres evaluar y usando columnas "ficticias" tales como a,b,c.. para pasarle los parámetros.

    3) Escribir por tu cuenta un intérprete de expresiones. Esto es complicadillo de hacer, pero tiene la ventaja de que te da flexibilidad completa para definir la sintaxis y las funciones que quieras usar en tus fórmulas. Escribí un pequeño artículo sobre este tema aquí: https://www.scribd.com/document/23194492/Como-crear-un-interprete-de-expresiones-en-NET


    lunes, 21 de octubre de 2019 6:38
  • Gracias Alberto, voy a leer tu articulo, es un punta pie para empezar. Habia leído algo sobre Script Control que se podria llegar a hacer lo que necesito,no encontre como cargar valores a las variables, voy a buscar algo mas de información al respecto.

    Pero con tu apunte tengo para leer y analizar a ver si puedo llegar a hacer lo que necesito. gracias por tu tiempo.

    • Propuesto como respuesta Pablo Rubio martes, 22 de octubre de 2019 15:25
    lunes, 21 de octubre de 2019 23:14