PDA

Ver la Versión Completa : Consulta por fecha query delphi 7


Yensis22
25-08-2008, 22:24:42
esta consuta me esta ando un error y la base de datos esta en access

este es codigo del query

*************
SELECT Cod_Equipos, Equipos, Nombre_Cliente, Descripcion, Marca, Modelo, Serial, Fecha_Inicio, Dat_averia, Status, Fecha_Final
FROM "Equipos.db" Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Inicio <= :fecha2)

**************


$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
y en el parametroes tengo estas dos variables

0- fecha1 DATATYPE (FTDATE) Y PARAMETYPE (PTLNPUT)

1- fecha2 DATATYPE (FTDATE) Y PARAMETYPE (PTLNPUT)

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


y en el From tengo este codigo lo que esta en rojo es donde se para el cursol

********************************
unit FConsuFechaEquip;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask, Grids, DBGrids, ExtCtrls, Buttons;
type
TFConsuEquiFech = class(TForm)
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Bevel1: TBevel;
Label1: TLabel;
Label4: TLabel;
Label6: TLabel;
DBGrid1: TDBGrid;
Desde: TMaskEdit;
Hasta: TMaskEdit;
DBMemo1: TDBMemo;
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
procedure SpeedButton4Click(Sender: TObject);
procedure DesdeExit(Sender: TObject);
procedure HastaExit(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FConsuEquiFech: TFConsuEquiFech;
implementation
uses login;
{$R *.dfm}
procedure TFConsuEquiFech.SpeedButton4Click(Sender: TObject);
begin
Close ();
end;

procedure TFConsuEquiFech.DesdeExit(Sender: TObject);
Var
A,B: TDate;
begin
A:= Strtodate(Desde.text);
B:= Strtodate(Hasta.text);
if A > B then
Begin
Showmessage('La Fecha inicial no Puede ser Mayor que la Final');
desde.clear;
Activecontrol:= desde;
End;
end;
procedure TFConsuEquiFech.HastaExit(Sender: TObject);
Var
A,B: TDate;
begin
A:= Strtodate(Desde.text);
B:= Strtodate(Hasta.text);
if B < A then
Begin
Showmessage('La Fecha Final no Puede ser Menor que la Inicial');
Hasta.clear;
Activecontrol:= Hasta;
End;
end;
procedure TFConsuEquiFech.FormShow(Sender: TObject);
begin
desde.Clear;
hasta.Text := datetostr(now);
Desde.Text := datetostr(now);
end;


procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').AsDate:=StrToDate(desde.text);
QEquiposporFech.ParamByName('fecha2').AsDate:=StrToDate(hasta.text);
QEquiposporFech.active :=true;
// QEquiposporFech.Dataset := QEquiposporFech;
QEquiposporFech := Desde;
QEquiposporFech := Hasta;
end;
end.
*******************************


esto son los erroere que manda

[Error] FConsuFechaEquip.pas(100): Incompatible types: 'TQuery' and 'TMaskEdit'
[Error] FConsuFechaEquip.pas(101): Incompatible types: 'TQuery' and 'TMaskEdit'
[Error] FConsuFechaEquip.pas(105): ';' expected but '.' found
[Error] FConsuFechaEquip.pas(107): Declaration expected but end of file found
[Fatal Error] Facturacion.dpr(21): Could not compile used unit 'FConsuFechaEquip.pas'

Caral
25-08-2008, 23:46:31
Hola
Primera observación, usa las etiquetas:
Despues de analizarlo con las etiquetas, lo veremos.

SELECT Cod_Equipos, Equipos, Nombre_Cliente, Descripcion, Marca, Modelo, Serial, Fecha_Inicio, Dat_averia, Status, Fecha_Final
FROM "Equipos.db" Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Inicio <= :fecha2)


