Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Unhappy Procedimiento almacenado

Hola a todos. Muchas gracias por este foro. He publicado dos problemas en el foro, debo decir que aún no he resuelto mis problemas pero, muchas gracias por los que responden que siempre aportan algo de interés. Como diecn muchos he pensado bien en está pregunta para que alguién se preocupe en contestarla. El problema es el siguiente: desarrollo una aplicación de bases de datos en delphi 7 y sql server 2000, en ella tengo un formulario donde tengo como controles los siguientes, dos datetimepicker, un dbgrid, un edit, un botón de comando y controles de la paleta ado tales como un ado connection, dos adostored procedure y por supuesto un data source. Hay un procedimiento almacenado donde le paso como parámetro un rango de fecha y debe devolverme las facturas pendientes de pago para ese rango, estos parámetros los paso a través de los datetimepicker, el procedimiento almacenado es el siguiente:
CREATE PROCEDURE spPendientesPago
@FechaRecepcion datetime,
@FechaRecepcion1 datetime

AS
SELECT Facturas.IdFactura, Proveedores.NombreProveedor, Facturas.Descripcion, Facturas.Importe
FROM Facturas INNER JOIN
Proveedores ON Facturas.IdProveedor = Proveedores.IdProveedor
WHERE (Facturas.Aplicada = 0) AND Facturas.FechaRecepcion>=@FechaRecepcion AND Facturas.FechaRecepcion<=@FechaRecepcion1
GO
Esto funciona a la perfección en sql server.
Hay otro procedimiento almacenado que utilizo para que me de el total de las facturas sin pagar según el rango de fechas, tiene la siguiente sintáxis:

CREATE PROCEDURE spImporteTotalporFechas
@Fecha datetime,
@Fecha1 datetime,
@ImporteTotal money OUTPUT
AS
SELECT @ImporteTotal=SUM(Importe)
FROM Facturas
WHERE (Aplicada = 0) AND FechaRecepcion>=@Fecha AND FechaRecepcion<=@Fecha1
GO
el cual también funciona a la perfección en sql server. Ahora en delphi en el código del evento onclick del botón de comando hago esto:
Código Delphi [-]
begin
ADOSPPendientesPago.Close;
if DTPFecha2.Date  < DTPFecha1.Date  then
begin
 MessageDlg('La fecha final debe ser superior a la inicial',mterror,[mbok],0);
 Exit;
end;
ADOSPPendientesPago.Parameters.ParamByName('@FechaRecepcion').Value := DTPFecha1.Date;
ADOSPPendientesPago.Parameters.ParamByName('@FechaRecepcion1').Value := DTPFecha2.Date;
ADOSPImporteTotal.Parameters.ParamByName('@Fecha').Value := DTPFecha1.Date;
ADOSPImporteTotal.Parameters.ParamByName('@Fecha1').Value := DTPFecha2.Date;
ADOSPImporteTotal.ExecProc;
EditImporteTotal.Text := ADOSPImporteTotal.Parameters.ParamValues['@ImporteTotal'];
ADOSPPendientesPago.Open;
end;
En tiempo de ejecución establexco el rango de fechas le doy al botón y el dbgrid se me llena con las facturas pendientes de pago y en el edit se totaliza el importe total de las facturas sin pagar para el rango de fechas seleccionados. Ahora comienza el problema. En la base de datos en la tabla facturas hay en estos momentos cuatro facturas pendientes de pago, me muestra en el dbgrid solamante tres, y me pone en el edit el importe total de las facturas mostradas según el rango de fechas, me excluye una factura, por ejemplo las fechas de estas facturas son desde el 10/04/2006 hasta 16/04/2006, la factura del del 10/04/2006 no la muestra en el dbgrid y por supuesto el procedimiento almacenado que tiene el parámetro de salida pone nada más el importe total de las mostradas en el dbgrid. Repito esto funciona perfectamente bien en sql server 2000, es decir los procedimientos almacenados los he probado y están bien. Otra curiosidad en tiempo de diseño situo un dbgrid le pongo directamente el valor a los parámetros, es decir el rango de fechas y funciona el dbgrid muestra las cuatro facturas pendientes de pago, pero ne tiempo de ejecución no. Además cuando en tiempo de ejecución las dos fechas las pongo iguales me da el siguiente error 'exception in class EVariantTypeCastError with message could no convert variant of type (null) into type (string)', el cursor se detiene en la parte del código donde le asigno a la propiedad text del edit el parámetro de salida del segundo procedimiento almacenado. No se ya que hacer. Espero me puedan ayudar, acepto cualquier sugerencia, por eso mando el código para que lo vean y me diagn donde puede estar el problema. Muchas gracias.
Responder Con Cita
 



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
Procedimiento almacenado LucianoRey MS SQL Server 2 23-08-2005 00:37:06
Procedimiento Almacenado scooterjgm Conexión con bases de datos 5 18-01-2005 18:21:32
Procedimiento almacenado y Ado LucianoRey MS SQL Server 11 06-07-2004 22:55:23
procedimiento almacenado haron Firebird e Interbase 2 29-09-2003 01:09:56


La franja horaria es GMT +2. Ahora son las 04:51:09.


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