Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2006
buzon buzon is offline
Miembro
 
Registrado: nov 2006
Posts: 10
Poder: 0
buzon Va por buen camino
Smile como obtener un numero entero a raiz de multiplicar dos campo string

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.
Responder Con Cita
  #2  
Antiguo 26-11-2006
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 22
mlara Va por buen camino
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í:

Código:
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.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 26-11-2006 a las 03:27:55.
Responder Con Cita
  #3  
Antiguo 28-11-2006
buzon buzon is offline
Miembro
 
Registrado: nov 2006
Posts: 10
Poder: 0
buzon Va por buen camino
Smile Gracias amigo!

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
Responder Con Cita
  #4  
Antiguo 09-12-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 22
Paoti Va por buen camino
wow, desconocia que sql server pudiera usar funciones embedidas en una dll


me informare al respecto gracias mlara
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #5  
Antiguo 10-12-2006
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
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.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #6  
Antiguo 10-12-2006
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 22
mlara Va por buen camino
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:

Código SQL [-]
'(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.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 10-12-2006 a las 19:12:45.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
sumar cada digito de un numero entero emenchi34 Varios 9 20-09-2006 00:02:35
Como obtener el maximo numero generado en campo autonumerico makinita C++ Builder 4 11-09-2006 12:14:50
Convertir un campo string a entero en consulta serhasae SQL 4 24-08-2006 21:00:02
conversion de string a entero click Varios 2 30-12-2004 11:26:56
Obtener el número (posición) de un campo en una tabla negama Conexión con bases de datos 2 04-10-2003 01:28:28


La franja horaria es GMT +2. Ahora son las 01:38:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi