Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   TADOStoreProcedure falla a la segunda vez (https://www.clubdelphi.com/foros/showthread.php?t=30416)

gcaffe 05-04-2006 19:30:44

TADOStoreProcedure falla a la segunda vez
 
Hola a todos:
Aprovecho para deciros que me gusta el nuevo diseño de la página. Ahora tengo un problema que me lleva por la calle de la amargura, se trata de lo siguiente:

Tengo un procedimiento almacenado en una BD SQL 2000 y es este:

Código SQL [-]
CREATE PROCEDURE FacturasVER
            @Cliente    Integer,
            @FechaIni    Char(10),
            @FechaFin    Char(10),
            @Estado    TinyInt

AS
DECLARE @Sql        nVarChar(200)
BEGIN

    SET @Sql = 'SELECT Facturas.*, Clientes.NombreEmpresa FROM Facturas'
    SET @Sql = RTrim(@Sql)+ ' LEFT JOIN Clientes ON (Facturas.Cliente = Clientes.IdCliente)' 
    SET @Sql = RTrim(@Sql)+ ' WHERE Fecha >= ''' + @FechaIni + ''' AND Fecha <= ''' + @FechaFin + ''''
    IF @Cliente > 0 SET @Sql = RTrim(@Sql)+ ' AND Cliente = ' + RTrim(CAST(@Cliente AS Char(4)))
    IF @Estado = 1 SET @Sql = RTrim(@Sql)+ ' AND Cobrado = 0'
    IF @Estado = 2 SET @Sql = RTrim(@Sql)+ ' AND Cobrado > 0'

    EXECUTE SP_EXECUTESQL @Sql    
    
END
GO
Este procedimiento esta registrado en un TADOStoreProcedure en y es ejecutado cuando se hace clic a un botón, cuyo evento es este:

Código Delphi [-]
procedure TfrmFactura.BarraBtnsbtnBuscarClick(Sender: TObject);
begin
   with DM.FacturasVER do begin
      if Active then Close;
      ProcedureName := 'FacturasVER;1';
      Parameters.Refresh;
      Parameters.FindParam('@Cliente').Value := 0;
        Parameters.FindParam('@FechaIni').Value := '01/01/2006';
        Parameters.FindParam('@FechaFin').Value := '31/12/' + IntToStr(CurrentYear);
        Parameters.FindParam('@Estado').Value := 0;
      Prepared := True;
      Active := True;
   end;
   edCliente.SetFocus;
end;
El caso es que los datos se presentan en un dbgrid, al abrir la ventan la primera vez y hacer clic al botón correspondiente todo funciona bien, pero cuando se cierra la ventana y nuevamente se abre y se hace clic al botón sale el siguiente error:

'Violación de acceso en la dirección 4FF833E4 en módulo 'sqloledb.dll'. Leer dirección 00000018'

He probado todo lo que mis conocimentos da de sí, pero no logro dar con el fallo, si me ayudais les quedaré agradecido.

Muchas gracias.

gmontes 05-04-2006 20:29:52

no se si esto te ayude

http://support.microsoft.com/?kbid=838976


:D

Xianto 06-04-2006 12:13:38

Y si cambias
Código Delphi [-]
if Active then Close;

por

Código Delphi [-]
Active := False;

Ya que no dará fallo !!!

ops... ya funciona ???

gcaffe 07-04-2006 12:04:20

Gracias por sus sugerencias gmontes y Xianto, las he probado pero todo sigue igual, es una cosa tan sencilla que no veo el fallo. Ojalá alguno de ustedes me pueda sugerir alguna solución.

Gracias anticipadas.

gcaffe 07-04-2006 12:20:21

Hola despues de mucho probar se me ocurrió la siguiente modificación y funcionó, pero no estoy satisfecho, me parece que no es necesario tener que desconectar el TADOStoreProcedure de la Base de datos, creo que es muy drástico, salvo mejor parecer. Finalmente quedo así:

Código Delphi [-]
   with DM.FacturasVER do begin
      Active := False;
      Connection := nil;             // Desconectar
      Connection := DM.DB;       // Volver a conectar
      ProcedureName := 'FacturasVER;1';
      Prepared := False;
      Parameters.Refresh;
      Parameters.FindParam('@Cliente').Value := edCliente.Value;
        Parameters.FindParam('@FechaIni').Value := FechaIni;
        Parameters.FindParam('@FechaFin').Value := FechaFin;
        Parameters.FindParam('@Estado').Value := Estado;
      Prepared := True;
   end;

Hasta la próxima y saludos


La franja horaria es GMT +2. Ahora son las 12:29:23.

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