PDA

Ver la Versión Completa : conectar un grid o un db grid a un query


douglas
31-10-2007, 02:08:28
buenas chicos necesito que en un gridme muestre determinada informacion, para lo cual utilizo el siguiente codigo:

b:=combobox1.Text;
a:=combobox1.Items.IndexOf(b)+1;
fecha1:='01/'+formatfloat('00',a)+'/'+'2007';
fecha2:='31/'+formatfloat('00',a)+'/'+'2007';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select fecha from ciber');
query1.SQL.Add(' where fecha between :Fechain and :Fechafin');
query1.ParamByName('Fechain').Value:=fecha1;
query1.ParamByName('Fechafin').Value:=fecha2;
query1.Open;

perdon si los molesto, agradezco toda ayuda que me brinden, que Dios los Bendiga

Caral
31-10-2007, 03:03:44
Hola
Perdon pero no entiendo.
Lo que entiendo:
1-tienes un combobox
2-este aparentemente contiene parte de la informacion de una fecha.
3-haces un query y muestras una infromacion que se filtra en base a el combobox y los parametros.
Pregunto:
Cual es el problema, el dbgrid supongo que contendra la infromacion del query?, en este caso unicamente la fecha.
Perdon douglas, soy tan novato o mas que tu, no entiendo lo que quieres.
Tal vez si lo explicas un poco mas?:)
Saludos

HenryAraniva
31-10-2007, 03:05:38
si pudieras explicar un poco mejor lo que necesitas mostrar en el grido y las condiciones que se deben cumplir para que muestre los datos sería un poco mas fácil ayudarte

douglas
31-10-2007, 03:08:28
caral mil gracias por responder.

el combobox me sirve para determinar el mes que quieren ver en el grid, lo que me devuelve el query es el numero de mes el cual me sirve para complementar la fecha, la cual va del dia 1 al 31, es esta bien,

lo que necesito es, saber como hacer que esa condicion se aplique al grid, como puedo hacerlo, perdon que te ponga en tantas molestias.

lo que necesito es enviar al grid la fecha del primer dia del mes al ultimo dia del mes y que por medio del combobox, elijan el mes que desean ver

Caral
31-10-2007, 03:14:58
Hola
douglas, perdona que te insista, no lo entiendo y de verdad perdona pero me parece algo rara tu pregunta.
Veamos:
Tienes un query, el que contiene la informacion filtrada en base a una fecha.
Este devuelve el numero de mes.
Que quieres que te Muestre el dbgrid?
para mi lo que mostraria seria eso, el numero del mes, que mas?.
Que es lo que quieres hacer, que en vez del combobox uses un dbgrid?
Que la informacion se muestre en el dbgrid?.
Que?
Perdona, soy muy lento.
Saludos

douglas
31-10-2007, 03:18:25
no perdon que te ponga en estas, mira la situacion es que en la tabla hay almacenados, la fecha, el costo, el impuesto, la gancia diaria de un ciber.

lo que deseo hacer es que al escoger el usuario el mes en el combobox, me despliegue en el grid la informacion de ese mes.

en serio me da mucha pena contigo molestarte tanto.

HenryAraniva
31-10-2007, 03:21:14
ok. creo que ya entendi un poco, lo que podrías hacer es usar un dbgrid, un datasource y el query. y en el evento onchage del combobox podrías poner
b:=combobox1.Text;
a:=combobox1.Items.IndexOf(b)+1;
fecha1:='01/'+formatfloat('00',a)+'/'+'2007';
fecha2:='31/'+formatfloat('00',a)+'/'+'2007';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from ciber where fecha between'+fecha1+' and '+Fecha2);
query1.Open;

Caral
31-10-2007, 03:29:35
Hola
El ejemplo de HenryAraniva, esta muy interesante.
En el wiki del club he puesto varios ejemplos entre ellos uno que filtra con combobox y dbgrid (http://wiki.clubdelphi.com/wiki/index.php/Codigo_en_Delphi_%28Peque%C3%B1os_Ejemplos%29_DESCARGAS#Uso_de_Combobox_y_Filtros), se que usas paradox, estos estan en access, pero te daran mucha idea de como hacerlo.
Si despues de verlo continuas con la duda, la trataremos de resolver, te parece?.
Nota: Los ejemplos tienen la base de datos.
Saludos

douglas
31-10-2007, 03:38:46
estaba examinando tu ejemplo, puchis que inteligente eres, wow pero tu usas ado conecttion y ado querys, yo solamente uso querys, y pormedio de el conectas al grid, pero, yo uso solamente query, probare cambiar mi query por el adoquery, espero que no me afecte.

de verdad te agradezco mucho, comentare lo que me pase. gracias e muchisimas gracias,

douglas
31-10-2007, 03:42:12
perdon, pero al cambiarme a adoquery no me funciona el query1.parambyname, que puedo utilizar.

Caral
31-10-2007, 03:45:03
Hola
douglas, el usar ADO o BDE es lo mismo, o casi lo mismo, la diferencia es que ADO hace la conexion directamente, eso ayuda mucho y simplifica las cosas, no hay que usar alias Etc.
No confies mucho en este novato, siempre busca mas informacion, aqui hay gente que es profesional en esto, yo ni siquiera soy programador.:D:)
Saludos

douglas
31-10-2007, 03:47:44
jeje gracias e enserio que buena persona sos, pero cuando quise colocar al grid el query no aparece, pero con tu ado query si, mmm porque puede ser eso

Caral
31-10-2007, 03:48:33
Hola
ADoQuery1.Parameters.ParamByName( )
Saludos

Caral
31-10-2007, 03:55:54
Hola
Otra vez no entiendo.
Si usas ADO, todos los componentes tienen que ser ado, no los puedes mezclar con bde.
Te aconsejo que si puedes conectar paradox con ado lo hagas, no he utilizado paradox nunca asi que no sabria si se puede o no.
Como te dije anteriormente, en el wiki hay varios ejemplos, incluso varios programas completos, lo que te interesa es aprender viendo el codigo, revisalos, todos son libres.
Ya sabes que en lo que mi humilde conocimiento te sirva con gusto te ayudo.
Saludos

douglas
31-10-2007, 03:57:40
gracias caral que buena persona eres y disculpa que abuse, pero en el datasource usas el adoquery, pero cuando yo intento no solamente me muestra el adotable, como puedo lograr que el datasource vaya linkado con el query

Caral
31-10-2007, 04:03:16
Hola
Empecemos por algo, vas a usar ado o bde?.
Si hablamos de query, para mi es bde, de otra forma hablariamos de adoquery, me parece.
El datasource tiene una propiedad que se llama dataset, este tiene una flecha, si el adoquery o el query esta en al form aparecera ahi, de otra manera si usas un datamodule tendras que ligarlo a este, no se si lo haces directo o no.
Que te puedo decir, me lo pones dificil.
Saludos

douglas
31-10-2007, 04:06:33
perdon caral, ya cambie todo a ado, puchis, esta mucho mejor, ya no hay que crear dsn desde windows, que buena esta la opcion de ado la verdad nunca la habia provado, pero calida calidad esta, bueno ahora tengo el problema que solamente me despliega la fecha, mmm todo lo hago mal, perdon me pudes ayudar, uso aun el mismo codigo

Caral
31-10-2007, 04:13:37
Hola
douglas, para mi, como lo dije desde el principio, la sentencia sql que tienes lo que despliega es eso, la fecha, no entiendo que mas quieres desplegar.
Te sigo siendo honesto, no he trabajado nunca con paradox, si lo hicieras con access te podria ayudar mas, para mi es dificil esto de paradox, no lo entiendo bien, disculpa.
Si cambias de base de datos a access, con gusto podre ayudarte mas.
Recuerda una cosa, el dbgrid es solo un recipiente de informacion que contendra un datasource, que a su vez estara ligado a un adoquery o adotable, todo lo que la sentencia sql envie, sera presentado en el dbgrid, en este caso la sentencia sql solo muestra la fecha.
No se como ayudarte, la verdad, estoy dando palos de ciego.
Saludos

douglas
31-10-2007, 04:25:29
ok ya esta la base de datos hecha en access con los mismos parametros, a dicha tabla de la base de datos se encuntran los campos fecha, total, costo, impuesto, ganancia.

bueno el form se llamada datos por mes, en el cual, al dar clic en el combobox en el cual se despliegan los 12 meses del año, bueno, esto me serive para completar las fechas, tengo fecha1 y fecha2 en las cuales fecha1 esta en el dia 1 del mes que se elija y fecha2 esta el ultimo dia del mes que se elija, ejemplo


elejimos octubre

fecha1:=01/10/2007
fecha2:=31/10/2007

bueno entonces teniendo este rango, que me muestre todos los datos, que esten dentro de esa fecha.

espero haberme explicado, si no siempre me cuentas, si porfis, te agradesco y perdon por tanta molestadera

Caral
31-10-2007, 04:33:40
Hola
Bueno ahora si hablamos el mismo idioma.
Si vas a vanzado podras adjuntar un archivo, coloca la base de datos y el programa, es mejor si lo haces en un zip.
Esta es una opcion ai podre hacerlo y reenviartelo, la otra:
esto es lo que tienes:

b:=combobox1.Text;
a:=combobox1.Items.IndexOf(b)+1;
fecha1:='01/'+formatfloat('00',a)+'/'+'2007';
fecha2:='31/'+formatfloat('00',a)+'/'+'2007';
ADOquery1.Close;
ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('select fecha from ciber');
ADOquery1.SQL.Add(' where fecha between :Fechain and :Fechafin');
ADOquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
ADOquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
ADOquery1.Open;
Que te muestra, La fecha.
Esto otro:

b:=combobox1.Text;
a:=combobox1.Items.IndexOf(b)+1;
fecha1:='01/'+formatfloat('00',a)+'/'+'2007';
fecha2:='31/'+formatfloat('00',a)+'/'+'2007';
ADOquery1.Close;
ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('select fecha, total, costo, impuesto, ganancia from ciber');
ADOquery1.SQL.Add(' where between :Fechain and :Fechafin');
ADOquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
ADOquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
ADOquery1.Open;
Hay diferencia, la ves?
Saludos

Caral
31-10-2007, 04:36:09
Hola
se me corrio un detalle:

b:=combobox1.Text;
a:=combobox1.Items.IndexOf(b)+1;
fecha1:='01/'+formatfloat('00',a)+'/'+'2007';
fecha2:='31/'+formatfloat('00',a)+'/'+'2007';
ADOquery1.Close;
ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('select fecha, total, costo, impuesto, ganancia from ciber');
ADOquery1.SQL.Add(' where fecha between :Fechain and :Fechafin');
ADOquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
ADOquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
ADOquery1.Open;
Saludos

Caral
31-10-2007, 04:44:40
Hola
Aqui ya es tarde, si tienes mas dudas o puedes poner el programa, lo vere mañana.
Saludos

douglas
31-10-2007, 04:44:45
gracias caral, pero perdon por las molestias, pero me despliega toda la informacion de la tabla, mm nu me la filtra, perdon que te moleste tanto

douglas
31-10-2007, 05:37:15
ok gracias caral funciono el codigo, mi error, estaba en la base de datos, jejejej tonteras de inexpertos, el codigo me quedo asi.


procedure TForm5.ComboBox1Change(Sender: TObject);
var
b,fecha1,fecha2:string;
a,gan,imp,cost:real;
begin
b:=combobox1.Text;
a:=combobox1.Items.IndexOf(b)+1;
fecha1:='01/'+formatfloat('00',a)+'/'+'2007';
fecha2:='31/'+formatfloat('00',a)+'/'+'2007';
ADOquery1.Close;
ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('select fecha, total, costo, impuesto, ganancia from ciber');
ADOquery1.SQL.Add(' where fecha between :Fechain and :Fechafin');
ADOquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
ADOquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
ADOquery1.Open;

end;


ahora quise crear una sumatoria de de las ganancias e hice algo asi, pero no me funciono.???? me puedes ayudar a determinar que pudo haber pasado

procedure TForm5.Button1Click(Sender: TObject);
var
b,fecha1,fecha2:string;
a,gan:real;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select sum(ganancia)');
adoquery1.SQL.Add(' from '+quotedstr('ciber'));
adoquery1.SQL.Add(' where fecha between :Fechain and :Fechafin');
ADOquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
ADOquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
adoquery1.Open;
edit1.Text:=formatfloat('00.00',gan);
adoquery1.Close;
end;
saludos y gracias

enecumene
31-10-2007, 14:45:49
Hola Douglas, es tan sencillo como esto:

procedure TForm5.Button1Click(Sender: TObject);
var
b,fecha1,fecha2:string;
a,gan:real;
begin
adoquery1.Close;
adoquery1.SQL.Text:='select sum(ganancia) from '+quotedstr('ciber') where fecha between :Fechain and :Fechafin';
ADOquery1.Parameters.ParamByName('Fechain').Value:=fecha1;
ADOquery1.Parameters.ParamByName('Fechafin').Value:=fecha2;
adoquery1.Open;
edit1.Text:=FloattoStr(ADOQuery1.Fields[0].asFloat);
end;

espero que te ayude.

Saludos.