Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   error de criterios (https://www.clubdelphi.com/foros/showthread.php?t=50234)

douglas 12-11-2007 17:52:10

error de criterios
 
buenas chicos quiero hacer una consulta, donde necesito mostrar en un grid, todas las fechas que pertenecen al mes que el usuario elije, pero me da el siguiente error:


no coinciden los tipos de datos en la expresion de criterios

el codigo es el siguiente:
Código Delphi [-]
procedure TForm5.ComboBox1Change(Sender: TObject);
var
a:real;
b,fecha1,fecha2,anio:string;
begin
     anio:=getlocald;
     anio:=copy(anio,7,10);
     a:=combobox1.ItemIndex+1;
     fecha1:='01/'+formatfloat('00',a)+'/'+anio;
     fecha2:='31/'+formatfloat('00',a)+'/'+anio;
     adoquery1.Close;
     adoquery1.SQL.Clear;
     adoquery1.SQL.Add('select total from dia');
     adoquery1.SQL.Add(' where fecha between :Fechain and :Fechafin');
     adoquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
     adoquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
     adoquery1.Open;
     
end;

Caral 12-11-2007 17:56:58

Hola
Para mi el problema es que estas poniendo la fecha como un float, cuando es date.
Y en cuanto al parametro lo pones como value y sigue siendo Date.
Saludos

douglas 12-11-2007 18:02:50

pues las tengo en strings, que son las fecha1 y fecha2, ahora lo demas no te lo entendi, perdon que te moleste, me puede explicar otro poquito

Caral 12-11-2007 18:07:35

Hola
Empecemos desde el principio.
Las Fechas en la tabla se suelen poner en un campo Date osea fecha, no en un string que es tipo texto.
Cuando haces una comparacion con el between lo haces para un campo fecha.
Por eso comentario
Saludos

douglas 12-11-2007 18:10:45

cierto entonces tengo que cambiarlo de tipo string a tipo date.

utilizo este codigo para obtener la fecha:
Código Delphi [-]
anio:=getlocald;
     anio:=copy(anio,7,10);
     a:=combobox1.ItemIndex+1;
     fecha1:='01/'+formatfloat('00',a)+'/'+anio;
     fecha2:='31/'+formatfloat('00',a)+'/'+anio;

pero como puedo hacer eso y luego pasarlo a tipo fecha

con algo asi como:

Código Delphi [-]
strtodate

Caral 12-11-2007 18:16:20

Hola
Otra vez empecemos.
Para que usas las variable Fecha1 y 2?
por que no sacas los datos de un maskedit o un datetimepicker, en vez de hacer todo ese royo?.
Me explicas cual es la necesidad?, tal vez no la entiendo.
Saludos

douglas 12-11-2007 18:21:45

mira todo ese revoltijo, es para que cuando elijan el mes de ese combobox, coloque el numero del mes, luego la funcion del anio es conseguir el año actual en la computadora, bueno fecha 1 y 2, son para que en la fecha uno que toma el primer dia del mes, y fecha dos que toma el dia 31, como el ultimo dia del mes, solo como para que me tomes todos los datos del mes.

basicamente lo que necesito hacer es una busqueda por mes, de todos los movimientos que tengan.

eduarcol 12-11-2007 18:26:09

Prueba colocando el StrtoDate
Código Delphi [-]
procedure TForm5.ComboBox1Change(Sender: TObject);
var
a:real;
b,fecha1,fecha2,anio:string;
begin
     anio:=getlocald;
     anio:=copy(anio,7,10);
     a:=combobox1.ItemIndex+1;
     fecha1:='01/'+formatfloat('00',a)+'/'+anio;
     fecha2:='31/'+formatfloat('00',a)+'/'+anio;
     adoquery1.Close;
     adoquery1.SQL.Clear;
     adoquery1.SQL.Add('select total from dia');
     adoquery1.SQL.Add(' where fecha between :Fechain and :Fechafin');
     adoquery1.Parameters.ParamByName('Fechain').Value:=StrtoDate(fecha1);
     adoquery1.Parameters.ParamByName('Fechafin').Value:=StrtoDate(fecha2);
     adoquery1.Open;
end;

ContraVeneno 12-11-2007 18:26:20

Como ya te dijeron, sería mejor usar TDateTimePicker en lugar de TEdit

y la función "FormatDateTime" también te puede ser útil.

egostar 12-11-2007 18:29:30

Cita:

Empezado por douglas (Mensaje 245551)
mira todo ese revoltijo, es para que cuando elijan el mes de ese combobox, coloque el numero del mes, luego la funcion del anio es conseguir el año actual en la computadora, bueno fecha 1 y 2, son para que en la fecha uno que toma el primer dia del mes, y fecha dos que toma el dia 31, como el ultimo dia del mes, solo como para que me tomes todos los datos del mes.

basicamente lo que necesito hacer es una busqueda por mes, de todos los movimientos que tengan.

Hacer esto que quieres te lleva a errores de datos, por ejemplo imaginate esta consulta

fecha1 := '01/02/2007'
fecha2 := '31/02/2007'

Vaya, eso es un error tremendo no?

Salud OS

douglas 12-11-2007 18:39:29

si me tiro error en la fecha 2, pero como puedo realiar mi busqueda pormes en la tabla, cuando la tabal tienen movimientos por dia, como puedo hacer eso, perdon alguien me puede hacer el favor de explicar que es un tdatetimpicker

egostar 12-11-2007 18:49:48

No estoy muy seguro pero aquí debe haber alguien que nos ayude, pero se me ocurre que puedes usar la funcion Extract(month from fecha).

Algo así

Código Delphi [-]
Where Extract(month from Tabla.Fecha) = 2

Depende de la base de datos que uses.

Salud OS

Caral 12-11-2007 19:00:47

Hola
Como dije anteriormente, yo no me complicaria la vida, lo haria asi:
De la paleta Win32, selecciona el DateTimePicker y coloca dos en el form.
Pones este codigo y ya:
Código Delphi [-]
procedure TForm5.ComboBox1Change(Sender: TObject);
begin
     adoquery1.Close;
     adoquery1.SQL.Clear;
     adoquery1.SQL.Text:= 'select total from dia where Fecha >= '+DateToStr(DateTimePicker1.Date)+' AND Fecha <= '+DateToStr(DateTimePicker2.Date);
     adoquery1.Open;
end;
Como podras ver.
1- NO hay variables
2- NO hay paremetros
3- No hay trasformaciones de ningun tipo.
4- Mucho mas legible.
Saludos

douglas 12-11-2007 19:07:17

perdon egostar pero con el metodo que propones me tira un erro que dice: error no especificado, perdonen tanta molestia chicos

douglas 12-11-2007 19:09:08

ok caral gracias probader de inmediato y lo comento


La franja horaria es GMT +2. Ahora son las 19:50:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi