PDA

Ver la Versión Completa : Consulta 1 Edit a 2 Columnas de una Tabla


Lenny
12-07-2013, 10:00:16
Estimados, acudo a ustedes nuevamente ya que tengo tremenda duda existencial, gracias de antemano ante cualquier ayuda .
Tengo una Tabla que entre varias columnas existen "Nombre" y "Apellido Paterno", hasta ahora tengo la consulta para buscar o por nombre o por apellido y funciona perfecto, la duda: existe la forma de poder "Filtrar" las 2 columnas según el criterio de 1 "Edit"???, en este caso algo así:

Nombre Apellido Paterno
1) Juan Tapia
2) Maria Mora
3) Jose Salas

La idea es que al escribir "i" queden en este caso filtrado la fila 1 y 2, ya que 1 tiene "i" en el apellido y 2 en el nombre.

Quedo atento a sus comentarios y nuevamente gracias por cualquier ayuda.

olbeup
12-07-2013, 10:22:27
Hola Lenny,

Esto es lo que buscas:
...
begin
with ADOQuery1 do
begin
Connection := ADOConnection1;
SQL.Add('SELECT');
SQL.Add(' NOMBRE');
SQL.Add(' ,APELLIDOPATERNO');
SQL.Add(' FROM Clientes');
SQL.Add(' WHERE')
SQL.Add(' (');
SQL.Add(' NOMBRE LIKE ' + QuotedStr('%' + Edit1.Text + '%'));
SQL.Add(' OR APELLIDOPATERNO LIKE ' + QuotedStr('%' + Edit1.Text + '%'));
SQL.Add(' )');

Open;
end;
end;

Un saludo.

rafita
12-07-2013, 10:23:20
Hola,
Depende de cómo accedas a las bases de datos. Si haces consultas SQL puedes usar una sentencia Select con el operador LIKE:

SELECT Nombre, Apellidos FROM MiTabla WHERE (Nombre like '%'+Edit1.Text+'%') or (Apellidos like '%'+Edit1.Text+'%')

saludos

Lenny
12-07-2013, 16:37:52
Sorry, cometí el error de no adjuntar el código que uso hasta ahora y mencionar con que BD trabajo.

Así es como hago als consultas normalmente:

procedure TClientes.Edit2Change(Sender: TObject);
const
// suponiendo que esta sea tu consulta
STRSQL = 'Select * from CONTACTOCLIENTE ';
STRORDER = ' ORDER BY NOMBRES';
begin
BDatos.QContactoCliente.Close;
// Está vacío
if (Edit2.Text = '') then begin
BDatos.QContactoCliente.SQL.Text := STRSQL;
end
else begin
// montamos la sql
BDatos.QContactoCliente.SQL.Text := STRSQL +
// Añadimos el WHER
' WHERE Upper(NOMBRES) LIKE Upper(' + QuotedStr('%' + Edit2.Text + '%') + ')' +
// Añadimos el orden
STRORDER;
end;
BDatos.QContactoCliente.Open;
end;

Funciona perfecto, si no mal recuerdo lo saque de un ejemplo de esta misma pagina (no recuerdo a nombre de quien por los créditos)...

Utilizo MySQL y los conectores ZEOS, vere si puedo usar parte de los códigos que me dieron, quedo atento a cualquier comentario y gracias.

Lenny
12-07-2013, 17:12:02
Gracias estimados, dando vueltas con sus comentarios y códigos aplicándolo a lo que tenia resulto perfecto y quedo así:

procedure TClientes.Edit2Change(Sender: TObject);
const
// suponiendo que esta sea tu consulta
STRSQL = 'Select * from CONTACTOCLIENTE ';
STRORDER = ' ORDER BY NOMBRES';
begin
BDatos.QContactoCliente.Close;
// Está vacío
if (Edit2.Text = '') then begin
BDatos.QContactoCliente.SQL.Text := STRSQL;
end
else begin
// montamos la sql
BDatos.QContactoCliente.SQL.Text := STRSQL +
// Añadimos el WHER
' WHERE Upper(NOMBRES) LIKE Upper(' + QuotedStr('%' + Edit2.Text + '%') + ')' +
'or Upper(APELLIDO) LIKE Upper(' + QuotedStr('%' + Edit2.Text + '%') + ')' +
// Añadimos el orden
STRORDER;
end;
BDatos.QContactoCliente.Open;
end;

Muchas gracias!!!

olbeup
15-07-2013, 09:35:28
Hola Lenny,

Me alegra que te haya funcionado correctamente.

Un saludo.