Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Manejo de fechas en SQL Server Usando DatetimePicker (https://www.clubdelphi.com/foros/showthread.php?t=79745)

hondaalberto 06-08-2012 20:48:12

Grabar en la Base de datos solo la Fecha de un DateTimerPicker
 
Buenas Tardes Amigos

Utilizo Delphi 7 y Sql Server Express 2008 y estoy utilizando un Componente DateTimerPicker para Grabar la Fecha en la base de datos pero me Graba la fecha y la Hora y me interesa solo la fecha.

En la base de datos tengo un Campo llamado Fecha del tipo DateTime, silo lo coloco de tipo date me da un error porque el DateTimepicker le envia tambien la Hora.

Utilizo en Siguiente Codigo en delphi:

Código Delphi [-]
DataSource.DataSet.FieldByName('Fecha').AsDateTime:=DTPFecha.Date;

Casimiro Notevi 06-08-2012 20:54:47

¿Y por qué no usas un tipo de dato sólo fecha?, un date.

ecfisa 06-08-2012 20:55:39

Hola hondaalberto.

La propiedad Date del TDateTimePicker devuelve un valor del tipo TDate por lo que no puede estar allí el problema.

No conozco Sql Server Express 2008, pero proba de este modo:
Código Delphi [-]
  DataSource.DataSet.FieldByName('Fecha').Value:= DTPFecha.Date;

Saludos.

hondaalberto 06-08-2012 21:12:20

cambie el campo a tipo date y probe tambien haciendolo como dice Ecfisa y me devuelve el siguiente error.


---------------------------
Debugger Exception Notification
---------------------------
Project RetailPos.exe raised exception class EOleException with message 'Error al convertir una cadena de caracteres en fecha y/u hora'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

ecfisa 06-08-2012 21:41:38

Hola.

A ver... proba de este modo:
Código Delphi [-]
   DataSource.DataSet.FieldByName('Fecha').AsDateTime:= Trunc(DTPFecha.Date);
Si no habrá que esperar que alguien con conocimientos de MS SQL te oriente.

Por cierto, ¿ Que componentes estas usando y de que tipo es el campo "Fecha" ?

Saludos.

hondaalberto 06-08-2012 22:09:57

Si no habrá que esperar que alguien con conocimientos de MS SQL te oriente.

Por cierto, ¿ Que componentes estas usando y de que tipo es el campo "Fecha" ?

Saludos.

Me sigue dando el Mismo error.

Conecto la Base de datos utilizando ADOConection y el campo Fecha si lo declaro del tipo Date en la Base de datos me develve el error que mostre en uno de los mensajes anteriores y si esta declarado del tipo datetime me graba la fecha mas muchos ceros en la parte dnd va la hora.

Casimiro Notevi 06-08-2012 22:12:51

Si el campo es del tipo date y tú le pasas el valor del datetime, que también es un date, no te puede salir el mensaje: "'Error al convertir una cadena de caracteres en fecha y/u hora'."

Así que estás mirando en el sitio que no corresponde, estás conectado a otra base de datos, estás pasando el valor de un tedit normal y no es un tdatetime, etc.

hondaalberto 06-08-2012 22:21:05

me sigue dando el error... y el campo es del tipo date...

Casimiro Notevi 06-08-2012 22:23:51

Da más información o pon el código fuente que lo veamos (copia->pega), que no somos adivinos ;)

hondaalberto 06-08-2012 22:59:20

El código en donde estoy utilizando el Componente DatetimePicker es el Siguiente:

Código Delphi [-]

procedure TFFacturadeVentas.BGuardarClick(Sender: TObject);
......
TCabVentasTemp.FieldByName('Fecha').Value:= DTPFecha.Date;


procedure TFFacturadeVentas.TCabVentasTempBeforePost(DataSet: TDataSet);
....
 TCabVentasTemp.FieldByName('Fecha').Value:= DTPFecha.Date;



procedure TFFacturadeVentas.FormActivate(Sender: TObject);
...
 DTPFecha.Date:=Date; // Componente Datetimepicker




 procedure TFFacturadeVentas.DBGDatosDblClick(Sender: TObject);
 ....
 FieldByName('Fecha').Value:= DTPFecha.Date;




