Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
row_count erroneo en INSERT

Saludos a todos y gracias por su atencion, utilizo firebird 2.0.1 y hace unos dias tuve un "error", por llamarlo de alguna manera, al validar ROW_COUNT despues de un script de Insercion. El problema era que a pesar de que no se insertaban datos (lo comprobe ejecutando unicamente desde el SELECT) el ROW_COUNT me devolvia 4, note que al retirar el left join a una vista (ver sentencia SQL) el problema quedaba solucionado. Pero me quede con la duda de porque pasa esto y es por eso que pregunto si a alguien le ha sucedido algo parecido.
La sentencia que devolia tal resultado era algo asi como la siguiente:
Código SQL [-]
  INSERT INTO TABLA1
    (Campo1, Campo2, ...Campo10)
  SELECT FIRST 1 Campo1, Campo2, ...Campo10
  FROM TABLA2 P
  INNER JOIN TABLA3 D
  ON P.ID = D.ID_P
  INNER JOIN TABLA4 U
  ON D.ID_U = U.ID
  LEFT JOIN TABLA5 I
  ON P.ID_I = I.ID
  LEFT JOIN
  (
    SELECT ID_P, MIN(CAMPO)  AS CAD
    FROM VISTA
    WHERE UNIDADES > 0
    GROUP BY ID_P
  ) VW
  ON P.ID = VW.ID_P
  INNER JOIN TABLA6 M
  ON M.TIPO = :TIPO
  AND M.FOLIO = :FOLIO
  AND M.TURNO = :TURNO
  AND M.STATUS = 'CA'
  LEFT JOIN STORED_PROC(M.TIPO, M.CTE, M.PROV, P.ID, U.ID) C
  ON C.ESP IS NOT NULL
  WHERE P.ID = :ID_P
  AND D.FACTOR > 0
  AND D.PRECIO > 0
  ORDER BY D.FACTOR, D.ID_U;

  INSERTADOS = ROW_COUNT;
y les comento que mientras redactaba este hilo, me acabo de encontrar con algo que no se si sea curioso pero me saca mas dudas, si muevo de posicion el left join a la VISTA , pues resulta que me arroja el dato correcto(ROW_COUNT = 0) y segun cambie de lugar la VISTA me devuelve diferentes valores erroneos. Este es el script que me devuelve el dato correcto, igual si pongo la vista despues del SP me da el dato correcto.
Código SQL [-]
  INSERT INTO TABLA1
    (Campo1, Campo2, ...Campo10)
  SELECT FIRST 1 Campo1, Campo2, ...Campo10
  FROM TABLA2 P
  INNER JOIN TABLA3 D
  ON P.ID = D.ID_P
  INNER JOIN TABLA4 U
  ON D.ID_U = U.ID
  LEFT JOIN TABLA5 I
  ON P.ID_I = I.ID
  INNER JOIN TABLA6 M
  ON M.TIPO = :TIPO
  AND M.FOLIO = :FOLIO
  AND M.TURNO = :TURNO
  AND M.STATUS = 'CA'
  LEFT JOIN
  (
    SELECT ID_P, MIN(CAMPO)  AS CAD
    FROM VISTA
    WHERE UNIDADES > 0
    GROUP BY ID_P
  ) VW
  ON P.ID = VW.ID_P
  LEFT JOIN STORED_PROC(M.TIPO, M.CTE, M.PROV, P.ID, U.ID) C
  ON C.ESP IS NOT NULL
  WHERE P.ID = :ID_P
  AND D.FACTOR > 0
  AND D.PRECIO > 0
  ORDER BY D.FACTOR, D.ID_U;

  INSERTADOS = ROW_COUNT;
alguien me puede dar alguna informacion al respecto de esto?, esta mal, o no es sana, la secuencia que llevo con los joins(inner, inner, left, left, inner left)? cabe aclarar que el SP no hace ninguna actualizacion ni insercion de datos solo es una consulta que ademas solo devuelve 1 solo registro.

De antemano muchas gracias y espero sus comentarios o sugerencias.

Última edición por boreg fecha: 16-04-2008 a las 23:41:14.
Responder Con Cita
  #2  
Antiguo 25-04-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Sin comentarios

Pues sigo sin encontrar informacion al respecto, como sea esta solucionado, pero queda la duda de porque se generan datos erroneos, por si alguien encuentra o sabe algo al respecto aun sigo interesado en saber cual es el error. Saludos a todos.
Responder Con Cita
  #3  
Antiguo 29-04-2008
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
si realmente es un error como dices búscalo en el bugtraquer de firebird (se entra por www.firebirdsql.com)

si no lo encuentras crea un reporte de bug con la versión y condicones junto con tu código de ejemplo para reproducirlo.. desde ya toda la comunidad estará agradecida y devolveras algo a cambio de utilizar firebird de forma gratuita..

salu2
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
Distribución de teclado erróneo Lepe Windows 13 07-01-2008 07:32:18
Código "erroneo" pero que funciona ixMike Varios 8 11-04-2007 18:57:08
Insert me cierra otro Insert motrildelphi Conexión con bases de datos 0 05-05-2005 12:20:27
ROW_COUNT en FireBird dc_systems Firebird e Interbase 4 29-06-2004 19:53:29
FireBird row_count injavies Firebird e Interbase 6 31-03-2004 14:48:09


La franja horaria es GMT +2. Ahora son las 00:02:54.


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