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 Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 09-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
Ok. Tu problema de hecho es muy común para quienes se inicián en SqlServer

Resulta que cuando manejas fechas estás pueden ser manejadas por Sql server de dos maneras diferentes, en formato americano (yyyy-dd-mm) o en formato europeo (yyyy-mm-dd). Esto provoca que si en el equipo donde ejecutas tu aplicación la configuración regional define el formato en dd/mm/yy
y la configuración en tu servidor sql está en mm/dd/yyy, cualquier paso de parámetros en formato datetime va a generar el problema que tu tienes.

La solución que implementamos en la empresa fué estandarizar el uso de los campos DateTime. Por ejemplo establecimos que cualquier sp o función que recibiera como parametros valores de fecha estos fueran convertidos a char con el formato 120, y de manera interna en el Sp o función hacemos la reconversión a formato datetime de Sql.

Lo que ganamos con esto es que sin importar la configuración de los equipos cliente nuestros sps y funciones siempre funcionarán.


Usando tu sp ejemplifico lo que hacemos


Código SQL [-]

/******************************************************/
/* Este procedimiento almacenado establece la fecha de débito de       */
/* un cheque. La fecha debe ser convertida a char en formato 120      */
/******************************************************/
 CREATE 
   PROCEDURE spDebitarCheque 
     (
       @IdCheque int, --Define el Id del Cheque
       @FechaDebito Char(10) --Define la fecha de débito del cheque (formato 120)
     )
 AS 
  Declare
    @VDtFecDebito As DateTime --Almacena en formato DateTime la fecha del débito

  --Con esto aseguras que sin importar la configuración de sql server
  -- o del cliente el valor de fecha será traducido de manera satisfactoria
  Set @VDtFecDebito = Convert(DateTime,@FechaDebito,120)

  --Se inicia la transacción
  Begin tran 
     UPDATE Cheque.dbo.Cheques
        SET FechaDebito = @VDtFecDebito   
      WHERE IdCheque =@IdCheque
     If @@ERROR <> 0 
        Begin
          Rollback Tran
          GoTo ErrorHandler
        End
  Commit Tran

Return

ErrorHandler:
  --Tratamiento del error

ahora bíen desde tus aplicaciones deberas estandarizar de igual manera el paso del valor para que en todas sea de esta manera

Código Delphi [-]
ADOSPDebCheque.Parameters.ParamByName('@FechaDebito').Value := 
  FormatDateTime('yyyy-mm-dd',DTPFechaDebitoPanel.Date);
Y listo con eso te vas a ahorrar un millón de dolores de cabeza.


Mucha suerte

Última edición por poliburro fecha: 09-12-2006 a las 05:09:29.
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
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 06:26:42.


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