Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Exclamation ¿Búsqueda SQL por Fecha?

Saludos amigos foristas....

el problema que tengo es que no se como ordenar una búsqueda sql por fecha

tengo un formulario con un radiogroup que tiene varias opciones para ordenar
en el mismo formulario tengo un dbgrid en el cual se muestra el resultado obtenido de el boton presionado del radiogroup y lo que escribi en el edit1.text

pero necesito hacer un boton en ese radiogroup que se llame FECHA y necesito que haga lo siguiente:

cuando yo seleccione la opcion FECHA y en el edit1.text coloque xx/xx/xxxx
en el dbgrid se muestren los registros que tengan esa fecha

mientras que toque ordenar por cadena de caracteres todo bien pero necesito saber como lo ordeno por la fecha escrita en el edit1.text!!

gracias Adelantadas!!
Responder Con Cita
  #2  
Antiguo 31-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Código Delphi [-]
MiQuery.Active := False;
Miquery.sql.Text := 'Select * from tablas where fecha = :fecha';
MiQuery.ParambyName('FECHA').ASDate := StrtoDate(Edit1.Text);
MiQuery.Active := True;
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 31-03-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
el campo por el cual quiero ordenar los registros se llama fec_ini es de tipo DATE y da error el código que me acabas de facilitar

mi tabla se llama db

dice is not a valid date osea que no es una fecha valida

y el código adaptado a mi programa quedó así

Código Delphi [-]
if RadioGroup1.ItemIndex=0 then
begin
  Query1.Active := False;
  Query1.sql.Text := 'Select fec_ini from db.db where fec_ini :=Fecha';
  Query1.ParambyName('Fecha').ASDate := StrtoDate(Edit1.Text);
  Query1.Active := True;
end;


¿en que estoy fallando?
Responder Con Cita
  #4  
Antiguo 31-03-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Estoy intentando con este otro código y tambien da error:

Código Delphi [-]
if RadioGroup1.ItemIndex=0 then
begin
  Query1.Active := False;
  Query1.sql.Text:='select registro,cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon  _pol,sub_pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol from db Where fec_ini like "' + (Edit1.Text) + '%"';
  Query1.Active := True;
end;

Responder Con Cita
  #5  
Antiguo 31-03-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Exclamation

intenté tambien con:
Código Delphi [-]
 
if RadioGroup1.ItemIndex=0 then
begin
  Query1.Active := False;
  query1.sql.Text := 'Select fec_ini from db.db where fec_ini = :fecha';
  Query1.ParambyName('fecha').ASDate := StrtoDate(Edit1.Text);
  Query1.Active := True;
end;

pero sigue sin funcionar
Responder Con Cita
  #6  
Antiguo 31-03-2008
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 22
jacanche Va por buen camino
Quizas no lo entiendo, pero si quieres ordenar deberias agregar una instruccion "order by" en tu sentencia sql, para que te lo ordene por los campos que quieres, en tu caso por fecha. Lo que estas haciendo con el "where" es solo limitar los registros que seleccionas.
__________________
Saludos

Alfredo
Responder Con Cita
  #7  
Antiguo 31-03-2008
Avatar de paladincubano
paladincubano paladincubano is offline
Miembro
 
Registrado: jul 2007
Posts: 147
Poder: 17
paladincubano Va por buen camino
Prueba este otro a ver si te vale:
Código Delphi [-]Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM db');
Query1.SQL.Add('WHERE fec_ini='+QuotedStr(Edit1.Text));
Query1.SQL.Add('ORDER by fec_ini');
Query1.Open;

espero te sirva.
Responder Con Cita
  #8  
Antiguo 31-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
No indicas que Base de Datos utilizas.

Hay algunas bases de datos que precisan que le pases el parámetro de la fecha en formato 'mm/dd/yyyy' y puede que por ahí venga el fallo que te indica que no es una fecha válida.

Por otro lado, deberías por supuesto realizar una comprobación previa de que lo que se inserta en el TEdit corresponde a una fecha válida y en los formatos aceptados por tu Base de datos.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #9  
Antiguo 31-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
El error viene dado debido a que lo que ingresaron en el edit1 no es una fecha valida. deberias validar antes de ejecutar la sentencia, y el primer ejemplo que te di te ahorras comprobar el formato de la fecha tal cual lo dice Gluglu.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #10  
Antiguo 31-03-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Bueno agregando a lo dicho por Eduarcol y GluGlu, yo recomendaría esta linea:

Código Delphi [-]
if RadioButton1.Checked = True Then
....

en vez de esta que tienes:

Código Delphi [-]
if RadioButton1.ItemIndex = 0 then
....

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #11  
Antiguo 31-03-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
sigo sin entender porque muchos quieren manejar fechas utilizar Tedit cuando pueden utilizar TDateTimePicker....
__________________

Responder Con Cita
  #12  
Antiguo 31-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por ContraVeneno Ver Mensaje
sigo sin entender porque muchos quieren manejar fechas utilizar Tedit cuando pueden utilizar TDateTimePicker....
Iba a preguntar lo mismo, pero me di cuenta que la busqueda puede realizarse en campos de varios tipos dependiendo la opcion de un RadioGroup, aunque tambien se puede jugar con los valores de Visible...
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #13  
Antiguo 01-04-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Thumbs up

gracias paladincubano tu código porfin resuleve la mitad de mi problema por que si ordena por fecha los registros pero
cuando voy al edit para escribir la fecha xx/xx/xxxx da error solo con pulsar cualquier tecla pero me imagino que ya es
mas facil de resolver

vuelvo a facilitar el código que uso para que porfavor me ayuden a completarlo gracias adelantadas

Código Delphi [-]
Query1.SQL.Clear;
Query1.SQL.Add('SELECT fec_ini FROM db');
//Query1.SQL.Add('WHERE fec_ini='+QuotedStr(Edit1.Text));// si desactivo esta linea el programa ordena por fecha los 
//registros y si la dejo activa lanza error al pulsar el radio button 1
Query1.SQL.Add('ORDER by fec_ini=');
Query1.Open;


y para los amigos que sugieren el datetimepicker no lo uso por que ni siquiera sabia que existia y no tengo ni idea de
como se usa pero si tienen una solucion con el datetimepicker es bienvenida

gracias por su tiempo!!
Responder Con Cita
  #14  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
gracias paladincubano tu código.......
, bueno, eduarcol ya casi es cubano, los demas si que no se por donde sean cubanos.......

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #15  
Antiguo 01-04-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Red face

porfa ayundeme !!
Responder Con Cita
  #16  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Código Delphi [-]
Query1.SQL.Clear;
Query1.SQL.Add('SELECT fec_ini FROM db');
Query1.SQL.Add('WHERE fec_ini= :fecha');
Query1.SQL.Add('ORDER by fec_ini');
Query1.ParamByName('fecha').Value := DateTimePicker1.Date;
Query1.Open;

Te toca investigar el uso del DateTimePicker1, y para que veas que no soy malo, ese objeto está en la pestaña Win32

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #17  
Antiguo 01-04-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Unhappy

sigue dando error

dice 'type mismatch in expression'

este es el código que tengo espero me ayuden a conseguir mi falla
Código Delphi [-]
procedure TForm14.RadioGroup1Click(Sender: TObject);
var
buscar:string;
Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
if RadioGroup1.ItemIndex=0 then
begin
Query1.SQL.Clear;
Query1.SQL.Add('SELECT fec_ini FROM db');
Query1.SQL.Add('WHERE fec_ini= :fecha');
Query1.SQL.Add('ORDER by fec_ini');
Query1.ParamByName('fecha').Value := DateTimePicker1.Date;
Query1.Open;
(*Query1.SQL.Clear;
Query1.SQL.Add('SELECT fec_ini FROM db');
Query1.SQL.Add('WHERE fec_ini='+QuotedStr(Edit1.Text));
Query1.SQL.Add('ORDER by fec_ini=');
Query1.Open;*)
end;
if radiogroup1.ItemIndex=1 then
begin
  Query1.Close;
  DecodeDate(Now, Year, Month, Day);
  Query1.sql.clear;
  Query1.sql.add('select registro,cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon  _pol,sub_pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol from db where EXTRACT(month FROM registro) = :mes');
  Query1.ParamByName('mes').AsInteger := month;
  Query1.Open;
  form14.grilla;
end;
if RadioGroup1.ItemIndex=2 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique el Número de Póliza por el cual desea ordenar las Pólizas','Información',MB_iconinformation);
edit1.SetFocus;
end;
if RadioGroup1.ItemIndex=3 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique el Código de Póliza por el cual desea ordenar las Pólizas','Información',MB_iconinformation);
edit1.SetFocus;
end;
if RadioGroup1.ItemIndex=4 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique La compañia por el cual desea ordenar las Pólizas','Información',MB_iconinformation);
edit1.SetFocus;
end;
if RadioGroup1.ItemIndex=5 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique el Ramo por el cual desea ordenar las Pólizas','Información',MB_iconinformation);
edit1.SetFocus;
end;
if RadioGroup1.ItemIndex=6 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique La cédula del cliente para localizar la póliza deseada','Información',MB_iconinformation);
edit1.SetFocus;
end;
if RadioGroup1.ItemIndex=7 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique el Nombre o Razón Social por el cual desea ordenar ó localizar las Pólizas','Información',MB_iconinformation);
edit1.SetFocus;
end;
if RadioGroup1.ItemIndex=8 then
begin
edit1.Enabled:=true;
edit1.Clear;
application.MessageBox('Indique el Número de Teléfono por el cual desea ordenar ó localizar las Pólizas','Información',MB_iconinformation);
edit1.SetFocus;
end;
case RadioGroup1.ItemIndex of
0:edit1.Enabled:=true;
1:edit1.enabled:=true;
end;
end;
procedure TForm14.Edit1Change(Sender: TObject);
var
buscar:string;
begin
case RadioGroup1.ItemIndex of
  2:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where num_pol like "' + (Edit1.Text) + '%"';
  3:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where cod_pol like "' + (Edit1.Text) + '%"';
  4:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where com_pol like "' + (Edit1.Text) + '%"';
  5:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where ram_pol like "' + (Edit1.Text) + '%"';
  6:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where ced_cli like "' + (Edit1.Text) + '%"';
  7:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where nom_cli like "' + (Edit1.Text) + '%"';
  8:buscar:='Select cod_pol,com_pol,ram_pol,bie_pol,can_pol,num_pol,cer_pol,fec_ini,fec_ven,pri_pol,cmn_pol,bon_pol,sub_  pol,ced_cli,nom_cli,dir_cli,tel_cli,pag_pol,pre_pol,deu_pol,registro From db.db Where Tel_cli like "' + (Edit1.Text) + '%"';
