Power Builder - Minimos y Maximos

 
Vista:
Imágen de perfil de Antonio
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Minimos y Maximos

Publicado por Antonio (1271 intervenciones) el 12/09/2005 19:14:03
Hola amigos:

Necesito de su ayuda para resolver este dilema...

Tengo PB 7.0 y como todos saben, solo puede manejar un límite de 15 dígitos numéricos, ahora bien, tengo que guardar datos numericos de hasta 20 digitos, estos datos los estoy guardando como string en una tabla con los campos "Minimo" y "Máximo", ahora bien, cuando el usuario ingresa un dato numérico como string como este "1234567890123456789" debo saber si este numero esta compendido entre el minimo y maximo que se encuentra en mi tabla, dentro de mi tabla el minimo es "1234567890123456789" y el máximo es "1234567890123456800", mi aplicativo debe indicarle al usuario que el numero que esta ingresando esta dentro del rango del minimo y maximo, si no lo esta, debo indicarle al usuario que esta ingresando un dato erroneo...

Ahora bien, estoy utlizando el siguiente código:

long ll_control
string ls_minimo = '',ls_maximo = ''

Select control
into: ll_control
from clavestarjetas
where ( ( clavestarjetas.minimo >=: vr_minimo ) and
( clavestarjetas.maximo <=: vr_maximo ) ) ;

if sqlca.sqlcode = 0 then
MessageBox(¡Aviso','Dato bien ingresado...', Information! )
end if

El caso es que siempre me manda el código 100, nunca lo puede determinar mi aplicativo, es posible hacer esto con datos string o que sugerencia me pueden dar.

Gracias a todos de antemano...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Minimos y Maximos

Publicado por Jose Luis Urrea (3 intervenciones) el 12/09/2005 21:41:29
Yo lo probe asi y funciona:

SELECT *
FROM t094_prueba
WHERE ( TO_NUMBER(:as_numero) >= t094_prueba.numero1 ) AND
( TO_NUMBER(:as_numero) <= t094_prueba.numero2 )

as_numero es el parametro de recuperacion del datawindow y debe ser de tipo String, ya de lo demas se encarga la Base de Datos que tiene en la tabla t094_prueba los campos numero1 y numero2 number de 20 cada uno.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antonio
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:Minimos y Maximos

Publicado por Antonio (1271 intervenciones) el 13/09/2005 00:12:30
Hola Jose Luis:

Gracias por tu amable respuesta, pero tengo dos preguntas:

1) que base de datos estas usando
2) que version de PB estas usando

porque yo uso PB 7.0 y una base de datos de Access 2000 y cuando ejecuto el codigo que me indicaste me dice que la funcion TO_NUMBER no existe o esta indefinida.

gracias,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Minimos y Maximos

Publicado por Jose Luis Urrea (3 intervenciones) el 13/09/2005 00:42:44
Yo use una BD Oracle y PB 10, busca en Access como convertir el parametro de recuperacion a NUMBER. yo tengo entendido que hay una instruccion SQL estandard para hacerlo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Minimos y Maximos

Publicado por Julio (137 intervenciones) el 13/09/2005 05:58:22
Prueba con format

select * from tabla
where format(campo_string,'99999999999999999999999999999') >= condicion;

espero te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antonio
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:Minimos y Maximos... existe este problema

Publicado por Antonio (1271 intervenciones) el 13/09/2005 16:38:54
Mil gracias a los dos por su respuesta... pero existe este problema:

En la tabla tengo un campo llamado minimo y otro campo llamado maximo, los dos campos son de tipo string con una longitud de 20 caracteres, ahora bien, el usuario escribe en un sinlgelineedit como string un numero de 20 digitos, por ejemplo : '85366656742548586923', despues que lo escibe en un boton da clic y lo mando a una funcion asi:

f_minimosmaximos ( Trim ( sle_codigo.text ) )

esta funcion recibe la variable string vr_codigo y luego trato de comparar string contra string de esta forma:

long ll_registro

Select registro
into: ll_registro
FROM clavestarjetas
WHERE ( clavestarjetas.minimo <=: vr_codigo ) and
( clavestarjetas.maximo >=: vr_codigo ) ;

if sqlca.sqlcode = 0 then
return true;
else
return false;
end if

Como PB 7.0 no puede soportar variables de tipo long ó ulong ó integer mayores a 15 digitos es por eso que no puedo convertirlos a variables numericas, todo lo tengo que hacer en variables de tipo string, incluso en el momento de registrar las claves deben ser de tipo string, así mismo, no puedo convertir el campo string de la tabla a numerico porque PB solo soporta hasta 15 digitos numéricos y necesito que sean hasta 20 dígitos.

la pregunta es la siguiente:

¿como puedo comparar que el campo minimo sea mayor o igual a la variable que contiene el dato y al mismo tiempo que el campo maximo sea menor o igual a la mima variable de comparación ?... esta comparación es string contra string, sin necesidad de convertir los datos a numericos.

Mil gracias nuevamente por su ayuda....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Minimos y Maximos... existe este problema

Publicado por Julio (137 intervenciones) el 13/09/2005 22:07:00
mmmm.... lo tengo claro lo que quieres es hacer la comparacion con un between entre dos campos de tipo cadena..... bueno, lo que podrias hacer en tu sentencia es convertir el format a los dos tipos, es decir:

select *
from tabla
where format(campo_string1,'999999999999999999999999999999') >= format(:variable_string,'9999999999999999999999') and format(campo_string2,'9999999999999999999999999999999999') <= format(:variable_string,'9999999999999999999999');

es decir, conviertes en tu Select ojo no en el Power a numerico de longitud grande.

Espero te resulte... a ver que pasa...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antonio
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:Minimos y Maximos... SIIIIIIIIIIIIIIIIIIIIIIIII

Publicado por Antonio (1271 intervenciones) el 13/09/2005 23:06:03
Hola Julio:

Mil gracias por tu ayuda, esta resultando al 100%.

Estoy en deuda contigo, nuevamente mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar