PDA

Ver la Versión Completa : Consultas Múltiples


theloren07
09-07-2007, 21:46:28
:confused: Hola a todos, haber si por favor alguien me da una mano con lo siguiente, estoy trabajando en delphi 7 y tengo una tabla con un campo llamado "Estado Civil" en el cual inserto los registros a la tabla(Empleados) correspondiente a ese campo utilizando un ComboBox, el cual contiene en su propiedad "Items.String" lo siguiente (Soltero, Casado, Divorciado, Viudo) y necesito hacer una consulta utilizando otro ComboBox(Soltero,Casado,Divorciado,Viudo), el cual me permite desplegar por pantalla en QuickReport las personas según su estado civil, por ejemplo si seleccionno Casados me despliegue todos los casados, si es Soltero despliegue todos los Solteros y así sucesivamente.

Gracias por adelantado..:)

marcoszorrilla
09-07-2007, 22:15:21
Lo puedes resolver con una simple consulta.
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * From Empleados ');
Query1.Sql.Add('Where Estado = '+QuotedStr(Combobox1.Text));
Query1.Open;

El Datasource de esta consulta lo conectas con el objeto QuickRep y a funcionar.

Un Saludo.

theloren07
10-07-2007, 16:26:20
Ya probé los codigos que me facilitaste, pero no me funcionaron , ni siquiera dan error, es como si el botón estuviera vacio, por cierto estoy utilizando Access 2003 para menejar las tablas y delphi 7 con ADOconeccion, AdoTable y AdoQuery. :confused:

egostar
10-07-2007, 17:03:05
Ya probé los codigos que me facilitaste, pero no me funcionaron , ni siquiera dan error, es como si el botón estuviera vacio, por cierto estoy utilizando Access 2003 para menejar las tablas y delphi 7 con ADOconeccion, AdoTable y AdoQuery. :confused:

Hola, y ya probaste haciendo un trace en el botón para ver que hace:confused::confused:

Si no te da error seguramente el problema está en otra parte, puede ser no haya datos que mostrar con esa consulta, que no está ligado ningún DataSource a la consulta, etc.

Salud OS.

theloren07
10-07-2007, 17:31:58
Lo verifiqué todo y esta todo conectado incluso tengo la tabla con más de 30 registros, he hecho otros tipos de consultas pero solo utilizando el componente Query, aúnque no del tipo que estoy tratando de hacer, como que no me sale en la forma que deseo hacelo...:confused:

Incluso ya probé con otro tipo de consulta, solo que en este caso utilizo un combobox y un edit y funciona, pero utilizando solo el combobox para este tipo de consulta por grupo no dice nada nadita...:(

Caral
10-07-2007, 17:35:27
Hola
Aqui lo mas sencillo es hacer lo que te menciono marcoszorrilla, solo que yo lo haria con un proceso un poco mas largo, por ejemplo:
En el qreport colocaria un adoquery y en su propiedad string le incluiría la primera parte del codigo del maestro:
Select * From Empleados
Con esto ya puedo trabajar el reporte comodamente, luego en el boton llamaria al filtro y al reporte:

Qreport1.adoQuery1.Sql.Add('Where Estado = '+QuotedStr(Combobox1.Text));
Qreport1.adoQuery1.Open;
Qreport1.Preview;
Con esto cada vez que quieras hacer una consulta sobre esa tabla, pero de diferente forma, podras hacerla simplemente cambiando el ultimo codigo.
Saludos

egostar
10-07-2007, 18:27:47
Lo verifiqué todo y esta todo conectado incluso tengo la tabla con más de 30 registros, he hecho otros tipos de consultas pero solo utilizando el componente Query, aúnque no del tipo que estoy tratando de hacer, como que no me sale en la forma que deseo hacelo...:confused:

Incluso ya probé con otro tipo de consulta, solo que en este caso utilizo un combobox y un edit y funciona, pero utilizando solo el combobox para este tipo de consulta por grupo no dice nada nadita...:(

Bueno, porque no posteas lo que has hecho para no estar divagando en que puede ser, de esa forma podremos darte una mejor respuesta.

Salud OS.

theloren07
10-07-2007, 18:59:01
:rolleyes: Ciertamente, pero donde estoy no tengo delphi, pero en cuanto llegue a casa si el problema se sigue presentando lo posteo, de todas formas le hare saber sobre la situación...

theloren07
11-07-2007, 15:02:46
Bueno aquí esta la estructura de código que utilizo...

Código Delphi.
--------------------------------------------------------------------------------

procedure TFrmMConsultas.Button1Click(Sender: TObject);
begin
Dmodulo.ADOQuery1.Close;
Dmodulo.ADOQuery1.SQL.Clear;
Dmodulo.ADOQuery1.Sql.Add('Select * From Empleados ');
Dmodulo.ADOQuery1.Sql.Add('Where estadocivil = '+QuotedStr(Combobox1.Text));
Dmodulo.ADOQuery1.Open;
//QrListado.preview;
if Dmodulo.ADOQuery1.eof then
begin
if application.messagebox('Registros no encontrados','Salir',mb_yesno+mb_iconquestion)=idyes then
CLOSE;
end else
begin
QrListado.preview;
end;
end;
end.

--------------------------------------------------------------------------------

Aún no me funciona...:(

Caral
11-07-2007, 17:24:32
Hola
De momento se me ocurre que el campo estadocivil debe ser texto, entonces no veo la necesidad de la trasformacion, por otro lado yo lo haria en un solo codigo, algo asi:

procedure TFrmMConsultas.Button1Click(Sender: TObject);
begin
Dmodulo.ADOQuery1.Close;
Dmodulo.ADOQuery1.Sql.Text:= 'Select * From Empleados Where estadocivil = ' +Combobox1.Text;
Dmodulo.ADOQuery1.Open;
Primero, al usar text, se borra lo que hay en el query sin hacer nada.
Segundo, es mas clara la sentencia en un solo paso.
Tercero, como dije, me parece que el campo estadocivil, debe ser un campo tipo texto.
Recuerda, ayuda de novato, no te fies mucho, solo prueba.
Saludos

egostar
11-07-2007, 17:48:45
Tienes un pequeño detalle y es lo que te está creando el conflicto mental

No uses la comparación de EoF, siempre será verdad con o sin registros, mejor usa RecordCount.

procedure TFrmMConsultas.Button1Click(Sender: TObject);
begin
Dmodulo.ADOQuery1.Close;
Dmodulo.ADOQuery1.SQL.Clear;
Dmodulo.ADOQuery1.Sql.Add('Select * From Empleados ');
Dmodulo.ADOQuery1.Sql.Add('Where estadocivil = '+QuotedStr(Combobox1.Text));
Dmodulo.ADOQuery1.Open;
if Dmodulo.ADOQuery1.RecordCount = 0 then begin //Esta es la comparación que debe de ir
if application.messagebox('Registros no encontrados','Salir',mb_yesno+mb_iconquestion)=idyes then
Close;
end
else begin
QrListado.preview;
end;
end;
end;


Salud OS.

theloren07
12-07-2007, 15:24:32
:D Muy cierto caral, el campo que utilizo es tipo texto, ya hace lo quería que hiciera, esta la estructura por si alguien más la llega a necesitar.

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

procedure TFrmMConsultas.Button1Click(Sender: TObject);
begin
Dmodulo.ADOQuery1.Close;
Dmodulo.ADOQuery1.SQL.Clear;
Dmodulo.ADOQuery1.Sql.Add('Select * From empleados ');
Dmodulo.ADOQuery1.Sql.Add('Where estadocivil='+#39+Combobox1.Text+#39);
Dmodulo.ADOQuery1.Open;
QrListado.preview;
end;
end.


Les agradezco a marcozorilla, egostar y caral por ayudarme en este problema, muchas gracias nuevamente por su tiempo invertido y dar gracias a DIOS que existen personas como ustedes, que DIOS LE BENDIGA.