FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
¿Puedes poner un metadata simplificado con algunos datos para probar?
Un script con su create table y los mínimos campos necesarios y algunos datos extraidos con ibexpert, por ejemplo, o el que uses. |
#2
|
||||
|
||||
Voy a cambiar la tabla de nombre para simplicarlo todo. Introducimos un único registro con un único valor = 1. Creamos el Stored Procedure.
Y por último ejecutamos : Esta sentencia me devuelve el valor 201. Esta otra me devuelve el valor 2. Si pruebo con lo siguiente : para ver qué valor queda en Aux_Rand, entonces me devuelve el valor 1 y me devuelve null. P.D. La versión de Firebird es la 2.1
__________________
Piensa siempre en positivo ! |
#3
|
||||
|
||||
... parece como si una vez que Aux_Rand no ha tomado el valor null, ya no lo volviera a tomar más en el bucle y en su comprobación correspondiente If (:"Aux_Rand" is null) porque no hace el Leave adecuado, pero en cambio, al comprobar el valor con OUT_RANDOM, entonces sí que aparece el null.
... no lo entiendo ...
__________________
Piensa siempre en positivo ! |
#4
|
||||
|
||||
Me parece que está claro:
Si lo llamas con el valor 1, que existe, entonces como aux_rand no es null aumenta in_random en 1 hasta que llega a 200+1 y sale, devolviendo 201 Sin embargo, cuando lo llamas con 2, que no existe, no lo encuentra, entonces aux_rand es null y sale con el valor pasado, el 2 en este caso. |
#5
|
||||
|
||||
Si lo que quieres es simplemente el número siguiente al mayor existente, entonces vale con hacer algo simple como:
Y si no pueden existir repetidos entonces mejor un generador. Y si es otra cosa, entonces es que no me he enterado todavía porque después de comer me está dando sueño y voy a por un café... |
#6
|
||||
|
||||
Exactamente !
.... pero eso no es lo que está programado !! Porque si el valor que le paso es '2', que no existe, y por lo tanto Aux_Rand es null, entonces correctamente sale. Pero si le paso '1', en la siguiente pasada por el bucle While, se incremeta 1 al 2, y debería de volver a comprobarlo, y ahora que el valor es 2 y no existe, me debería devolver 2 (!!) y no 201 ya que entra de nuevo en la suma !!
__________________
Piensa siempre en positivo ! |
#7
|
||||
|
||||
Acabo de leer tu último comentario.
El problema surge que hay muchos usuarios que acceden a esa tabla, y tengo que saber si cada usuario va a tener un número único. Para eso genero un número aleatorio cualquiera, y compruebo si existe ya previamente. Si no existe, perfecto, devuelvo ese mismo número aleatorio que le pasé de entrada, como salida. Pero si el número aleatorio (por p... casualidad) ya existiera, tengo que buscar otro que no exista para que cada usuario diferente tenga garantizado que su número obtenido es único en la tabla. Generalmente la tabla estará vacía, porque es una tabla para unos cálculos temporales, que después se muestran en un StringGrid. Una vez que salga del Form con ese StringGrid, los datos se vuelven a borrar de la tabla.
__________________
Piensa siempre en positivo ! |
#8
|
||||
|
||||
Por qué esta modificación, si ejecuto con el valor de entrada 1, entonces me devuelve 3 (!!! ) y si el valor de entrada es 2, entonces me devuelve 2 !! Parece como si no gestionase correctamente la Suma + 1 del parámetro de Entrada In_Random. Pero es que como ya dije anteriormente lo he probado incluso con variables propias del procedimiento, sin tocar la variable de entrada, y tampoco ....
__________________
Piensa siempre en positivo ! |
#9
|
||||
|
||||
Prueba esto:
|
#10
|
||||
|
||||
Voy a probar con fb2.1, es que tenía ahora mismo la 1.5 y lo he adaptado porque no funcionaba las comillas, el rows 1, etc.
Ahora vuelvo... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Stored Procedure !!! | Ledian_Fdez | C++ Builder | 0 | 02-03-2010 14:01:29 |
Stored Procedure | StartKill | MySQL | 2 | 27-08-2008 06:18:44 |
Ver los Stored Procedure | tgsistemas | SQL | 0 | 06-04-2004 17:18:22 |
Stored Procedure | tgsistemas | SQL | 1 | 27-02-2004 13:10:33 |
problema con stored procedure | Markoz | Firebird e Interbase | 8 | 27-06-2003 13:46:31 |
|