Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema para insertar un dato de tipo fecha en SQL Server 2000 (https://www.clubdelphi.com/foros/showthread.php?t=69574)

Alejandro73 26-08-2010 06:23:24

Problema para insertar un dato de tipo fecha en SQL Server 2000
 
Estimados

Buenas Noches, tengo el siguiente problema:

En una tabla tengo un campo fecha definido como Smalldatetime, cuando creo un procedimiento almacenado en el motor este parametro debe ser pasado como String para que pueda ser guardado.

Si creo este mismo procedimiento almacenado (de insercion de registro en la tabla) mediante codigo delphi que seria

.....
datamodule.Adoquery.SQL.ADD(Insert Into nTabla Values(:campo1,:campo2,:campo3)) donde el campo2 es de tipo smalldatetime me aparece un error que arroja el motor que me impide realizar la insercion.
el resto de la instruccion es
datamodule.Adoquery.Parameters.Parambyname('campo1').value:=dato1;
datamodule.Adoquery.Parameters.Parambyname('campo2').value:=dato2;
datamodule.Adoquery.Parameters.Parambyname('campo3').value:=dato3;
.....

Si alguien ya paso por esto y lo pudo solucionar le agradecere me cuente que tengo que corregir en el codigo.

Saludos
Alejandro Arancibia
CHILE

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ FUERZA MINEROS !!!!!!!!!!!!!!!!!!

droguerman 26-08-2010 14:26:09

El problema es que SQL Server permite la inserción de fechas depende del formato de fecha con el que esté configurado el servidor, un formato universal es el siguiente:

yyyymmdd

por ejemplo si tienes la fecha 24-set-2010 debes convertirlo a este valor: 20100924

Saludos

ContraVeneno 26-08-2010 16:13:21

creo que el problema de entrada es que no deberías de tener que hacer ninguna conversión de texto a fecha o viceversa...

sql server maneja, define y distingue perfectamente los tipos de datos para las fechas.

Alejandro73 26-08-2010 16:25:39

Lamentablemente al pasar el dato como fecha desde el datetimepicker1.date al parametro crenado por codigo la instruccion de insercion arroja un error.

Luego probare lo que suguieren acerca del pasar la fecha en formato yyyymmdd

Gracias por sus comentarios y luego les cuento que sucedio.

Saludos
Alejandro Arancibia
CHILE

ContraVeneno 26-08-2010 16:59:53

Pues habría que ver como le estas pasando el parámetros y cuál es el error que te marca.

Lo siguiente funciona perfecto en SQL Server 2000 - 2008:

Código Delphi [-]
with ADOQuery do begin
 sql.clear;
sql.add('Update UnaTabla');
 sql.add('set Fecha = :Fecha');
 parameters.paramByname('fecha').value := UnDateTimePicker.DateTime;
 ExecSQL;
end;

si tu campo es de tipo "tiempo" pues bastaría con enviar solo el tiempo. Es decir, .Time en lugar de DateTime.

Alejandro73 03-09-2010 07:15:43

El error que arroja el motor es el Siguiente:

[Microsoft][ODBC SQL Server driver] Caracteristica opcional no implementada

Utilizando el ejemplo que dejastes que es el mismo que tengo en mi codigo.

Saludos

vinicc 13-09-2010 23:06:19

Si aún no has solucionado tu problema podrías probar con esto:

a) parambyname('fecha').AsDateTime := Date;
b) parambyname('Fecha').asstring := formatdatetime('mm/dd/yyyy',Date);
c) parambyname('Fecha').asstring := formatdatetime('yyyy/mm/dd',Date);

Es posible que te estés conectando a la base de datos a través de obdc, si es el caso verifica el idioma que está predefinido para la base de datos.

Ok, espero que te sirva.:)

Alejandro73 21-10-2010 18:52:21

Filtro por fecha
 
Finalmente nada funciono y tube que crear el procedimiento almacenado en el motor de base de datos SQL SERVER 2000.

La idea era realizar las consultas desde el codigo del programa y no tener que hacer un procedimiento almacenado por cada consulta.

Gracias a todos quienes aportaron.. un dato mas con SQL SERVER 2005 no hay ningun problema con las fechas.

BlueSteel 21-10-2010 20:46:29

Hola Alejandro

has probado con la inserción de datos desde el mismo Sql... quisas sea un problema de configuracion como dicen por ahí... en algunas ocaciones te puede dar problemas hasta el separador de Fechas... yo tenia en un datetimepicker como separador el guion "-"... y cuando hacia el insert me daba error... asi que probe con el slash "\" y tambien cambie ese parametro en la configuración regional del computador.. y santo remedio

yo realizo la inserción desde delphi como en el ejemplo que te dejo ContraVeneno...

Salu2:p:D

PS: Otro Chileno más que utiliza Delphi... que bien.. ya no somos tan poquitos..

Alejandro73 21-10-2010 20:50:47

La solución
 
aquí esta el codigo por si le sirve a alguien mas


SQL.Add('where ((fecnac>=Convert(datetime,:lv_desde,102)) and (fecnac<=Convert(datetime,:lv_hasta,102)))'); Parameters.ParamByName('lv_desde').Value:=DateTimePicker1.date; Parameters.ParamByName('lv_hasta').Value:=DateTimePicker2.date;


Pd: Con la inserción del campo fecha no tengo problemas solo al consultar en un rango de fechas.

Saludos
:)

BlueSteel 21-10-2010 20:57:50

Cita:

Empezado por Alejandro73 (Mensaje 380068)
Con la inserción del campo fecha no tengo problemas solo al consultar en un rango de fechas.
:)

Hola Alejandro....

pero en que momento preguntas por como hacer una consulta.... siempre hablas de insertar un dato...

Aqui por ejemplo.. tengo una consulta de Ordenes durante un tiempo definido...

Código Delphi [-]

// Datos : Modulo de Datos
// AQ_VOrden -> Ado Query
// vDes y vHas son TDateTimePicker

Datos.AQ_VOrden.SQL.Clear;
 Datos.AQ_VOrden.SQL.Add('Select *');
 Datos.AQ_VOrden.SQL.Add('From Orden_Proveedor');
 Datos.AQ_VOrden.SQL.Add('Where Ord_Fecha Between :Var1 And :Var2');
 Datos.AQ_VOrden.SQL.Add('Order By Ord_Numero');
 Datos.AQ_VOrden.Parameters[0].Value := vDes.Date;
 Datos.AQ_VOrden.Parameters[1].Value := vHas.Date;
 Datos.AQ_VOrden.Open;

Bueno... Salu2:p:D

Alejandro73 21-10-2010 21:03:06

Sorry
 
Perdon pero este tema ya me tenia un poco confundido, te envie un mensaje a tu correo te llego?

Saludos

BlueSteel 21-10-2010 23:06:49

Cita:

Empezado por Alejandro73 (Mensaje 380070)
Perdon pero este tema ya me tenia un poco confundido, te envie un mensaje a tu correo te llego?

Saludos

no.. nada.... pero a cual correo???...

Salu2:p:D

Alejandro73 21-10-2010 23:10:28

Mensaje Correo
 
Te envie un mensaje privado y uno a tu correo esto lo obtengo de tu perfil pero claro esta no aparece ninguna direccion solo un Link.

Si puedes me envias tu correo a alerob25@gmail.com

Espero no estar cometiendo una falta y que luego el administrador o el moderador me de un buen reto.

Saludos


La franja horaria es GMT +2. Ahora son las 22:39:31.

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