unit FConsuFechaEquip;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask, Grids, DBGrids, ExtCtrls, Buttons;
type
TFConsuEquiFech = class(TForm)
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Bevel1: TBevel;
Label1: TLabel;
Label4: TLabel;
Label6: TLabel;
DBGrid1: TDBGrid;
Desde: TMaskEdit;
Hasta: TMaskEdit;
DBMemo1: TDBMemo;
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
procedure SpeedButton4Click(Sender: TObject);
procedure DesdeExit(Sender: TObject);
procedure HastaExit(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FConsuEquiFech: TFConsuEquiFech;
implementation
uses login;
{$R *.dfm}
procedure TFConsuEquiFech.SpeedButton4Click(Sender: TObject);
begin
Close ();
end;

procedure TFConsuEquiFech.DesdeExit(Sender: TObject);
Var
A,B: TDate;
begin
A:= Strtodate(Desde.text);
B:= Strtodate(Hasta.text);
if A > B then
Begin
Showmessage('La Fecha inicial no Puede ser Mayor que la Final');
desde.clear;
Activecontrol:= desde;
End;
end;
procedure TFConsuEquiFech.HastaExit(Sender: TObject);
Var
A,B: TDate;
begin
A:= Strtodate(Desde.text);
B:= Strtodate(Hasta.text);
if B < A then
Begin
Showmessage('La Fecha Final no Puede ser Menor que la Inicial');
Hasta.clear;
Activecontrol:= Hasta;
End;
end;
procedure TFConsuEquiFech.FormShow(Sender: TObject);
begin
desde.Clear;
hasta.Text := datetostr(now);
Desde.Text := datetostr(now);
end;


procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').AsDate:=StrToDate(desde.text);
QEquiposporFech.ParamByName('fecha2').AsDate:=StrToDate(hasta.text);
QEquiposporFech.active :=true;
// QEquiposporFech.Dataset := QEquiposporFech;
QEquiposporFech := Desde;
QEquiposporFech := Hasta;
end;
end.
Ahora si se ve mejor.
Saludos

Caral
25-08-2008, 23:50:55
Hola
Bueno, no entiendo.
Primero que nada no se por que la fecha la pones en un edit, pudiendo usar un datetimepicker.
segundo, nunca va a encontrar desde o hasta destro del query, ese es un error.
tercero, para que usar variables a y b para lo mismo.
No se, tal vez si me explicas.
Saludos

Yensis22
26-08-2008, 03:22:25
lo de la etiquetas ye entendi pero de lo que me dise del codigo no como puedo resolver este problema

Caro
26-08-2008, 03:32:44
Hola Yenis22, los errores que te marcan es por esta parte.


procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').AsDate:=StrToDate(desde.text);
QEquiposporFech.ParamByName('fecha2').AsDate:=StrToDate(hasta.text);
QEquiposporFech.active :=true;
// QEquiposporFech.Dataset := QEquiposporFech;
QEquiposporFech := Desde;
QEquiposporFech := Hasta;
end; //Le falta este end del With
end;


Le falta el end; del With y no puedes asignar un MaskEdit a un Query, esas dos lineas estan demas.

Saluditos

Yensis22
26-08-2008, 04:47:40
Este codigo me funciona bien pero con una base de dato en paradox y esque este lo tengo que entregar en acces pero cundo los desabilite la dos opciones que me dijiste que estan de mas me mada este error pero que con esa dos ocpciones es que funciona en paradox perfetamente.

este es el erroe proyect facturacipon.exe raised exception class EDBEngineError with messeger "general SQL Error (Microsoft) (Controlador ODBC Microsoft Access) Formato de fecha u hora no nvalido (null)". Process stopped. use step o run continue. y esta el la pater que se nala en el codigo ( QEquiposporFech.active :=true; )

procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').AsDate:=StrToDate(desde.text);
QEquiposporFech.ParamByName('fecha2').AsDate:=StrToDate(hasta.text);
QEquiposporFech.active :=true;
// QEquiposporFech.Dataset := QEquiposporFech;
// QEquiposporFech := Desde;
//QEquiposporFech := Hasta;
end ;
end;
end.

tcp_ip_es
26-08-2008, 09:49:51
No es por nada pero ¿por qué escribes comiéndote letras?


Este codigo me funciona bien pero con una base de dato en paradox y esque este lo tengo que entregar en acces pero cundo los desabilite la dos opciones que me dijiste que estan de mas me mada este error pero que con esa dos ocpciones es que funciona en paradox perfetamente.



y más....


lo de la etiquetas ye entendi pero de lo que me dise del codigo no como puedo resolver este problema

y asi podría seguir... no me lo tomes a mal lo mismo no hablas/escribes el castellano/español, entonces se entendería....

bueno a lo que vamos... estas intentando mandar un formato date y lo que tienes en access es un datetime, ya que un campo fecha sólo como tal no existe en access, por lo menos en la versión que tengo yo instalada(Access 2000) así que es bien sencillo....


QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').Asdatetime:=strtodatetime(desde.text);
QEquiposporFech.ParamByName('fecha2').Asdatetime:=strtodatetime(hasta.text);
QEquiposporFech.active :=true;


Espero que te sirva, cuéntanos como te ha ido....

P.D. Por cierto los parametros los tendrías que cambiar el tipo de ftDate a ftDateTime

Yensis22
26-08-2008, 14:46:59
[/Ya realice los cambio, pero no medan resultada si ejecuto la consulta con interbalos de fecha no haces nada no tira ningun mensaje ni datos tampoco, si la ejecuto en planco me tira este error QUOTE]

[QUOTE]"//" is not a valid invalin date date and time

Pero es que en EditMask no esta el tipo de formato dataime y el que tengo es e date y le es relizado varios cambios pero no es tenido resultados y es que en access el unico formato de facha es Fecha/Hora. tambie cambie los paramtros al tipo ftdatetime y relice uno cambios en el coddigo ch

var
FConsuEquiFech: TFConsuEquiFech;

implementation

uses login;

{$R *.dfm}

procedure TFConsuEquiFech.SpeedButton4Click(Sender: TObject);
begin
Close ();
end;


procedure TFConsuEquiFech.DesdeExit(Sender: TObject);
Var
A,B: Tdate;
begin
A:= strtodatetime(Desde.text);
B:= strtodatetime(Hasta.text);
if A > B then
Begin
Showmessage('La Fecha inicial no Puede ser Mayor que la Final');
desde.clear;
Activecontrol:= desde;
End;
end;

procedure TFConsuEquiFech.HastaExit(Sender: TObject);
Var
A,B: Tdate;
begin
A:= strtodatetime(Desde.text);
B:= strtodatetime(Hasta.text);
if B < A then
Begin
Showmessage('La Fecha Final no Puede ser Menor que la Inicial');
Hasta.clear;
Activecontrol:= Hasta;
End;
end;

procedure TFConsuEquiFech.FormShow(Sender: TObject);
begin
desde.Clear;
hasta.Text := datetimetostr(now);
Desde.Text := datetimetostr(now);
end;




procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').Asdatetime:=strtodatetime(desde.text);
QEquiposporFech.ParamByName('fecha2').Asdatetime:=strtodatetime(hasta.text);
QEquiposporFech.active :=true;
// QEquiposporFech.Dataset := QEquiposporFech;
// QEquiposporFech := Desde;
//QEquiposporFech := Hasta;

end ;
end;

end

Yensis22
26-08-2008, 15:22:21
[/Ya realice los cambio, pero no medan resultada si ejecuto la consulta con interbalos de fecha no haces nada no tira ningun mensaje ni datos tampoco, si la ejecuto en planco me tira este error QUOTE]

[QUOTE]"//" is not a valid invalin date date and time

Pero es que en EditMask no esta el tipo de formato dataime y el que tengo es e date y le es relizado varios cambios pero no es tenido resultados y es que en access el unico formato de facha es Fecha/Hora. tambie cambie los paramtros al tipo ftdatetime y relice uno cambios en el coddigo ch

var
FConsuEquiFech: TFConsuEquiFech;

implementation

uses login;

{$R *.dfm}

procedure TFConsuEquiFech.SpeedButton4Click(Sender: TObject);
begin
Close ();
end;


procedure TFConsuEquiFech.DesdeExit(Sender: TObject);
Var
A,B: Tdate;
begin
A:= strtodatetime(Desde.text);
B:= strtodatetime(Hasta.text);
if A > B then
Begin
Showmessage('La Fecha inicial no Puede ser Mayor que la Final');
desde.clear;
Activecontrol:= desde;
End;
end;

procedure TFConsuEquiFech.HastaExit(Sender: TObject);
Var
A,B: Tdate;
begin
A:= strtodatetime(Desde.text);
B:= strtodatetime(Hasta.text);
if B < A then
Begin
Showmessage('La Fecha Final no Puede ser Menor que la Inicial');
Hasta.clear;
Activecontrol:= Hasta;
End;
end;

procedure TFConsuEquiFech.FormShow(Sender: TObject);
begin
desde.Clear;
hasta.Text := datetimetostr(now);
Desde.Text := datetimetostr(now);
end;




procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').Asdatetime:=strtodatetime(desde.text);
QEquiposporFech.ParamByName('fecha2').Asdatetime:=strtodatetime(hasta.text);
QEquiposporFech.active :=true;
// QEquiposporFech.Dataset := QEquiposporFech;
// QEquiposporFech := Desde;
//QEquiposporFech := Hasta;

end ;
end;

end

Caral
26-08-2008, 18:41:16
Hola
Empecemos desde el principio:
1- los campos estan mal en la sentencia sql:
fecha inicio y fecha final, deberia ser asi:

SELECT Cod_Equipos, Equipos, Nombre_Cliente, Descripcion, Marca, Modelo, Serial, Fecha_Inicio, Dat_averia, Status, Fecha_Final
FROM "Equipos.db" Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Final <= :fecha2)

2- Access reconoce las fechas con esto #fecha#, de lo contrario te da error.
Por lo tanto se tiene que dar formato a la fecha:


procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
ShortDateFormat := '#yyyy/mm/dd#';
QEquiposporFech.active:=false;
QEquiposporFech.ParamByName('fecha1').Value:=strtodate(desde.text);
QEquiposporFech.ParamByName('fecha2').Value:=strtodate(hasta.text);
QEquiposporFech.active :=true;
ShortDateFormat := 'dd/mm/yyyy';

end ;
end;
A ver que pasa.
Saludos

Yensis22
26-08-2008, 19:44:43
Hola
Empecemos desde el principio:
1- los campos estan mal en la sentencia sql:
fecha inicio y fecha final, deberia ser asi:

SELECT Cod_Equipos, Equipos, Nombre_Cliente, Descripcion, Marca, Modelo, Serial, Fecha_Inicio, Dat_averia, Status, Fecha_Final
FROM "Equipos.db" Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Final <= :fecha2)

2- Access reconoce las fechas con esto #fecha#, de lo contrario te da error.
Por lo tanto se tiene que dar formato a la fecha:


procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin
With ConexionDB do begin
ShortDateFormat := '#yyyy/mm/dd#';
QEquiposporFech.active:=false;
QEquiposporFech.ParamByName('fecha1').Value:=strtodate(desde.text);
QEquiposporFech.ParamByName('fecha2').Value:=strtodate(hasta.text);
QEquiposporFech.active :=true;
ShortDateFormat := 'dd/mm/yyyy';

end ;
end;
A ver que pasa.
Saludos
Relice los cambios pero sin resultados con este codigo en SQL no me permite activar la conexion me manda un error

Table dose not exist (microsoft )(controlador OBDC microsof access ) El motor de base de dato de microsoft jet no puede encontrar la tabla o consulta Generel SQL error debajo esta el codigo que uso cundo manda este error

SELECT Cod_Equipos, Equipos, Nombre_Cliente, Descripcion, Marca, Modelo, Serial, Fecha_Inicio, Dat_averia, Status, Fecha_Final
FROM "Equipos.db" Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Final <= :fecha2)

y de esta forma es la unicaa que me permite activar la la conmsulta pero no me manda ningun resulta cuando lo ejecuto este es el codigo en SQL

SELECT *FROM Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Inicio <= :fecha2)


Este codigo me funciona bie pero en paradox y les cambiado los parametro de ftdat y no me funciona por que mi base de dato esta en access tambien les puse el formato ftdatetime y nada

SELECT Cod_Equipos, Equipos, Nombre_Cliente, Descripcion, Marca, Modelo, Serial, Fecha_Inicio, Dat_averia, Status, Fecha_Final
FROM "Equipos.db" Equipos
WHERE (Fecha_Inicio>= :fecha1) and (Fecha_Inicial <= :fecha2)[/



implementation

uses login;

{$R *.dfm}

procedure TFConsuEquiFech.SpeedButton4Click(Sender: TObject);
begin
Close ();
end;


procedure TFConsuEquiFech.DesdeExit(Sender: TObject);
Var
A,B: Tdate;
begin
A:= strtodate(Desde.text);
B:= strtodate(Hasta.text);
if A > B then
Begin
Showmessage('La Fecha inicial no Puede ser Mayor que la Final');
desde.clear;
Activecontrol:= desde;
End;
end;

procedure TFConsuEquiFech.HastaExit(Sender: TObject);
Var
A,B: Tdate;
begin
A:= strtodate(Desde.text);
B:= strtodate(Hasta.text);
if B < A then
Begin
Showmessage('La Fecha Final no Puede ser Menor que la Inicial');
Hasta.clear;
Activecontrol:= Hasta;
End;
end;

procedure TFConsuEquiFech.FormShow(Sender: TObject);
begin
desde.Clear;
hasta.Text := datetostr(now);
Desde.Text := datetostr(now);
end;




procedure TFConsuEquiFech.SpeedButton1Click(Sender: TObject);
begin

With ConexionDB do begin

ShortDateFormat := '#yyyy/mm/dd#';
QEquiposporFech.active :=false;
QEquiposporFech.ParamByName('fecha1').Asdatetime:=strtodate(desde.text);
QEquiposporFech.ParamByName('fecha2').Asdatetime:=strtodate(hasta.text);
QEquiposporFech.active :=true;
ShortDateFormat := 'dd/mm/yyyy';

// QEquiposporFech.Dataset := QEquiposporFech;
// QEquiposporFech := Desde;
//QEquiposporFech := Hasta;

end ;
end;

end.

Caral
26-08-2008, 20:25:57
Hola
Yensis22, no es por ser pesado, pero hay que revisar bien lo que dicen los errores, asi podras saber que esta pasando.
Aqui tienes un ejemplo tanto con datetimepicker como con maskedit, los dos funcionan.
Saludos

Yensis22
26-08-2008, 21:48:44
Hola
Yensis22, no es por ser pesado, pero hay que revisar bien lo que dicen los errores, asi podras saber que esta pasando.
Aqui tienes un ejemplo tanto con datetimepicker como con maskedit, los dos funcionan.
Saludos
el emplo funciona bien pero les faltan algunas casitas dentros del query

En el emplo funciona biene pero dento del query no hay ninguna sentencia de SQL esta en blaco pero y los para metros no esta estan en balnco como se cual es el balor de los para metros y los nombre que tienen y disculpa pero es que soy un novato

Caral
26-08-2008, 21:52:07
Hola
1- Aqui el Novato soy yo.
2- El query no necesita tener nada en la casilla, la sentencia se la doy directamente por codigo.
3- Los parametros se pueden poner por orden (como en el ejemplo) o por Nombre, da igual, cuando es por orden empiezan del 0.
Saludos

Yensis22
26-08-2008, 22:36:51
ya lo solucione gracias

tcp_ip_es
27-08-2008, 09:13:04
Yensis me alegro por la solución de tu problema, pero me ahora me queda la duda ¿Por qué sigues escribiendo así?

el emplo funciona bien pero les faltan algunas casitas dentros del query