Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-04-2006
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Unhappy 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.
Responder Con Cita
  #2  
Antiguo 05-04-2006
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
no se si esto te ayude

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


Responder Con Cita
  #3  
Antiguo 06-04-2006
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Y si cambias
Código Delphi [-]
if Active then Close;

por

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

Ya que no dará fallo !!!

ops... ya funciona ???
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #4  
Antiguo 07-04-2006
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 07-04-2006
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
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
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
Acceso A Una Segunda Tabla luxus Conexión con bases de datos 7 17-08-2005 21:57:37
Segunda llamada, segunda roman Noticias 16 07-07-2005 21:02:56
TADOStoreProcedure.FindNearest???? Cabanyaler Conexión con bases de datos 2 15-11-2004 16:24:59
Segunda pamtalla ramonibk Varios 2 20-07-2004 08:53:16


La franja horaria es GMT +2. Ahora son las 19:32:33.


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