Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   datetimerpicker-parambyname-SQL server 2000 (https://www.clubdelphi.com/foros/showthread.php?t=36511)

DarkGirl 14-10-2006 17:42:52

datetimerpicker-parambyname-SQL server 2000
 
Hola a todos.
Estoy trabajando con un TQuery, TDataSouse y un Ttable.
Necesito seleccionar una fecha del datetimepicker y segun la fecha debe mostrar un valor en un TDBedit.
Tengo el siguiente código:

Query1.SQL.Clear;
Query1.Close;
Query1.SQL.Text:='SELECT * FROM TOTALES WHERE FEEMLI =:fecha';
Query1.ParamByName('fecha').AsDateTime:= DateTimePicker1.DateTime;
Query1.ParamByName('fecha').Value:=FormatDateTime('mm/dd/yyyy',DateTimePicker1.DateTime);
Query1.Open;

El problema es que el formato de fechas de SQL server.. La consulta no me muestra nada.
Aparece el mensaje:

"....Quey1 parameter 'fecha' not found..."


Alguien me puede ayudar!!!.

Saludos a todos

Lepe 15-10-2006 14:19:08

Código Delphi [-]
Query1.SQL.Clear;
Query1.Close;
Query1.SQL.Text:='SELECT * FROM TOTALES WHERE FEEMLI =:fecha';
Query1.ParamByName('fecha').Value:= Trunc(DateTimePicker1.DateTime);
Query1.Open;

Veo que le das valores a 2 parámetros que se llaman fecha, pero en el SQL solo añades un parámetro.

De todas formas, puedes que no hayas puesto todo el sql completo para simplificar, creo que el truco está en Trunc, para dar la fecha y quitar la hora.

Si usas FormatDateTime, estas asignando una fecha con tipo de datos String (pueden venir problemas despues).

Si Usas AsDateTime, pues tambien está recibiendo la hora (no sé exactametne como trabaja SQL SERVER, sería cuestion de hacer un ShowMessage despues de abrir la consulta para ver el sql que se ha usado) para ver si añade a la fecha 0:00:00.000 :confused:.

Saludos

DarkGirl 16-10-2006 14:47:41

Cambie el código como me dijiste...

Aún me sale el mensaje
'...Query1 parameter fecha not found...'

Al parecer no quiere leer el parametro que le paso en la consulta SQL.
:confused:

¿Que puede estar pasando?.

Saludos;)

efelix 18-10-2006 15:01:28

DarkGirl yo uso sql server 2000 y en una aplicación donde también uso un procedimiento almacenado que tiene dos parámetros de entrada que son dos fechas, en este caso yo lo que utilizo son los componentes de la paleta ado, es decir un ado stored procedure, en el evento onclick de un botón de comando yo le paso el valor de los date timepicker a los valores de los parámetros del procedimiento almacenado, de la siguiente forma:
Código Delphi [-]
ADOSPPendientesPago.Parameters.ParamByName('@FechaRecepcion').Value :=Trunc(DTPFecha1.Date);
ADOSPPendientesPago.Parameters.ParamByName('@FechaRecepcion1').Value :=Trunc(DTPFecha2.Date);
Te he puesto nada mas la parte de la asignación de los parámetros para que ves como funciona. Chequea bien si has definico correctamente los parámetros y se le has asignado los valores en la propiedad Tparameters a cada uno de ellos. Por otra parte no debes preocuparte por el formato de fechas de sql server. MS SQL Server utiliza un formato de fecha que es mes/día/año que solo lo debes tener en cuenta a la hora de probar el funcionamiento de procedimiento almacenado dentro de él, pero cuando la vas a pasar los valores en tiempo de ejecución a través de delphi esto no tien importancia porque de forma transparente se hacen los cambios pertinentes y todo funciona sin problema alguno. En lo que a mi respecta te diré que me trabaja de maravillas sin ningún problema. Espero que te sirva lo que te he explicado. Suerte.

DarkGirl 20-10-2006 22:30:21

Gracias eFelix por tu comentario,
pero resulta que soy nueva en Delphi.
No sé como utilizar ADO.
Me puedes dar una ayudita...

Como se usa ADOStoreProcedure?

Desde ya muchas gracias
Saludos....:rolleyes:

efelix 21-10-2006 14:30:46

Saludos. En el entorno de desarrollo de delphi hay una paleta con el nobre ADO, la cual tiene varios componentes, el primero de ellos es un ADOConnection para la conexión con la base de datos sql server, ADOTable,ADOStoredProcedure, etc. En tu caso específico tendrías que utilizar el Ado connection para conectarte a la base de datos, si tienes un procedimiento almacenado entonces debes utilizar un ADOStoredProcedure, y en la propiedad conecction del mismo hacer alusión al adoconnection que pusiste en la forma, luego debes ir a la paleta DataAccess y utilizar un DataSource el cual estará vinculado con el ADOStoredProcedure. Una vez hecho esto tienes que trabajar con el ADOStoredProcedure, es decir con su propiedades, fundamentalmente con la propiedad Tparameters, donde podrás ver los parámetros de tu procedimiento almacenado, seleccionando cada uno de ellos y asignandóle un valor o un tipo de datos en correspondencia con el tipo de datos que hayas definido en sql server para ese parámetro. Por ejemplo: si tienes un parámatro que es de tipo fecha, que lo definiste en sql server como datetime o date, tienes que asignarle un valor de tipo datetime o date, porque sini te generaría un error que dirá que el parámetro no ha sido asignado, y así sucesivamente con cada uno de los parámetros de tu procedimiento almacenado. Los procediemientos almacenados de sql server crean por defecto un parámetro de que se llama @RETURNVALUE que es de tipo entero el cual no debes tocar al menos que necesites trabajar con él que creo que ese no es tu caso. Espero que esto te sirva de ayuda para comenzar, de todas no tengas pena en preguntar, que aquí estamos para ayudarnos mutuamente. Suerte.

