PDA

Ver la Versión Completa : Problema con fecha en busqueda


yanelisroque
16-02-2005, 16:53:13
Hola a todos!

Tengo problemas con la fecha (SQL Server) a la hora de realizar la busqueda. Si alguien pudiera ayudarme se lo agradeceria mucho. Mi correo es yanelis.roque@dds.desoft.cu. De ante mano gracias.

DataModule2.QTTabla.Close;
DataModule2.QTTabla.SQL.Clear;
if Menor.Checked = True then
DataModule2.QTTabla.SQL.Add('SELECT * FROM TTabla WHERE Fecha < ' + Edit1.Text + ' ORDER BY Fecha');
if Mayor.Checked = True then
DataModule2.QTTabla.SQL.Add('SELECT * FROM TTabla WHERE Fecha > ' + Edit1.Text + ' ORDER BY Fecha');
if Igual.Checked = True then
DataModule2.QTTabla.SQL.Add('SELECT * FROM TTabla WHERE Fecha = ' + Edit1.Text + ' ORDER BY Fecha');
DataModule2.QTTabla.Open;

roman
16-02-2005, 16:55:34
Aunque no conozco SQL server, es muy posible que tengas que sustituir los

Edit1.Text

por

QuotedStr(Edit1.Text)

Otra opción (ésta debiera siempre ser la opción) es usar parámetros.

// Saludos

yanelisroque
16-02-2005, 17:06:55
Hola!

De esa forma da error.
La tabla muestra formato mm/dd/aaaa, pero en realidad guarga como aaa-mm-dd. Yo estaba probando primero convertirla para poder compararla en la busqueda, pero me da error de incompatibilidad (datetime con datetimefield), y no se. Gracias.

var AnioTabla, MesTabla, DiaTabla, FechaTabla :Integer;

AnioTabla := YearOf(DataModule2.TITablaFecha);
MesTabla := MonthOf(DataModule2.TITablaFecha);
DiaTabla := DayOf(DataModule2.TITablaFecha);
FechaTabla := String (AnioTabla + '-' + MesTabla + '-' + DiaTabla);

roman
16-02-2005, 17:27:31
De esa forma da error.
La tabla muestra formato mm/dd/aaaa, pero en realidad guarga como aaa-mm-dd.


Pero se trata de otro error: formato de fecha inadecuado. El QuotedStr es para encerrar el valor entre comillas que es lo que el servidor espera.



pero me da error de incompatibilidad (datetime con datetimefield), y no se.

DateTimeField es un objeto, no un valor DateTime. Tendrías que usar la propiedad Value del objeto DateTimeField.

Y como te mencioné antes, muchos de estos problemas se solucionan y simplifican pasando los valores a la consulta mediante parámetros.

// Saludos

marcoszorrilla
16-02-2005, 17:29:20
Prueba con:

FormatDateTime('mm/dd/yyyy',Edit1.Text);

y sino con:

QuotedStr(FormatDateTime('mm/dd/yyyy',Edit1.Text));


Un Saludo.

yanelisroque
16-02-2005, 17:43:01
Hola!

Si le pongo QuotedStr me da error: sintaxis error convirtiendo un datetime a un caracter string. Gracias.
if Menor.Checked = True then
DataModule2.QTTabla.SQL.Add('SELECT * FROM TTabla WHERE Fecha < ' + QuotedStr(Filtrar.Text) + ' ORDER BY Fecha');
if Mayor.Checked = True then
DataModule2.QTTabla.SQL.Add('SELECT * FROM TTabla WHERE Fecha > ' + QuotedStr(Filtrar.Text) + ' ORDER BY Fecha');
if Igual.Checked = True then
DataModule2.QTTabla.SQL.Add('SELECT * FROM TTabla WHERE Fecha = ' + QuotedStr(Filtrar.Text) + ' ORDER BY Fecha');

En el caso de un campo alfanumerico yo lo tengo asi y no da error pero con la fecha me da error.
WhereClause := 'NombreyApellidos LIKE ' + QuotedStr(Filtrar.Text + '%');
DataModule2.QTICuna.SQL.Add('SELECT * FROM TICuna WHERE ' + WhereClause + ' ORDER BY Fecha');

marcoszorrilla
16-02-2005, 21:35:50
Pues tendrás que aplicarle cuando menos FormatDateTime, y no sé si SQL Server al igual que Access, requiere almohadillas # delante y detras de la fecha, en ese caso podía quedar algo como

QuotedStr('#'+FormatDateTime('mm/dd/yyyy',Edit1.Text)+'#');

Y quizás lo más simple pueda ser utilizar parámetros.

Un Saludo.

yanelisroque
17-02-2005, 18:53:47
Hola!

El formatDateTime me da: [Error] BusquedaTIParvulos.pas(1107): There is no overloaded version of 'FormatDateTime' that can be called with these arguments.
Ya me funciona bien; lo q hice fue convertir la fecha q entra a aaa-mm-dd (separando el año, mes y dia y usando un string para formar la cadena) y comparo esa con la de la tabla y funciona bien. Muchas gracias por la ayuda.

CCCP
27-02-2005, 02:44:03
prueba hacerle un decode date a las fechas y despues te la montas como te de la gana y yo de ti probaria con el formato YYYYMMDD