procedure TFFacturadeVentas.DBGDatosColExit(Sender: TObject);
....

DataSource.DataSet.FieldByName('Fecha').Value:= DTPFecha.Date;

hondaalberto 06-08-2012 23:01:28

Este es el codigo de las Dos tablas en donde intento enviar esos datos de fecha:

Código SQL [-]
CREATE TABLE [dbo].[Lin_Ventas_Temp](
    [Documento_Tipo] [nvarchar](15) NOT NULL,
    [Documento_No] [int] NOT NULL,
    [Fecha] [datetime] NOT NULL,
    [Cliente_No] [int] NOT NULL,
    [Producto_No] [int] NOT NULL,
    [Descripcion] [nvarchar](50) NOT NULL,
    [Cantidad] [decimal](25, 2) NULL,
    [Precio_de_Venta] [money] NULL,
    [Descuento] [money] NULL,
    [Porciento_Itbis] [decimal](25, 2) NOT NULL,
    [Importe_Itbis] [money] NOT NULL,
    [Grupo_Itbis] [nvarchar](7) NOT NULL,
    [Usuario] [nvarchar](50) NOT NULL,
    [Fecha_Hora_Registro] [nvarchar](22) NOT NULL




CREATE TABLE [dbo].[Cab_Ventas_Temp](
    [Documento_Tipo] [nvarchar](15) NOT NULL,
    [Fecha] [datetime] NOT NULL,
    [Documento_No] [int] NOT NULL,
    [No_Documento_Externo] [nvarchar](15) NULL,
    [Cliente_No] [int] NOT NULL,
    [Cliente_Nombre] [nvarchar](50) NOT NULL,
    [RNC] [nvarchar](11) NULL,
    [Numero_Comprobante_Fiscal] [nvarchar](19) NOT NULL,
    [Serie_NCF] [nvarchar](10) NOT NULL,
    [Importe] [money] NOT NULL,
    [Itbis] [money] NOT NULL,
    [Efectivo] [money] NOT NULL,
    [Cheque] [money] NOT NULL,
    [Tarjeta] [money] NOT NULL,
    [Transferencia] [money] NOT NULL,
    [Credito] [money] NOT NULL,
    [Descuento] [money] NOT NULL,
    [Usuario] [nvarchar](50) NOT NULL,
    [Fecha_Hora_Registro] [nvarchar](22) NOT NULL,
    [Direccion] [nvarchar](50) NOT NULL,
    [Contacto] [nvarchar](50) NULL,
    [Telefono] [nvarchar](15) NULL,
    [Fax] [nvarchar](15) NULL,
    [Tel_Movil] [nvarchar](15) NULL,
    [Tel_Oficina] [nvarchar](15) NULL,
    [PaisNombre] [nvarchar](50) NOT NULL,
    [CiudadNombre] [nvarchar](50) NOT NULL,

hondaalberto 07-08-2012 03:15:04

El Registro en la Base de Datos se Graba en el Campo Fecha de la Siguiente Manera:

2012-08-06 00:00:00.000

lo que necesito es que se grabe solo la fecha sin todos esos ceros.

hondaalberto 07-08-2012 03:48:40

Manejo de fechas en SQL Server Usando DatetimePicker
 
Buenas noches amigos y muchas gracias por anticipado


Utilizo Delphi 7 y Sql Server Express 2008 y para el manejo de las fechas utilizo un Componente DateTimePicker pero al momento de Guardar los datos en la base datos se guardan de la siguiente manera:

2012-08-06 00:00:00.000

lo que necesito es que se grabe solo la fecha sin todos esos ceros (El tipo de datos de este campo Fecha es Datetime).

Utilizo este código en Delphi:
Código Delphi [-]
DataSource.DataSet.FieldByName('Fecha').Value:=DTPFecha.Date;


Otro Incoveniente que tengo con esta situación es que al momento de hacer un select con esos datos no me devuelve ningún valor incluso cuando utilizo un Like%% no me muestra nada.

He probado utilizando el tipo de Datos Date en la Base de datos pero cuando el registro se va a grabar en la base de datos me da un error de conversion al tipo de datos fecha u hora.

¿Qué puedo hacer para solucionar esto?

Caral 07-08-2012 04:13:32

Hola
Creo que deberias modificar el campo a tipo date solamente y luego verificar el tipo de formato que darselo al datetimepicker.
saludos

MartinS 07-08-2012 04:34:00

Hola Creo que aquí
Código SQL [-]
[Fecha] [datetime] NOT NULL,
está creando el campo fecha del tipo fecha y hora, ¿o no? por eso requiere que también ingreses la hora cosa que si pones el DTPFecha.Date falta la hora (DTPFecha.DateTime es completo).
El tema es que si queres que solo sea fecha deberias redefinir el campo...

Me parece que es eso :p

Saludos

Aca algo dice - Referencia microsoft

hondaalberto 07-08-2012 04:49:32

Muchas Gracias Caral y Martin por sus respuestas he probado lo que me han indicado cambiando el Campo al tipo de datos Date y me devuelve el siguiente error:

Código Delphi [-]
---------------------------
Debugger Exception Notification
---------------------------
Project RetailPos.exe raised exception class EOleException with message 'Error al convertir una cadena de caracteres en fecha y/u hora'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------


En el datetimepicker tengo las Siguientes Propiedades configuradas

Format = 2012/08/06
Kind = dtkDate
Time = 12:00:00 AM
DateFormat =dfShort

hondaalberto 07-08-2012 04:51:30

Muchas Gracias Martin por tu respuesta he probado lo que me has indicado cambiando el Campo al tipo de datos Date y me devuelve el siguiente error:

Código Delphi [-]--------------------------- Debugger Exception Notification --------------------------- Project RetailPos.exe raised exception class EOleException with message 'Error al convertir una cadena de caracteres en fecha y/u hora'. Process stopped. Use Step or Run to continue. --------------------------- OK Help ---------------------------



En el datetimepicker tengo las Siguientes Propiedades configuradas

Format = 2012/08/06
Kind = dtkDate
Time = 12:00:00 AM
DateFormat =dfShort

ecfisa 07-08-2012 05:04:36

Hola hondaalberto.

Combiné tus dos últimos hilos bajo el título mas significativo por tener ambos el mismo contenido.

Por favor no dupliques los temas, lee el punto [6] de la [guía de estilo].

Ya sea que no recibas respuesta o las obtenidas no resuelvan tu problema, lo correcto es continuar con el hilo inicial para no duplicar la información.

Saludos y gracias por tu colaboración. :)

MartinS 07-08-2012 05:11:26

Deberías verificar los campos que quedaron almacenados en el DataSet, es decir, cuando le das con el botón derecho sobre el componente y agregas los campos (si es que lo haces) puede hacer referencia al tipo anterior, en ese caso, borra lo campos y volvé a incorporarlos. Tambien deberias intentar indicando el tipo de dato que vas a escribir.

Código Delphi [-]
TCabVentasTemp.FieldByName('Fecha').Value:= DTPFecha.Date;

Por

Código Delphi [-]
TCabVentasTemp.FieldByName('Fecha').AsDateTime:= DTPFecha.DateTime;

Proba esta animalada... :)

Código Delphi [-]
TCabVentasTemp.FieldByName('Fecha').AsDateTime := StrToDate(FormatDateTime('yyyy-mm-dd',DTPFecha.DateTime));

y vemos...

Ah!! tambien veo en tu mensaje que guarda la fecha separada por guion (-)y segun el formato que pasaste recien es barra (/)

Pd: Haciendo unas pruebitas y poniendo el año primero como indicas da error de conversion... si lo coloco dd/mm/yyyy anda joya

Casimiro Notevi 07-08-2012 09:42:00

Cita:

Empezado por hondaalberto (Mensaje 438961)
El Registro en la Base de Datos se Graba en el Campo Fecha de la Siguiente Manera:
2012-08-06 00:00:00.000
lo que necesito es que se grabe solo la fecha sin todos esos ceros.

Un momento, creo que estás confundido (o nos estás confundiendo a todos :D)

¿Cómo sabes que en la BD se graba con ese formato?, ¿no será que tú lo visualizas con alguna utilidad y se presenta con ese formato? :confused:


La franja horaria es GMT +2. Ahora son las 10:11:59.

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