hola gente, necesito una pequeña ayuda como puedo hacer un filtrador de fechas desde un tedit y se muestre en un dbgrid que se filtre de esta manera 13-06-2018, uso delphi xe7 y componentes tmyquery, tdatasource
desde ya gracias
Escrito 13 junio 2018 - 07:23
hola gente, necesito una pequeña ayuda como puedo hacer un filtrador de fechas desde un tedit y se muestre en un dbgrid que se filtre de esta manera 13-06-2018, uso delphi xe7 y componentes tmyquery, tdatasource
desde ya gracias
Escrito 14 junio 2018 - 09:00
Hola!, ¿Motor de base de datos?.
Escrito 14 junio 2018 - 12:28
Hola!, ¿Motor de base de datos?.
mysql workwench 6.3
Escrito 14 junio 2018 - 01:55
En MySQL las fechas son en formato 2018-06-14, lo puedes hacer de la siguiente forma, ya que filtrar datos las hay de muchas formas:
Query.Close; Query.SQL.Clear; Query.SQL.Add('Select * from tabla where fecha = :fecha'); Query.Params[0].AsDateTime := StrToDate('14-06-2018'); //Query.Params[0].AsString := FormatDateTime('yyyy-MM-dd',StrToDate('14/06/2018')); Lo puedes probar de esta forma si la anterior no te funciona Query.Open;
Saludos.
Escrito 15 junio 2018 - 03:36
En MySQL las fechas son en formato 2018-06-14, lo puedes hacer de la siguiente forma, ya que filtrar datos las hay de muchas formas:
delphi
Query.Close; Query.SQL.Clear; Query.SQL.Add('Select * from tabla where fecha = :fecha'); Query.Params[0].AsDateTime := StrToDate('14-06-2018'); //Query.Params[0].AsString := FormatDateTime('yyyy-MM-dd',StrToDate('14/06/2018')); Lo puedes probar de esta forma si la anterior no te funciona Query.Open;
Saludos.
perdón, necesito filtrar un rango de fechas estoy usando dos DateTimePicker
por ejemplo : si pongo del 1 al 15 quiero me muestre los registros con el rango de fechas nombrado.
gracias saludos
Escrito 15 junio 2018 - 03:45
En MySQL existe la función BETWEEN que hace precisamente eso:
Query.Close; Query.SQL.Clear; Query.SQL.Add('Select * from tabla where fecha BETWEEN :fecha1 and :fecha2'); Query.ParamByName('fecha1').AsDateTime := DateTimePicker1.Date; Query.ParamByName('fecha2').AsDateTime := DateTimePicker2.Date; Query.Open;
Escrito 15 junio 2018 - 04:19
En MySQL existe la función BETWEEN que hace precisamente eso:
delphi
Query.Close; Query.SQL.Clear; Query.SQL.Add('Select * from tabla where fecha BETWEEN :fecha1 and :fecha2'); Query.ParamByName('fecha1').AsDateTime := DateTimePicker1.Date; Query.ParamByName('fecha2').AsDateTime := DateTimePicker2.Date; Query.Open;
en mi caso estoy trabajando con tres tablas usando union all, podria usuarlo sin problema
Escrito 15 junio 2018 - 04:29
En cada consulta del Union debes hacer esa condición.
SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2 UNION ALL SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2 UNION ALL SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2
Saludos.
Escrito 15 junio 2018 - 04:44
En cada consulta del Union debes hacer esa condición.
sql
SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2 UNION ALL SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2 UNION ALL SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2
Saludos.
me refiero en esta linea de codigo Query.SQL.Add('Select * from tabla where fecha BETWEEN :fecha1 and :fecha2') podre usar la funcion union all
Escrito 15 junio 2018 - 05:06
var aSQL: String; begin aSQL := 'SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' + 'UNION ALL ' + 'SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' + 'UNION ALL ' + 'SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2'; ... Query.SQL.Clear; Query.SQL.Add(aSQL); ... end;
Escrito 15 junio 2018 - 05:51
delphi
var aSQL: String; begin aSQL := 'SELECT campo1 AS campo FROM tabla1 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' + 'UNION ALL ' + 'SELECT campo2 AS campo FROM tabla2 WHERE fecha BETWEEN :fecha1 AND :fecha2 ' + 'UNION ALL ' + 'SELECT campo3 AS campo FROM tabla3 WHERE fecha BETWEEN :fecha1 AND :fecha2'; ... Query.SQL.Clear; Query.SQL.Add(aSQL); ... end;
lo voy a probar y posteare el resultado
Escrito 21 junio 2018 - 11:30
hola ,compila pero me dice que el parámetro 'fecha2' no funciona
Escrito 21 junio 2018 - 05:39
hola ,compila pero me dice que el parámetro 'fecha2' no funciona
¿Concretamente, que error te arroja? Ten presente que cuando uno escribe :algo en una instrucción SQL está declarando un parámetro, al que LUEGO uno debe asignarle valor.
Dependiendo de la suite, se procede de dos formas:
Si es ADO (o basada en ADO), se utiliza Parameters. mientras que la mayoría de otras suites y de las que derivan de TDataSet, se utiliza Params.
ADO:
TuQuery.Paramaters.ParamByName('fecha2').DataType := ftDateTime; //creo recordar que era este nombre... No dispongo en este momento de Delphi para comprobarlo TuQuery.Paramaters.ParamByName('fecha2').Value := ... // Aquí le pasas el valor
Otras:
TuQuery.Params.ParamByName('fecha2').AsDateTime := ...
El valor lo podrías ingresar (y se recomienda) desde un TDateTimePicker por ejemplo.
Si la consulta está bien escrita, debería funcionarte sin problemas.
Saludos,
Escrito 22 junio 2018 - 05:08
¿Concretamente, que error te arroja? Ten presente que cuando uno escribe :algo en una instrucción SQL está declarando un parámetro, al que LUEGO uno debe asignarle valor.
Dependiendo de la suite, se procede de dos formas:
Si es ADO (o basada en ADO), se utiliza Parameters. mientras que la mayoría de otras suites y de las que derivan de TDataSet, se utiliza Params.
ADO:
delphi
TuQuery.Paramaters.ParamByName('fecha2').DataType := ftDateTime; //creo recordar que era este nombre... No dispongo en este momento de Delphi para comprobarlo TuQuery.Paramaters.ParamByName('fecha2').Value := ... // Aquí le pasas el valor
Otras:
delphi
TuQuery.Params.ParamByName('fecha2').AsDateTime := ...
El valor lo podrías ingresar (y se recomienda) desde un TDateTimePicker por ejemplo.
Si la consulta está bien escrita, debería funcionarte sin problemas.
Saludos,
hola, compila pero cuando elijo la fecha que deseo mostrar y a doy click (al boton) el formulario se cierra y no muestra las fechas solicitadas
Escrito 22 junio 2018 - 05:32
me parece que el error es la consulta que le estoy pasando como parámetro mi consulta es esta
SELECT * FROM compañia1 WHERE MONTH(fechavenciomento) = 4 AND YEAR(fechavencimiento) = 2018
como hago para agregar las fechas del datetimepicker
Escrito 22 junio 2018 - 06:31
Tu consulta está mal, para extraer el mes y año de una fecha debes utilizar la función EXTRACT():
Query.Close; try Query.SQL.Clear; Query.SQL.Add('SELECT * FROM compañia1 ' + 'WHERE EXTRACT(MONTH FROM fechavenciomento) = 4 AND EXTRACT(YEAR FROM fechavencimiento) = 2018' + 'AND fecha BETWEEN :fecha1 and :fecha2'); Query.ParamByName('fecha1').AsDate := DateTimePicker1.Date; Query.ParamByName('fecha2').AsDate := DateTimePicker2.Date; Query.Open; except raise Exception.Create('Ocurrió un problema'); end;
Escrito 26 junio 2018 - 05:24
Tu consulta está mal, para extraer el mes y año de una fecha debes utilizar la función EXTRACT():
delphi
Query.Close; try Query.SQL.Clear; Query.SQL.Add('SELECT * FROM compañia1 ' + 'WHERE EXTRACT(MONTH FROM fechavenciomento) = 4 AND EXTRACT(YEAR FROM fechavencimiento) = 2018' + 'AND fecha BETWEEN :fecha1 and :fecha2'); Query.ParamByName('fecha1').AsDate := DateTimePicker1.Date; Query.ParamByName('fecha2').AsDate := DateTimePicker2.Date; Query.Open; except raise Exception.Create('Ocurrió un problema'); end;
hola ya puedo filtrar fechas pero de una sola tabla, cuando quiero filtrar fechas de otras tablas me dice que tengo un error de sintaxis este error precisamente you have an error in your sql syntax check the manual that corresponds to your mysql server version
Escrito 26 junio 2018 - 08:10
hola ya puedo filtrar fechas pero de una sola tabla, cuando quiero filtrar fechas de otras tablas me dice que tengo un error de sintaxis este error precisamente you have an error in your sql syntax check the manual that corresponds to your mysql server version
Sin ver la consulta no sabremos donde esta el problema. Además el texto del error está incompleto porque suele indicar la linea en donde está el problema. Copia y pega el error tal cual aparece.
Saludos,
Escrito 27 junio 2018 - 05:40
este es mi codigo :Sin ver la consulta no sabremos donde esta el problema. Además el texto del error está incompleto porque suele indicar la linea en donde está el problema. Copia y pega el error tal cual aparece.
Saludos,
var aSQL: String; begin aSQL := 'SELECT FechaDesde1, FechaHasta2 , empresa1 FROM tabla1 where fechahasta1 >= :fecha1 and fechahasta1 <= :fecha2' + 'union all' + 'SELECT FechaDesde2 ,FechaHasta2 , empresa2 FROM tabla2 Ewhere fechahasta2 >= :fecha1 and fechahasta2 <= :fecha2' + 'union all' + 'SELECT FechaDesde3,FechaHasta3 , empresa3 FROM tabla3 where fechahasta3 >= :fecha1 and fechahasta3 <= :fecha2 ORDER BY fechahasta3'; query.SQL.Clear; quey.SQL.Add(aSQL); query.Params.ParamByName('fecha1').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker1.Date); query.Params.ParamByName('fecha2').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker2.Date); query.Open; end;
Escrito 27 junio 2018 - 10:24
....cuando compilo me da el siguiente error
you have an error in your sql syntax check the manual that corresponds to your mysql server version for the right syntax to use near allselect FechaDesde1, FechaHasta2 , empresa1 at line 1
FechaDesde1 = DateTime FechaDesde2 = Varchar[5] --> ERROR, no coincide con el tipo de dato de la columna. FechaDesde3 = DateTime FechaDesde1 = DateTime FechaDesde2 = DateTime --> OK FechaDesde3 = DateTime
var aSQL: String; begin aSQL := 'SELECT FechaDesde1, FechaHasta2 , empresa1 FROM tabla1 where fechahasta1 >= :fecha1 and fechahasta1 <= :fecha2' + 'union all' + 'SELECT FechaDesde2 ,FechaHasta2 , empresa2 FROM tabla2 where fechahasta2 >= :fecha1 and fechahasta2 <= :fecha2' + 'union all' + 'SELECT FechaDesde3,FechaHasta3 , empresa3 FROM tabla3 where fechahasta3 >= :fecha1 and fechahasta3 <= :fecha2 ORDER BY fechahasta3'; query.SQL.Clear; quey.SQL.Add(aSQL); query.Params.ParamByName('fecha1').Value := Datetimepicker1.Date; query.Params.ParamByName('fecha2').Value := Datetimepicker2.Date; query.Open; end;
var aSQL: String; begin aSQL := 'SELECT FechaDesde1, FechaHasta2 , empresa1 FROM tabla1 where fechahasta1 >= :fecha1 and fechahasta1 <= :fecha2' + 'union all' + 'SELECT FechaDesde2 ,FechaHasta2 , empresa2 FROM tabla2 where fechahasta2 >= :fecha1 and fechahasta2 <= :fecha2' + 'union all' + 'SELECT FechaDesde3,FechaHasta3 , empresa3 FROM tabla3 where fechahasta3 >= :fecha1 and fechahasta3 <= :fecha2 ORDER BY fechahasta3'; query.SQL.Clear; quey.SQL.Add(aSQL); query.Params.ParamByName('fecha1').AsString := FormatDateTime('yyyy/mm/dd',Datetimepicker1.Date); query.Params.ParamByName('fecha2').AsString := FormatDateTime('yyyy/mm/dd',Datetimepicker2.Date); query.Open; end;