PDA

Ver la Versión Completa : como obtener un numero entero a raiz de multiplicar dos campo string


buzon
25-11-2006, 23:29:30
hola todos
Estoy realizando un sistema de mediciones energetica. y tengo un problema que debo obtener un valor real a raiz de una operacion que envuelve dos campos string.

Tengo tres campos
relct varchar(10), que me aceptara 5000/80 ejemplo expresado
relpt varchar(10), que me aceptara valores diferentes 1000/50
multiplo money;

debo obtener un resultado de esos dos campos

multiplo := StrtoInt(relct) * StrtoInt(relpt);
pero esto no me resuelve 5000/80 debe darme un entero y 1000/50 otro entero, pero no es así.
que alguien me ilumine por favor.

mlara
26-11-2006, 02:23:34
Lo que necesitas es un evaluador de expresiones. Me explico: Cuando yo tengo una cadena '2+2', no hay ninguna función como StrToInt en Delphi o cast o convert en un motor de bases de datos que te devuelva el resultado 4. Entonces lo que tienes que utilizar es un evaluador de expresiones. El evaluador de expresiones pueda estar escrito en C, C++, Delphi, PHP, SQL, etc... Todo depende del contexto en donde corra tu aplicación. Entonces en código podría verse así:


multiplo := EvaluarExpr(relct) * EvaluarExpr(relpt);

Bueno, pero dado que estás en el foro de MS SQL Server, te puedo decir que tienes estas opciones:

1) Escribir una función externa (en el lenguaje que quieras compilada como una DLL), para ser ejecutada desde el propio servidor.

2) Escribir el evaluador como un SP en TRANSACT-SQL, para ser ejecutado desde el propio servidor.

3) Escribir una DLL para ser ejecutada desde Delphi o desde cualquier otra herramienta (C++ Builder, Visual coso, etc.)

4) Escribir el evaluador en tu aplicación cliente.

Sugerencia: Escríbete una DLL que permita registrar una función externa para ser ejecutada desde el servidor.

buzon
28-11-2006, 02:46:09
Sirve de mucho la aclaración, escribi, pensando q podía haber algunas de esa funciones echa que me permitiera hacer el trabajo. ya sea en delphi, usando alguna de la que mencionaste, pero no es posibles.

Tengo una q otras opciones.

INTENTARE ESCRIBIRME UNA QUE ME AYUDE, TU SUGERENCIA ES MUY BUENA Y VALIDA.
CREO Q ME BIENES MEJOR CREARLA EN DELPHI PARA QUE ME HAGA EL TRABAJO EN LA CAPTURA INMEDIATAMENTE.

UN SALUDO DESDE SANTO DOMIGO :)

Paoti
09-12-2006, 04:10:08
wow, desconocia que sql server pudiera usar funciones embedidas en una dll


me informare al respecto gracias mlara

__hector
10-12-2006, 05:36:00
Creo que te iria mas facil si escribes una funcion utilizando solo T-SQL en el mismo SQL Server. Una funcion que, por ejemplo, tome como entrada un varchar (100/50), localice la posicion en la que se encuentra el operador (/), declare dos variables para el divisor y el dividendo en este caso (100 y 50), los convierta a enteros, ejecute la operacion y retorne el resultado.

No es algo complejo de hacer si tus casos siempre seran asi de simples (una sola operacion con un operador ya conocido/esperado). De hecho, es sumamente simple.

mlara
10-12-2006, 18:03:28
Eso está bien, pero si se requiere de un sistema que no se quede corto en nada debería soportar la jerarquía de signos y su alteración mediante el uso de paréntesis. Así, el SP o la función externa en SQL Server debería ser capaz de evaluar una expresión como esta:


'(408000-408000*0.375-408000*0.4-408000*0.01-57800-22000+408000/30*90)*0.015'


Esto significa que debería declararse al menos un parámetro de entrada tipo cadena lo suficientemente grande. Podría sugerir 1024 no importa si el código está escrito en lenguaje C o en T-SQL. Para implementar esta función también podría sugerir hacer uso de recursividad.

Claro está que para el caso de buzon lo que dice hector es muy cierto.