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 23-04-2006
[pepon386] pepon386 is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Valencia
Posts: 68
Poder: 20
pepon386 Va por buen camino
Invalid request BLR al modificar un Procedimiento Almacenado

Hola a todos! No se si es muy normal, pero me he encontrado un problema bastante extraño que es fácil de reproducir: Tengo una base de datos de Firebird con un procedimiento almacenado que genera contadores. Pues bien, hasta hace poco funcionaba correctamente, sin ningún problema, hasta que he necesitado hacer un pequeño cambio en dicho procedimiento. Para ello realicé los cambios pertinentes, y al intentar hacer un commit me lanzó el siguiente error:
ISC ERROR CODE: 335544343
ISC ERROR MESSAGE: invalid request BLR at offset xxx bad parameter number

Ahora no me permite volver al código inicial del procedimiento almacenado, siempre me lanza la misma excepción.

La versión de Firebird que tengo instalada es la 1.5.3, aunque previamente tenía la 1.5.2 (ya me daba este error) y la actualicé para ver si se solucionaba.
Para editar la base de datos uso Marathon 3.0.0.50

Para poder reproducir el error os pongo el script para generar la base de datos:




Código SQL [-]
SET SQL DIALECT 3;
/*===========================================================================*/
/*Connect to Database */
/*===========================================================================*/
create database 'c:\Datos\TEST.FDB' user 'SYSDBA' password '';
 
/*===========================================================================*/
/*Domain Definitions */
/*===========================================================================*/
create domain CONTADOR as integer default 0 not null;
create domain DESCRIPCION as varchar(40) character set ISO8859_1 default '' collate ISO8859_1;
create domain FACTURA as integer default 0 not null;
create domain SERIE_FAC as varchar(5) character set ISO8859_1 default '' not null collate ISO8859_1;
create domain TIPO_CONT as varchar(5) character set ISO8859_1 default '' not null collate ISO8859_1;
 
/*===========================================================================*/
/*Table Definitions */
/*===========================================================================*/
/*Table: CONTADORES*/
create table CONTADORES(
  TIPO TIPO_CONT collate ISO8859_1,
  SERIE SERIE_FAC collate ISO8859_1,
  CONTADOR CONTADOR);
 
/*Table: SERIES*/
create table SERIES(
  SERIE_FAC SERIE_FAC collate ISO8859_1,
  DESCRIPCION DESCRIPCION collate ISO8859_1,
  PRIMERA_FAC FACTURA);
 
commit work;
set autoddl off;
set term ^;
create procedure PR_NUEVO_CONT (I_SERIE varchar(5) character set ISO8859_1, 
  I_TIPO varchar(5) character set ISO8859_1)
returns (O_CONTADOR integer)
as
begin exit; end
^
commit work^
alter procedure PR_NUEVO_CONT (I_SERIE varchar(5) character set ISO8859_1, 
  I_TIPO varchar(5) character set ISO8859_1)
returns (O_CONTADOR integer)
as
begin
  SELECT CONTADOR
    FROM CONTADORES
    WHERE SERIE = :I_SERIE AND TIPO = :I_TIPO
    INTO O_CONTADOR;
  IF (O_CONTADOR IS NULL) THEN
  BEGIN
    INSERT INTO CONTADORES
      (TIPO, SERIE, CONTADOR)
    VALUES
      (:I_TIPO, :I_SERIE, 0);
    O_CONTADOR = 0;
    IF (I_TIPO = 'FRA') THEN
    BEGIN
      SELECT PRIMERA_FAC
        FROM SERIES
        WHERE SERIE_FAC = :I_SERIE
        INTO O_CONTADOR;
      IF (O_CONTADOR > 0) THEN
        O_CONTADOR = (O_CONTADOR - 1);
    END
  END
  O_CONTADOR = ( O_CONTADOR + 1 ) ;
  UPDATE CONTADORES
    SET CONTADOR = :O_CONTADOR
    WHERE TIPO = :I_TIPO AND SERIE = :I_SERIE;
  suspend;
end
^
 
commit work^
set autoddl on^
set term ;^
Responder Con Cita
  #2  
Antiguo 26-04-2006
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 22
Osorio Va por buen camino
Mira este post

Puede ser esto mismo.

Bueno es una posibilidad.


http://www.clubdelphi.com/foros/showthread.php?t=18277

Saludos,
Responder Con Cita
  #3  
Antiguo 26-04-2006
[pepon386] pepon386 is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Valencia
Posts: 68
Poder: 20
pepon386 Va por buen camino
Gracias por el enlace, ya lo había leído, pero no ivan por ahí los tiros. Digo "ivan" porque ayer por fin descubrí la causa del error: Estoy acostumbrado a generar las bases de datos de Firebird con la aplicación Marathon (disponible en SourceForge) y hasta ahora no me había dado ningún problema, pero después de darle vueltas y darme cuenta de que si generaba la base de datos directamente desde un script no me fallaba (esto lo hago con la aplicación IBOConsole), y después de hacer varias pruebas, descubrí que el fallo está en la aplicación Marathon, que por alguna razón no modifica correctamente el procedimiento almacenado.
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
procedimiento almacenado kejos MS SQL Server 3 02-09-2008 17:39:22
modificar Procedimiento Almacenado JulioGO Firebird e Interbase 5 07-04-2005 00:32:24
Que Significa este Error Invalid Request BLR at offset 38???? AGAG4 Firebird e Interbase 1 07-02-2005 22:33:16
Procedimiento Almacenado Ulises Providers 3 30-01-2004 18:14:58
procedimiento almacenado haron Firebird e Interbase 2 29-09-2003 01:09:56


La franja horaria es GMT +2. Ahora son las 17:13:57.


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