Filtro em tabela Paradox
Boa noite.
Antes de mais nada estou iniciando em delhpi 7 agora, então não sei muito ainda.
Estou tentando filtrar uma tabela (Paradox 7) por nome.
Por exemplo, eu digito Jordan em um edit, deveria filtrar todos os resultados com o nome Jordan. Porém o retorno que da no dbgrid é em branco sem dados.
Mais se eu colocar Jordan Candido Bernardes, retorna todos os resultados referente a essa informação, o filtro funciona.
Pelo que pude perceber não esta filtrando os dados de forma parcial, somente se digitar igual ao que esta no banco. Estou utilizando o seguinte código para isso:
if (dbgrid1.DataSource.DataSet.Locate(DBGrid1.columns[1].FieldName,Edit2.text,[loPartialKey,locaseInsensitive])) then
begin
DataModule2.Table1.Filtered := true;
DataModule2.Table1.Filter := 'Nome=' + QuotedStr(Edit2.Text);
end
else
ShowMessage('Visitante não encontrado');
Poderiam me dar uma luz?
Agradeço desde já a atenção e colaboração dos amigos.
Antes de mais nada estou iniciando em delhpi 7 agora, então não sei muito ainda.
Estou tentando filtrar uma tabela (Paradox 7) por nome.
Por exemplo, eu digito Jordan em um edit, deveria filtrar todos os resultados com o nome Jordan. Porém o retorno que da no dbgrid é em branco sem dados.
Mais se eu colocar Jordan Candido Bernardes, retorna todos os resultados referente a essa informação, o filtro funciona.
Pelo que pude perceber não esta filtrando os dados de forma parcial, somente se digitar igual ao que esta no banco. Estou utilizando o seguinte código para isso:
if (dbgrid1.DataSource.DataSet.Locate(DBGrid1.columns[1].FieldName,Edit2.text,[loPartialKey,locaseInsensitive])) then
begin
DataModule2.Table1.Filtered := true;
DataModule2.Table1.Filter := 'Nome=' + QuotedStr(Edit2.Text);
end
else
ShowMessage('Visitante não encontrado');
Poderiam me dar uma luz?
Agradeço desde já a atenção e colaboração dos amigos.
Jordan Bernardes
Curtidas 0
Melhor post
Raimundo Pereira
14/09/2015
Bom dia , Jordan
MODELO 1
begin
Table1.Close;
Table1.SQL.Clear;
Table1.SQL.text:=('Select * From SUA_TABLEA Where NOME LIKE % '+EDIT2.TEXT+'%');
Table1.Open;
end;
MODELO 2
BEGIN
DataModule2.Table1.SQL.CLOSE;
DataModule2.Table1.SQL.CLEAR;
DataModule2.Table1.SQL.TEXT := 'SELECT * FROM SUA_TABLE WHERE NOME ='''+EDIT2.TEXT+'''';
DataModule2.Table1.SQL.OPEN;
IF DataModule2.Table1.RECORDCOUNT=0 THEN
BEGIN
ShowMessage('Visitante não encontrado');
END;
END;
END;
MODELO 1
begin
Table1.Close;
Table1.SQL.Clear;
Table1.SQL.text:=('Select * From SUA_TABLEA Where NOME LIKE % '+EDIT2.TEXT+'%');
Table1.Open;
end;
MODELO 2
BEGIN
DataModule2.Table1.SQL.CLOSE;
DataModule2.Table1.SQL.CLEAR;
DataModule2.Table1.SQL.TEXT := 'SELECT * FROM SUA_TABLE WHERE NOME ='''+EDIT2.TEXT+'''';
DataModule2.Table1.SQL.OPEN;
IF DataModule2.Table1.RECORDCOUNT=0 THEN
BEGIN
ShowMessage('Visitante não encontrado');
END;
END;
END;
GOSTEI 1
Mais Respostas
Ricardo Araujo
13/09/2015
if (dbgrid1.DataSource.DataSet.Locate(DBGrid1.columns[1].FieldName, Edit2.text,[loPartialKey,locaseInsensitive])) then
begin
DataModule2.Table1.Filtered := false;
DataModule2.Table1.Filter := 'Nome like ' + QuotedStr(Edit2.Text) + '%';
DataModule2.Table1.Filtered := true;
end
else
ShowMessage('Visitante não encontrado');
end;
Pode fazer assim que dar certo, qualquer coisa me avise.
Att:
rbbarreto@hotmail.com
begin
DataModule2.Table1.Filtered := false;
DataModule2.Table1.Filter := 'Nome like ' + QuotedStr(Edit2.Text) + '%';
DataModule2.Table1.Filtered := true;
end
else
ShowMessage('Visitante não encontrado');
end;
Pode fazer assim que dar certo, qualquer coisa me avise.
Att:
rbbarreto@hotmail.com
GOSTEI 1
Jordan Bernardes
13/09/2015
Bom dia , Jordan
MODELO 1
begin
Table1.Close;
Table1.SQL.Clear;
Table1.SQL.text:=('Select * From SUA_TABLEA Where NOME LIKE % '+EDIT2.TEXT+'%');
Table1.Open;
end;
MODELO 2
BEGIN
DataModule2.Table1.SQL.CLOSE;
DataModule2.Table1.SQL.CLEAR;
DataModule2.Table1.SQL.TEXT := 'SELECT * FROM SUA_TABLE WHERE NOME ='''+EDIT2.TEXT+'''';
DataModule2.Table1.SQL.OPEN;
IF DataModule2.Table1.RECORDCOUNT=0 THEN
BEGIN
ShowMessage('Visitante não encontrado');
END;
END;
END;
MODELO 1
begin
Table1.Close;
Table1.SQL.Clear;
Table1.SQL.text:=('Select * From SUA_TABLEA Where NOME LIKE % '+EDIT2.TEXT+'%');
Table1.Open;
end;
MODELO 2
BEGIN
DataModule2.Table1.SQL.CLOSE;
DataModule2.Table1.SQL.CLEAR;
DataModule2.Table1.SQL.TEXT := 'SELECT * FROM SUA_TABLE WHERE NOME ='''+EDIT2.TEXT+'''';
DataModule2.Table1.SQL.OPEN;
IF DataModule2.Table1.RECORDCOUNT=0 THEN
BEGIN
ShowMessage('Visitante não encontrado');
END;
END;
END;
Boa noite P2, muito obrigado por sua resposta.
Fiz o que você postou, porém deu o seguinte erro nas duas formas:
Undeclared indentifier: ''SQL''.
Desculpe desde já se for alguma "burrice" minha ou falta de atenção.
GOSTEI 0
Jordan Bernardes
13/09/2015
if (dbgrid1.DataSource.DataSet.Locate(DBGrid1.columns[1].FieldName, Edit2.text,[loPartialKey,locaseInsensitive])) then
begin
DataModule2.Table1.Filtered := false;
DataModule2.Table1.Filter := 'Nome like ' + QuotedStr(Edit2.Text) + '%';
DataModule2.Table1.Filtered := true;
end
else
ShowMessage('Visitante não encontrado');
end;
Pode fazer assim que dar certo, qualquer coisa me avise.
Att:
rbbarreto@hotmail.com
begin
DataModule2.Table1.Filtered := false;
DataModule2.Table1.Filter := 'Nome like ' + QuotedStr(Edit2.Text) + '%';
DataModule2.Table1.Filtered := true;
end
else
ShowMessage('Visitante não encontrado');
end;
Pode fazer assim que dar certo, qualquer coisa me avise.
Att:
rbbarreto@hotmail.com
Boa noite, muito obrigado por sua resposta.
Utilizei sua dica, porém na hora de compilar não deu erro, mais na execução do programa deu o seguinte erro invalid filter expression character '%".
GOSTEI 0
Fabio Cardoso
13/09/2015
Amigo Jordam eu uso esse código abaixo e funciona 100%
onde eu escrevi var são apenas indicações de tipos das variáveis vc deve substituir pelas suas ai, segue:
O datasource dessa query deve estar ligado ao seu dbgrid
onde eu escrevi var são apenas indicações de tipos das variáveis vc deve substituir pelas suas ai, segue:
var
S:STRING;
qryConsultas:tQUERY; //SUBSTITUIR QRYCONSULTAS PELA SUA QUERY
if (dbgrid1.DataSource.DataSet.Locate(DBGrid1.columns[1].FieldName, Edit2.text,[loPartialKey,locaseInsensitive])) then
begin
S := '';
S := ' select * from _NomeTabela T where t.NOME';
S := S + ' like :parametro' ;
qryConsultas.close;
qryConsultas.sql.clear;
qryConsultas.sql.add(S);
if Edit2.text = '' then
qryConsultas.parambyname('parametro').asstring := '%' //esse traz a tabela toda
else
qryConsultas.parambyname('parametro').asstring := Edit2.text + '%'; //esse traz o que você digitar no edit
try
qryConsultas.open;
except on
e:exception do
begin
showmessage(e.message);
abort;
end;
end;
IF qryConsultas.RECORDCOUNT=0 THEN
BEGIN
ShowMessage('Visitante não encontrado');
edit1.setfocus; //se nenhum registro for encontrado o programa volta para o edit1 e espera nova consulta
END;
end;
O datasource dessa query deve estar ligado ao seu dbgrid
GOSTEI 0
Ricardo Araujo
13/09/2015
Bom dia,
sobre a query do nossa amigo "Fabio cardoso" esta certo, só que terá que fazer algumas alterações na sua aplicação que funcione.
este exemplo que fiz abaixo e bem simples mesmo, mas funciona, testa ai e nos avise se deu certo blz.
cdsMaq.Filtered := False;
cdsMaq.Filter := 'cod_maq_ferr like ' + QuotedStr('%' + Edit6.Text + '%') ;
cdsMaq.Filtered := True;
cdsMaq.Filtered := False;
cdsMaq.Filter := 'cod_maq_ferr like ' + QuotedStr(Edit6.Text + '%') ;
cdsMaq.Filtered := True;
Espero ter ajudado.
Att:
rbbarreto@hotmail.com
sobre a query do nossa amigo "Fabio cardoso" esta certo, só que terá que fazer algumas alterações na sua aplicação que funcione.
este exemplo que fiz abaixo e bem simples mesmo, mas funciona, testa ai e nos avise se deu certo blz.
cdsMaq.Filtered := False;
cdsMaq.Filter := 'cod_maq_ferr like ' + QuotedStr('%' + Edit6.Text + '%') ;
cdsMaq.Filtered := True;
cdsMaq.Filtered := False;
cdsMaq.Filter := 'cod_maq_ferr like ' + QuotedStr(Edit6.Text + '%') ;
cdsMaq.Filtered := True;
Espero ter ajudado.
Att:
rbbarreto@hotmail.com
GOSTEI 0