Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 20
efelix Va por buen camino
Hola Poliburro, muchas gracias por tu respuesta, se nota que eres una persona aventajada en sql sever. Modifiqué el procedimiento almacenado como me indicaste y logré algo que no sabía. Es decir poner el formato de fecha a día-mes-año, porque sql server por defecto lo pone en mes-día-año, es decir que aprendí algo nuevo. Ahora en cuanto a delphi modifiqué el código segun me sugeriste y nada el mismo error. Tengo mis dudas en cuanto a lo que me dices, pues en mi aplicación he utilizado otros procedimientos almacenados que tienen como parámetros campos del tipo datetime, los cuáles les paso a través de un datetimepicker y nunca me dieron ese tipo de error, la única diferencia es que aquellos devuelven un conjunto de resultados y en este caso estoy tratando de actualizar la base de datos. Yo creía que delphi internamente se encargaba de hacer el cambio. Por ejemplo tengo un formulario donde tengo un dbgrid donde muestro un conjunto de registros que cumplen una determinada condición a través de un procedimiento almacenado, el código es el siguiente:
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 := Trunc(DTPFecha1.Date);
ADOSPPendientesPago.Parameters.ParamByName('@FechaRecepcion1').Value := Trunc(DTPFecha2.Date);
ADOSPImporteTotal.Parameters.ParamByName('@Fecha').Value := Trunc(DTPFecha1.Date);
ADOSPImporteTotal.Parameters.ParamByName('@Fecha1').Value := Trunc(DTPFecha2.Date);
ADOSPImporteTotal.ExecProc;
EditImporteTotal.Text := ADOSPImporteTotal.Parameters.ParamValues['@ImporteTotal'];
ADOSPPendientesPago.Open;
end;
Esto me funciona perfectamente bien.
Y el código del procedimiento almacenado que me devuelve el conjunto de registros es este:
Código SQL [-]
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
Por eso te digo que no se donde está el problema. Te reitero la diferencia es que este evuelve un conjunto de resultados y el otro es para actualizar. No se si esa es la causa como tu mismo dijiste soy nuevo en ambas cosas, tanto en sql server como en delphi. El error que se origina te lo pongo textualmente: 'Aplication uses a value of the wrong type for the current operation', cuando le doy ok se detiene en la línea que ya expliqué en el mensaje anterior aún cuando ya hizé el cambi que me sugeriste:ADOSPDebCheque.Parameters.ParamByName('@FechaDebito').Value := FormatDateTime('yyyy-dd-mm',DTPFechaDebitoPanel.Date). Espero puedas ayudarme y hayas entendido mi explicación. Te reitero las gracias.
Responder Con Cita
  #2  
Antiguo 12-12-2006
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Cita:
Empezado por efelix
El error que se origina te lo pongo textualmente: 'Aplication uses a value of the wrong type for the current operation', cuando le doy ok se detiene en la línea que ya expliqué en el mensaje anterior aún cuando ya hizé el cambi que me sugeriste:ADOSPDebCheque.Parameters.ParamByName('@FechaDebito').Value := FormatDateTime('yyyy-dd-mm',DTPFechaDebitoPanel.Date). Espero puedas ayudarme y hayas entendido mi explicación. Te reitero las gracias.

Jjejeje hay un error en la sentencia que estas usando amigo pues debe ser de la siguiente manera

Código Delphi [-]
 With  ADOSPDebCheque.Parameters Do
  ParamByName('@FechaDebito').Value :=    
           FormatDateTime('yyyy-mm-dd',DTPFechaDebitoPanel.Date).

Si observas debe ser yyyy mmm dd

Ahora bien, revisa que en tu sp estes pasando el valor convertido en date time .

No debe presentarte problema.

Cuando usas trunc, en escencia estas haciendo algo parecido al formatdatetime prueba pasandoles el periodo 23/12/2006 al 31/12/2006 a los sps que te devuelven recorsets.

suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 12-12-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 20
efelix Va por buen camino
Hola poliburro, disculpa que te moleste, pero todavía sigue dando el mismo error, no se que hacer, cambié lo que me dijiste y nada sigue dando le mismo error. Ahora no te entiendo cuando me dices que chequee si en el stored procedure estoy pasando el valor convertido en datetime, como verifico esto, disculpa mi desconocimiento, espero no importunarte con tanta molestia. Te pongo nuevamente el código para que lo veas:
Código Delphi [-]
begin
 with RGDebitarCheques do
 begin
   CriteriodeSeleccion.Caption := Format('%S',[Items[ItemIndex]]);
   case ItemIndex of
   0:begin
      Panel1.Visible := True;
      ADOSPDebCheque.Close;
      ADOSPDebCheque.Parameters.ParamByName('@IdCheque').Value := EditNoCheque.Text;
      ADOSPDebCheque.Parameters.ParamByName('@VDtFechaDebito').Value := FormatDateTime('yyyy-mmm-dd',DTPFechaDebitoPanel.Date);
      ADOSPDebCheque.ExecProc;
     end;
Responder Con Cita
  #4  
Antiguo 13-12-2006
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Podrias postear el nuevo código del sp que te está dando problemas? para ver si es ahí el error.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 13-12-2006
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 20
efelix Va por buen camino
Hola poliburro. Este es el código del procedimiento almacenado:
Código SQL [-]
CREATE PROCEDURE spDebitarCheque 
  (@IdCheque int,
              @FechaDebito char(10))
   

AS DECLARE 
     @VDtFechaDebito AS DateTime
    SET @VDtFechaDebito = CONVERT(DateTime,@FechaDebito,120)

BEGIN TRAN
 UPDATE [Cheque].[dbo].[Cheques] 
 SET    [FechaDebito]   = @VDtFechaDebito
WHERE IdCheque =@IdCheque
 IF @@ERROR <>0
    BEGIN
       RollBack Tran
       Goto ErrorHandler
 END
Commit Tran
Return 
ErrorHandler:
GO
Te reitero que cuando lo ejecuto en Sql Server funciona perfectamente bien.
Responder Con Cita
  #6  
Antiguo 13-12-2006
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 22
Albano Va por buen camino
humilde opinion

Hola... apenas estoy empezando con el tema que estan tocando, así que no creo poder ayudar. Pero vi un error en el código que podría ser lo que causa el problema: Estan poniendo "mmm" en lugar de "mm"...
Tal vez quede como tonto por no saber nada del tema, pero tal vez les ayude... me arriesgaré.
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita
  #7  
Antiguo 13-12-2006
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Presiento que el problema está en los valores de los parámetros. por que el código del Sp es correcto, bueno te falta el tratamiento de errores pero eso lo puedes omitir de momento.

Por que no lanzas un showmessage en delphi mostrando los valores del editbox que estas pasando como id de cheque, y el resultado del formatdatetime que estás pasando como fecha de debito?

creo que está pasando mal uno de los valores. y de esa manera podrias darte cuenta.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Se puede pasar una tabla a un procedimiento almacenado? AFilth MS SQL Server 2 07-02-2006 13:10:21
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
actualizar con dbexpres y un procedimiento almacenado felixgo Conexión con bases de datos 1 22-06-2004 12:21:17
Procedimiento Almacenado Ulises Providers 3 30-01-2004 18:14:58


La franja horaria es GMT +2. Ahora son las 08:29:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi