Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 21/06/2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Join Date: May 2005
Posts: 29
Poder: 0
RESP 3.0 Va por buen camino
XSQLDA Index out of range

Mucha me da este error al momento de ejecutar un procedimiento almacenado utilizo: D6, FB, 1.5.2, IBX 6.08, y la verdad no doy por que me da este error, ya probe eliminando y volviendo a colocar el componente y haciendo lo mismo en la BD y no puedo resolverlo.

Gracias por su ayuda
Reply With Quote
  #2  
Old 21/06/2005
cahp cahp is offline
Miembro
 
Join Date: May 2003
Location: Alicante
Posts: 90
Poder: 24
cahp Va por buen camino
Hola

Si lo ejecutas dirctamente en la BD, tambien te da el error?

Saludos.
Reply With Quote
  #3  
Old 21/06/2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Join Date: May 2005
Posts: 29
Poder: 0
RESP 3.0 Va por buen camino
Fijate que solamente me da al ejecutarlo desde delphi y lo he hecho con muchos procedimientos este es el codigo.


Código SQL [-]
  
SET TERM ^ ;
CREATE PROCEDURE SER_CALCULA_PRECIO_MANO_OBRA(
    MANO_OBRA INTEGER,
    TIPO_PRECIO CHAR(2))
RETURNS (
    PRECIO_VENTA NUMERIC(15,2))
AS
   DECLARE VARIABLE VCOSTO DECIMAL(15,2);
   DECLARE VARIABLE VFACTOR DECIMAL(15,4);
   DECLARE VARIABLE VPRECIO DECIMAL(15,2);
   DECLARE VARIABLE VBASE_PRECIO CHAR(1);
   DECLARE VARIABLE VTIPO CHAR(1);
   DECLARE VARIABLE VVALOR NUMERIC(15,2);
   DECLARE VARIABLE VPORCENTAJE NUMERIC(15,2);
   DECLARE VARIABLE VVALOR_BASE NUMERIC(15,2);
begin
  SELECT COSTO_HORA, FACTOR_GANANCIA, PRECIO_HORA
  FROM SER_MANO_OBRA
  WHERE CODIGO = :MANO_OBRA
  INTO :VCOSTO, :VFACTOR, :VPRECIO;
  PRECIO_VENTA = 0.0;
  IF (VPRECIO = 0) THEN
  BEGIN
     IF (VFACTOR > 1) THEN
        PRECIO_VENTA = REDONDEAR(VCOSTO * VFACTOR,2);
     ELSE           
       IF (VFACTOR < 1) THEN
          PRECIO_VENTA = REDONDEAR(VCOSTO / VFACTOR,2);
       ELSE
          PRECIO_VENTA = VCOSTO;
  END
  ELSE
     PRECIO_VENTA = :VPRECIO;
  IF (RTRIM(:TIPO_PRECIO) <> '') THEN
  BEGIN
      SELECT BASE_COSTO_PRECIO, TIPO, PORCENTAJE, 0.0
      FROM FAC_TIPO_PRECIO
      WHERE (CODIGO = :TIPO_PRECIO)
      INTO :VBASE_PRECIO, :VTIPO, :VPORCENTAJE, :VVALOR;
      IF ((:VVALOR = 0) AND (RTRIM(:VBASE_PRECIO) <> '') AND (RTRIM(:VTIPO) <> '')) THEN
      BEGIN
          IF (:VBASE_PRECIO = 'C') THEN
             VVALOR_BASE = :VCOSTO;
          IF (:VBASE_PRECIO = 'P') THEN
             EXECUTE PROCEDURE SER_CALCULA_PRECIO_MANO_OBRA :MANO_OBRA, ' ' RETURNING_VALUES :VVALOR_BASE;
             
          IF (VTIPO = '+') THEN
             PRECIO_VENTA = :VVALOR_BASE + REDONDEAR(:VVALOR_BASE * (:VPORCENTAJE / 100),2);
          IF (VTIPO = '-') THEN
             PRECIO_VENTA = :VVALOR_BASE - REDONDEAR(:VVALOR_BASE * (:VPORCENTAJE / 100),2);
      END
      ELSE
         PRECIO_VENTA = :VVALOR;
   END
   PRECIO_VENTA = REDONDEAR(PRECIO_VENTA,2);
  suspend;
end
^
SET TERM ; ^
y la forma de ejecutarlo es la siguiente:

Code:
 
function TdmServicio_Proc.Calcula_Precio_Mano_Obra(Mano_Obra : LongInt; Tipo_Precio : String) : Double;
begin
   SPCalcula_Precio_Mano_Obra.ParamByName('MANO_OBRA').Value := Mano_Obra;
   SPCalcula_Precio_Mano_Obra.ParamByName('TIPO_PRECIO').Value := Tipo_Precio;
   SPCalcula_Precio_Mano_Obra.ExecProc;
   Result := SPCalcula_Precio_Mano_Obra.ParamByName('PRECIO_VENTA').Value;
end;
No entiendo he hecho esto un sin numero de veces y nunca me habia dado este error, y al buscar el la web es muy poca la informacion que aparece sobre esto.

Hasta pronto
Reply With Quote
  #4  
Old 21/06/2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Join Date: May 2005
Posts: 29
Poder: 0
RESP 3.0 Va por buen camino
Talking Asunto resuelto

Señores encontre MI problema y es que el mensaje de error da cuando se define un procedimiento con n parametros y se ejecuta con mas de esos parametros, a mi me paso porque lo defini cuando estaba conectado a una BD y luego lo ejecute sobre otra base de datos (sin percatarme) y bueno ese fue mi gran error.

Gracias y hasta luego
Reply With Quote
  #5  
Old 02/02/2006
kikecg kikecg is offline
Miembro
 
Join Date: Feb 2006
Location: Madrid
Posts: 39
Poder: 0
kikecg Va por buen camino
Mismo error, diferente solución

Hola.

Yo me he encontrado con el mismo error al hacer un Insert, sin ningún procedimiento de por medio.

Desde Delphi aparecía el mismo error, desde IBExpert, por ejemplo, se ejecutaba la sentencia correctamente.

El problema era que la sentencia en Delphi se ejecutaba desde un TIBQuery. Cambiando este componente por un TIBSQL, la misma sentencia se ejecuta sin problemas.

Saludos a tod@s.
Reply With Quote
  #6  
Old 15/12/2006
fcios fcios is offline
Miembro
 
Join Date: Jul 2003
Posts: 108
Poder: 23
fcios Va por buen camino
A mi me ocurrio cuando no tenia definido el procedimiento almacenado, no se porque no me mostraba el error comun de "procedimiento desconocido", y a su vez me faltaba actualizar la sentencia SQL de WHERE en el componente ya que le habia agregado un campo mas a la clave primaria.
Saludos
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 20:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi