Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   error de seleccion (https://www.clubdelphi.com/foros/showthread.php?t=45341)

rruffino 29-06-2007 16:19:41

error de seleccion
 
Hola amigos del foro, estoy teniendo inconvenientes cuando hago un procedimiento almacenado. El tema es que hago una seleccion de una tabla, y guardo el campo seleccionado dentro de la variable correspondiente. Cuando empieza a recorrer los datos, comienza desde el ultimo al primero, y al primero me lo toma como valor nulo y se me viene todo abajo. Aqui les pongo el codigo.

Código SQL [-]
  for select rel_concepto_impuesto.impuesto, nombre
      from  rel_concepto_impuesto join impuesto
      on rel_concepto_impuesto.impuesto= impuesto.id_impuesto
      where rel_concepto_impuesto.concepto =:num_concepto
      into :impuesto_concepto, :impu do
          if(impuesto_concepto is null)then
          begin
            exception except_genera_comprobante;
          end

Les agradezco si me pueden dar una mano. Gracias!!!!:eek:

jhonny 29-06-2007 16:49:27

A ver, pues no entiendo, pues según veo, el mismo procedimiento indica que si uno de esos valores es nulo, debe parar de hacer cosas.

Mejor dicho, es muy confuso el hecho de que no quieras que pare todo cuando tienes un:
Código SQL [-]
exception except_genera_comprobante;
para que salga cuando (impuesto_concepto is null). Si quieres que no pare solo quita esa linea ¿No?, a lo mejor no entendí muy bien la cuestión. :(

rruffino 29-06-2007 17:01:44

gracias por tu respuesta
 
Gracias por la respuesta, justamente corto porque el valor de la seleccion es nulo.
En la tabla yo tengo 3 registros que son los que me tiene que devolver, cuando yo hago el debug me barre los tres registros de atras hacia adelante y cuando llega al primero me retorna null. por eso puse la execpion para contolar por qu salta.
Desde ya muchas gracias

jhonny 29-06-2007 17:17:30

Osea que con cambiar el orden de tu selec te quedaría bien?, si esa respuesta es positiva, pues ordena la consulta por el campo de tu conveniencia, asi, por ejemplo:
En el siguiente caso ordeno la consulta por rel_concepto_impuesto.impuesto descendentemente.
Código SQL [-]
for select rel_concepto_impuesto.impuesto, nombre
      from  rel_concepto_impuesto join impuesto
      on rel_concepto_impuesto.impuesto= impuesto.id_impuesto
      where rel_concepto_impuesto.concepto =:num_concepto
      order by rel_concepto_impuesto.impuesto dec
      into :impuesto_concepto, :impu do
          if(impuesto_concepto is null)then
          begin
            exception except_genera_comprobante;
          end

Espero haber entendido esta ves, si no pues ya veremos ;) :).

rruffino 29-06-2007 17:46:39

no nos entendimos, je
 
amigo mio, no nos entendimos. no es una cuestion de orden sino de que no me obtiene los datos, en realidad me obtiene los 3 registros pero en el ultimo registro que carga en las variables impuesto_concepto y impu, los valores son nulos, cuando deberian tener valores definidos.
Ese es todo mi problema, me barre los 3 registros y mas alla de que ordene ascendente o descendente, al ultimo registro que levanta me pasa los valores a nulo.
Gracias, un abrazo!

jhonny 29-06-2007 17:58:03

Ahhh, :D, no entendía, creo que sería de ayuda si nos muestras las dos tablas con sus datos, tal vez asi, podamos sacar alguna conclusión. Por ejemplo, de momento no me queda claro la tabla a la que pertenece el campo nombre...

rruffino 29-06-2007 18:22:59

aqui va
 
Amigo, son 3 tablas las involucradas.
Concepto
Impuesto y
Rel_usuarrio_concepto.

Representan una relacion n a n.
lo importante de concepto es el id_concepto, que en el procedimiento lo paso como parametro (:num_concepto)
Entonces con ese dato, lo que hago es buscar en la tabla rel_usuario_concepto todos los registros cuyo campo que surge de la relacion con concepto sean igual al num_concepto. En el procedimineto a esos impuestos, los guardo en la variable :impuesto_concepto. Como me hace falta el nombre del impuesto para futuras operaciones, tambien lo selecciono y de ahi sale el join.
Espero haberme explicado bien.
Con respecto a los datos, particularmente, en la tabla conceptos deje el ergistro cuyo id es 1, en la relacion concepto impuesto tengo 3 registros, los 3 tienen en su campo concepto el valor 1, por lo tanto tiene que estar en la seleccion, pero cuando los selecciona, al ultimo registo que barre de la relacion lo pone en null.

Ya probe de varias formas, es mas, probe haciendo una seleccion simple y me da el mismo problema, no asi con otros preocedimietnos de similar estructura
Gracias!!!

jhonny 29-06-2007 18:42:02

Personalmente veo que esta extraño el asunto y que asi a simple vista no encuentre el "Porque" del asunto, aunque puede haber otro compañero que si se pille el problema facilmente, en todo caso, prueba a usar la siguiente consulta y nos cuentas, como te va:

Código SQL [-]
for   select rel_concepto_impuesto.impuesto, impuesto.nombre
      from  rel_concepto_impuesto join impuesto
      on ((rel_concepto_impuesto.impuesto = impuesto.id_impuesto)
      and (rel_concepto_impuesto.concepto = :num_concepto))
      into :impuesto_concepto, :impu do
          if(impuesto_concepto is null)then
          begin
            exception except_genera_comprobante;
          end

rruffino 29-06-2007 19:15:06

ja, no funciona
 
amigo, gracias nuevamente, gracias. Probé con el codigo que me pasaste y no, hace el mismo trabajo.
Saludos, y mucha graias, por mi parte seguiré renegando hasta ver que pasa.
Chau chau


La franja horaria es GMT +2. Ahora son las 04:39:04.

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