end;
  Query1.Close;
  DBGrid1.Enabled:=false;
  dbgrid1.Enabled:=true;
  Query1.SQL.Clear;
  Query1.SQL.Add(buscar);
  Query1.Active:=True;
  Query1.Open;
  dbgrid1.Columns.Items[0].Width:=60;
  dbgrid1.Columns.Items[1].Width:=200;
  dbgrid1.Columns.Items[2].Width:=200;
  dbgrid1.Columns.Items[3].Width:=90;
  dbgrid1.Columns.Items[4].Width:=90;
  dbgrid1.Columns.Items[5].Width:=90;
  dbgrid1.Columns.Items[6].Width:=90;
  dbgrid1.Columns.Items[7].Width:=90;
  dbgrid1.Columns.Items[8].Width:=90;
  dbgrid1.Columns.Items[9].Width:=90;
  dbgrid1.Columns.Items[10].Width:=90;
  dbgrid1.Columns.Items[11].Width:=90;
  dbgrid1.Columns.Items[12].Width:=90;
  dbgrid1.Columns.Items[13].Width:=90;
  dbgrid1.Columns.Items[14].Width:=150;
  dbgrid1.Columns.Items[15].Width:=150;
  dbgrid1.Columns.Items[16].Width:=90;
  dbgrid1.Columns.Items[17].Width:=90;
  dbgrid1.Columns.Items[18].Width:=90;
  dbgrid1.Columns.Items[19].Width:=90;
  dbgrid1.Columns[0].Title.caption:='Código';
  dbgrid1.Columns[1].Title.caption:='Compañia';
  dbgrid1.Columns[2].Title.caption:='Ramo';
  dbgrid1.Columns[3].Title.caption:='Bien Asegurado';
  dbgrid1.Columns[4].Title.Caption:='Cantidad';
  dbgrid1.Columns[5].Title.Caption:='Número de Póliza';
  dbgrid1.Columns[6].Title.Caption:='Número de Cert.';
  dbgrid1.Columns[7].Title.Caption:='Fecha Inicio';
  dbgrid1.Columns[8].Title.Caption:='Fecha Vence';
  dbgrid1.Columns[9].Title.Caption:='Prima';
  dbgrid1.Columns[10].Title.Caption:='Comisión';
  dbgrid1.Columns[11].Title.Caption:='Bono';
  dbgrid1.Columns[12].Title.Caption:='Sub-Comisión';
  dbgrid1.Columns[13].Title.Caption:='Cédula';
  dbgrid1.Columns[14].Title.Caption:='Nombre';
  dbgrid1.Columns[15].Title.Caption:='Domicilio Fiscal';
  dbgrid1.Columns[16].Title.Caption:='Teléfono';
  dbgrid1.Columns[17].Title.Caption:='Pago';
  dbgrid1.Columns[18].Title.Caption:='Precio';
  dbgrid1.Columns[19].Title.Caption:='Deuda';
end;

el radiobutton 0 es el que dice fecha el resto de opciones van a la perfeccion

Gracias adelantadas!!
Responder Con Cita
  #18  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
A ver, dime una cosa, que tipo de campo es fec_ini, Date o String;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #19  
Antiguo 01-04-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
fec_ini es tipo Date

tabla paradox 7 y uso delphi 7

Gracias!
Responder Con Cita
  #20  
Antiguo 01-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
fec_ini es tipo Date

tabla paradox 7 y uso delphi 7

Gracias!
Pues en apariencia deberia de funcionar, has este cambio:

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

Si no funciona y te sigue mandando error tal vez es el formato de fecha corta que esta usando la db, pero eso lo podrias resolver poniendo esta linea:

Código Delphi [-]
ShortDateFormat := 'mm/dd/yyyy';
//ó 
ShortDateFormat := 'dd/mm/yyyy';

Prueba con ambas en caso de que no te funcione.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Busqueda SQL por Fecha. Ayuda!!Porfavorrrrrr lKinGl SQL 1 22-03-2008 12:37:25
Busqueda por fecha IBquery mjjj SQL 4 23-10-2007 20:36:47
Busqueda segun el mes de una fecha(no la fecha completa) federiconqn21 Firebird e Interbase 1 05-05-2006 15:39:53
Busqueda en un campo fecha seken Varios 7 14-04-2005 14:11:19
Problema con fecha en busqueda yanelisroque SQL 8 27-02-2005 02:44:03


La franja horaria es GMT +2. Ahora son las 05:49:22.


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
Copyright 1996-2007 Club Delphi