Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-02-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Cómo trabajar con los parámetros de un procedimiento almacenado?

Me disculpan pero este tema ya lo había publicado pero con otro titiulo, que pasa que sin darme cuenta había otro tema casí con el mismo titulo, solo cambiaba en una preposisción, y parece que según el estilo del foro supongo yo, por que no lo he leído completo aquellos hilos que tengan casí el mismo titulo y a los que se les haya adado respuesta se sugeriran como respuesta para el nuevo.
Hola a todos, después de agotar todas las posibilidades acudo a ustedes una vez mas para que me ayuden. tengo el siguiente problema, tengo un procedimiento almacenado en sql server 2000:

Código SQL [-]
CREATE PROCEDURE spAntiguedad
                            (@Proveedor int,    
                             @Proveedor1 int,                         
                             @Fecha1 datetime,
                             @Fecha2 datetime) 
AS
SELECT     Proveedores.IdProveedor, Proveedores.NombreProveedor, Facturas.IdFactura, Facturas.Descripcion, Facturas.Importe, Facturas.FechaRecepcion, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Saldo, 
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 0  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 31 THEN Facturas.Importe END MENOSDE30dias,
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE ()) > 30  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 61 THEN Facturas.Importe  ELSE 0 END ENTRE3060dias,
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 60  AND  DATEDIFF(day, FechaRecepcion, GETDATE()) < 91 THEN Facturas.Importe ELSE 0 END ENTRE6090dias,
                    CASE
                        WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 91 THEN Facturas.Importe ELSE 0 END MASDE90dias 
FROM         Proveedores INNER JOIN Facturas ON Proveedores.IdProveedor=Facturas.IdProveedor
WHERE     (Aplicada = 0 AND Proveedores.IdProveedor>=@Proveedor AND Proveedores.IdProveedor<=@Proveedor1 AND Facturas.FechaRecepcion>=@Fecha1 AND Facturas.FechaRecepcion<=@Fecha2)
GO

Este procedimiento lo utilizo en un reporte en delphi 7. En tiempo de diseño le establezco el valor a todos los parámetros a través de la propiedad parameters. Como podrán apreciar son cuatro parámetros. Reitero que los valores de los parámetros están establecidos, esto lo he chequeado hasta la saciedad. El caso es que cuando ejecuto la aplicación, la cual le falta muy poco para terminarla, antes que salga el formulario princiapal que contiene el menu principal, me pone el siguiente error:
Nombre del proyecto raised exception class EOleException with message Procedure 'Nombre del procedimiento almacenado' expects parameters '@Proveedor1', which was not supplied. Esto no lo entiendo, no me refiero al mensaje, se que quiere decir que espera el valor del parámetro el cual no ha sido suministrado, me refiero a que he chequeado que sí le paso el valor del parámetro. Este procedimiento no da ningún error cuando lo ejecuto con el Query Analyzer, funciona perfectamente. Ojala puedan ayudarme. Muchas gracias. Para que le sirva mas de ayuda tengo un fomulario donde le paso el valor de los parámetros al procedimiento almacenado, pero es que no llega ni ahí. El código del botón aceptar de este formulario es el siguiente:
Código Delphi [-]
begin
 QrAntiguedad.ADOSPAntiguedad.Close;
 if CheckBox1.Checked then
 begin
    QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Proveedor').Value := 0;
    QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Proveedor1').Value := 5000000;
 end
 else
 begin
    QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Proveedor').Value := StrToInt(Edit1.Text);
    QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Proveedor1').Value := StrToInt(Edit2.Text);
    QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Fecha1').Value := Trunc(DTP1.DateTime);
    QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Fecha2').Value := Trunc(DTP2.DateTime);
 end;
 QrAntiguedad.ADOSPAntiguedad.Open;
 QrAntiguedad.QRLabel12.Caption := DateToStr(DTP1.DateTime);
 QrAntiguedad.QRLabel14.Caption := DateToStr(DTP2.DateTime);
 QrAntiguedad.Preview;
end;

Pero repito que este formulario yo o invoco desde una opción del menu principal que tengo en mi aplicación. El error del que les hablo se genera desde que ejecuto la aplicación.
Responder Con Cita
  #2  
Antiguo 16-02-2007
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
seguramente se esta llamando el precimiento desde otro lugar donde no le pasas los parametros.
Coloca un breakpoint al comeinzo de este codigo y fijate si entra ahi cuando te salta el error.
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 16-02-2007
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 21
jacanche Va por buen camino
POr que no te aseguras que este cerrado el componente ADOSPAntiguedad em tiempo de diseño, el error se me hace muy similar a cuando se queda abierto en tiempo de diseño el componente, al momento de crearlo en tiempo de ejecucion intentara abrirlo antes de que le puedas asignar los parametros
__________________
Saludos

Alfredo
Responder Con Cita
  #4  
Antiguo 16-02-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
jacanche gracias por tu respuesta y por tomarte tu tiempo ne responder a mi tema. Pero no se si te referirás a la propiedad active del ado stored procedure. Pues la revise y la misma está establecida a false en tiempo de diseño. Realmenete no sé lo que está pasando pues esto lo he hecho en otras ocasiones y no he tenido problemas. Ahora quiero que te fijes en el código del procedimiento almacenado. Verás que el primer parámetro es @Proveedor y el error que me sale hace alusión al parámetro @Proveedor1, si quito este parámetro entonces me da el mismo error pero con el parámetro @Fecha1. Repito que el procedimiento funciona perefectamente bien en sql server 2000. Me encuentro atado de pies y manos. Gracias.
Responder Con Cita
  #5  
Antiguo 16-02-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Ok, Por que no intentas esto.


En lugar de definir los parámetros en tiempo de diseño, los creas en tiempo de ejecución algo así como

With TadoSp Do
Begin
Close;
Parameters.Clear;
Parameters.CreatePArameter(Parameter1);
.
.
Parameters.CreatePArameter(ParameterN);
End;

Y ya despúes de creados asignas los valores y lo ejecutas?.
Suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #6  
Antiguo 16-02-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Saludos poliburro. Tu siempre disponible y ofreciendo tus soluciones. Te diré que ya resolví el problema. Todo estaba perfectamente bien todo el lio estaba en que a modo de prueba ese mismo procedimiento almacenado yo lo utilizaba en un formulario con dbdgrid, pero en ese formulario como solamente era de prueba ya yo le había hecho las modificaciones al procedimiento alamacenado, es decir le había agregado tres parámetros mas a los cuales no les había asignado el valor. Por esso cuendo ejecutaba la palicación me decía que faltaba por asignar el valor al parámetro @Proveedor1. Gracias.
Responder Con Cita
  #7  
Antiguo 16-02-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Gracias ya encontré la solución. Después de analizar detenidadmente lo que había hecho.
Responder Con Cita
  #8  
Antiguo 16-02-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Crandel gracias por tu tiempo. Ya encontré la solución, era un error que estaba cometiendo y que no me daba cuenta hasta minuciosamente me detuve a revisar el código.
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
Parámetros de un procedimiento almacenado efelix Conexión con bases de datos 0 06-02-2007 16:43:30
Parámetros del procedimiento almacenado efelix MS SQL Server 6 03-11-2006 20:37:34
¿como llamo un procedimiento almacenado? jeshu252006 Conexión con bases de datos 6 28-10-2006 17:49:55
Como crear un procedimiento almacenado Javi2 SQL 1 11-02-2005 13:32:40
Parametros a procedimiento almacenado JulioGO PHP 1 03-09-2004 19:04:50


La franja horaria es GMT +2. Ahora son las 00:35:52.


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