nuk3zito 13-08-2007 20:50:18

Checa este hilo, tiene la solución que buscas... pero con ADO (que es eso lo que también necesitas)
http://www.clubdelphi.com/foros/showthread.php?t=45319

Saludos

luisgutierrezb 13-08-2007 22:45:43

para mssql nada como las fechas en formato iso, ademas hay que poner comillas cuando mandas la fecha en cadena, con esto se debe solucionar tu problema:

Query1.ParamByName('fecha').Value:=QuotedStr(FormatDateTime('yyyymmdd',DateTimePicker1.DateTime));

nuk3zito 13-08-2007 22:48:23

o sea?
 
Cita:

Empezado por luisgutierrezb (Mensaje 222736)
para mssql nada como las fechas en formato iso, ademas hay que poner comillas cuando mandas la fecha en cadena, con esto se debe solucionar tu problema:

Query1.ParamByName('fecha').Value:=QuotedStr(FormatDateTime('yyyymmdd',DateTimePicker1.DateTime));

Y yo que dije? :confused:

ContraVeneno 13-08-2007 22:53:08

No entiendo porqué quieres darle formato... según entiendo, no es necesario y con solo hacer:

Código Delphi [-]
Query1.ParamByName('fecha').AsDateTime:= DateTimePicker1.DateTime;

es más que suficiente, al menos así lo hago yo y no he tenido problemas.

nuk3zito 13-08-2007 22:59:01

cuestión de experiencia...
 
Cita:

Empezado por ContraVeneno (Mensaje 222740)
No entiendo porqué quieres darle formato... según entiendo, no es necesario y con solo hacer:

Código Delphi [-]
Query1.ParamByName('fecha').AsDateTime:= DateTimePicker1.DateTime;

es más que suficiente, al menos así lo hago yo y no he tenido problemas.

Entre mayor experiencia tengas, te darás cuenta que las leyes de Murphy siguen vigentes y son aplicadas aún a nuestros sistemas en Delphi... pero con el estándar ANSI se resuelve.

Jparra 14-08-2007 23:07:27

Mi solucion
 
Hola,

Pues yo recientemente lo hice de la siguiente forma:
Código Delphi [-]ShortDateFormat := 'yyyymmdd';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM DBA.POSHeader WHERE Opendate = ' + DateToStr(DateTimePicker1.Date) + ' ORDER BY Transact');
Query1.ExecSQL;
Query1.Open;

A mi me ha funcionado de maravilla... Esto es conectandome a una Base de Datos SQL de SyBase.

He notado que en los ejemplos anteriores no le ejecutaban la sentencia de SQL al Query meriante el Procedimiento ExecSQL, no soy muy experto, pero no es necesario este pas?

nuk3zito 14-08-2007 23:14:35

Cita:

Empezado por Jparra (Mensaje 223069)
Hola,

Pues yo recientemente lo hice de la siguiente forma:
Código Delphi [-]ShortDateFormat := 'yyyymmdd';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM DBA.POSHeader WHERE Opendate = ' + DateToStr(DateTimePicker1.Date) + ' ORDER BY Transact');
Query1.ExecSQL;
Query1.Open;

A mi me ha funcionado de maravilla... Esto es conectandome a una Base de Datos SQL de SyBase.

He notado que en los ejemplos anteriores no le ejecutaban la sentencia de SQL al Query meriante el Procedimiento ExecSQL, no soy muy experto, pero no es necesario este pas?

Que pasó? O es una o es otra... pero al hacer esas dos cosas, lo único que haces es abrir el query dos veces:
1) sin regresar nada
2) ahora si regresando los datos

Deberías de usar solo el Open, y te recomiendo que leas en la ayuda de Delphi para que sirve el otro.

Mira JParra, lo que comentamos del formato ANSI deberías de usarlo para tus querys también, porque el día que vayas a otra PC con una configuración diferente, ahi te van a hallar si no sabes cual es el problema ni por donde buscarle.

Jparra 15-08-2007 23:39:09

Cita:

Empezado por nuk3zito (Mensaje 223073)
Que pasó? O es una o es otra... pero al hacer esas dos cosas, lo único que haces es abrir el query dos veces:
1) sin regresar nada
2) ahora si regresando los datos

Deberías de usar solo el Open, y te recomiendo que leas en la ayuda de Delphi para que sirve el otro.

Mira JParra, lo que comentamos del formato ANSI deberías de usarlo para tus querys también, porque el día que vayas a otra PC con una configuración diferente, ahi te van a hallar si no sabes cual es el problema ni por donde buscarle.

Tienes razon :o, Chequie la ayuda de delphi... Pero tambien cai en ese error por un ejemplo que vi en la ayuda, lo que no me di cuenta que se trataba de una consulta de accion. Gracias por sacarme del error!


La franja horaria es GMT +2. Ahora son las 02:57:57.

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