Fórum Filtro em tabela Paradox #531572

13/09/2015

0

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.
Jordan Bernardes

Jordan Bernardes

Responder

Post mais votado

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;

Raimundo Pereira

Raimundo Pereira
Responder

Gostei + 1

Mais Posts

14/09/2015

Ricardo Araujo

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
Responder

Gostei + 1

14/09/2015

Jordan Bernardes

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;


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.
Responder

Gostei + 0

14/09/2015

Jordan Bernardes

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


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 '%".
Responder

Gostei + 0

15/09/2015

Fabio Cardoso

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:


    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
Responder

Gostei + 0

15/09/2015

Ricardo Araujo

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar