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 21-06-2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Registrado: 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
Responder Con Cita
  #2  
Antiguo 21-06-2005
cahp cahp is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 90
Poder: 21
cahp Va por buen camino
Hola

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

Saludos.
Responder Con Cita
  #3  
Antiguo 21-06-2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Registrado: 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:

Código:
 
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
Responder Con Cita
  #4  
Antiguo 21-06-2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Registrado: 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
Responder Con Cita
  #5  
Antiguo 02-02-2006
kikecg kikecg is offline
Miembro
 
Registrado: feb 2006
Ubicación: 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.
Responder Con Cita
  #6  
Antiguo 15-12-2006
fcios fcios is offline
Miembro
 
Registrado: jul 2003
Posts: 108
Poder: 21
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
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


La franja horaria es GMT +2. Ahora son las 07:29:45.


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