Fórum Filtrar somente os 4 primeiros numeros do campo? #301020

27/10/2005

0

Ola amigos boa tarde
Tem possibilidade de fazer um filtro dentro de um campo que esta com o cadastro assim:

00010001
00010002
00020001
00030001
00030002
00040001
00050001
00050002
00050003

Ai tenho 02(dois) edits um chamado editini e outro editfim, entao no editini digitar 0001 e no editfim 0003, e no dbgrid aparecer somente os dados digitados assim:

00010001
00010002
00020001
00030001
00030002


Agradeço a ajuda de todos
Obrigado
ADRIANO


Adriano_servitec

Adriano_servitec

Responder

Posts

27/10/2005

Adriano_servitec

Ja descobri tai o codigo se alguem um dia precisar

procedure TForm1.BitBtn11Click(Sender: TObject);
begin
QUERY3.ACTIVE:=TRUE;
query3.refresh;
with Query3 do
begin
close;
sql.clear;
sql.add(´select * from dpfuncs´);
sql.add(´WHERE (fco >= ´ + quotedstr(Edit23.Text + ´0000´) + ´ ) and (fco <= ´ + quotedstr(Edit24.Text + ´9999´) + ´ )´);
open;
end;
end;


Responder

Gostei + 0

28/10/2005

Adriano_servitec

To quebrando a cabeça e nao consigo achar se tem um jeito de filtrar os 4 ultimos numeros tambem

00010001
00010002
00010003


No edit1 digitar 0001 e no edit2 digitar 0002 e no dbgrid aparecer assim
00010001
00010002


Esse de pegar os 4 numeros finais ta mais complicado

Alguem tem alguma ideia?
Agradeço a ajuda de todos
Obrigado
ADRIANO


Responder

Gostei + 0

28/10/2005

Adriano_servitec

Desculpe nao ter informado estou usando tabela paradox e delphi 5


Responder

Gostei + 0

28/10/2005

Emerson Nascimento

utilize LIKE


Responder

Gostei + 0

28/10/2005

Emerson Nascimento

ou substring

pegar do inicio:
´select * from dpfuncs where ´+
´substring(fco from 1 for 4) between ´+
quotedstr(Edit23.Text)+´ and ´+quotedstr(Edit24.Text)

pegar do fim:
´select * from dpfuncs where ´+
´substring(fco from 5 for 4) between ´+
quotedstr(Edit23.Text)+´ and ´+quotedstr(Edit24.Text)


Responder

Gostei + 0

28/10/2005

Adriano_servitec

ola Emerson blz amigo

Pode me dar uma ajudinha amigo como faço o like pq nao compila, so consigo usar ele dentro da SQL da query

Olha como fiz
procedure TForm1.Button4Click(Sender: TObject);
begin
QUERY3.ACTIVE:=TRUE;
query3.refresh;
with Query3 do
begin
close;
sql.clear;
sql.add(´select * from dpfuncs´);
//SQL.ADD(´where substring(fco from 5 for 4) between ´ + quotedstr(Edit18.Text) +´ and ´+quotedstr(Edit19.Text)´);//aqui nao consegui
sql.add(´WHERE FNo = like ´¬0001´ OR FNO = LIKE ´¬0003´´); //aqui no ligar 0001 a 0003 tem como colocar edit1.text a edit2.text, pois la que vou digitar os codigos para serem filtrados entre esse intervalo
open;
end;
end;


Responder

Gostei + 0

28/10/2005

Adriano_servitec

Obrigado Emerson a substring funciona certinho, era que tava faltando fechar para compilar

Tava assim
SQL.ADD(´where substring(fco from 5 for 4) between ´ + quotedstr(Edit18.Text) +´ and ´+quotedstr(Edit19.Text)´);

Ai corrigi o final colocando + ´´ para fechar

SQL.ADD(´where substring(fco from 5 for 4) between ´ + quotedstr(Edit18.Text) +´ and ´+quotedstr(Edit19.Text)+ ´´);


Valeu amigao, obrigado.

Mais pq da erro aqui na ora de compilar e no SQL do Query nao

sql.add(´WHERE FNo = like ´¬0001´ OR FNO = LIKE ´¬0003´´);
Fica apontando no ´¬0001´ ai nao compila, O q ta errado?


Responder

Gostei + 0

28/10/2005

Firekiller

Onde você colocou assim:

´WHERE FNo = like ´¬0001´

deveria ficar assim:

´WHERE FNo like ´¬0001´

Quando você for usar o like, não precisxar por o sinal de igual.


Responder

Gostei + 0

28/10/2005

Emerson Nascimento

utilize parâmetros sempre que possível. além de deixar seu código mais ´limpo´, em muitos casos não será necessário preocupar-se com conversões de dados .

eu faria assim:
procedure TForm1.Button4Click(Sender: TObject); 
begin 
  //para pegar do início:
  with Query3 do 
  begin 
    close; 
    sql.text := ´select * from dpfuncs ´+ 
                ´where substring(fco from 1 for 4) between :inicio and :fim ´;
    parambyname(´inicio´).asstring := Edit18.Text;
    parambyname(´fim´).asstring := Edit19.Text;
    open;
  end; 

  //para pegar do fim:
  with Query3 do 
  begin 
    close; 
    sql.text := ´select * from dpfuncs ´+ 
                ´where substring(fco from 5 for 8) between :inicio and :fim ´;
    parambyname(´inicio´).asstring := Edit18.Text;
    parambyname(´fim´).asstring := Edit19.Text;
    open;
  end; 
end;



Responder

Gostei + 0

28/10/2005

Adriano_servitec

Obrigado pela dica amigos

Valeu mesmo, me ajudou muito


Responder

Gostei + 0

11/11/2005

Adriano_servitec

**Nao cosigo criar um novo topico por isso esta aqui munha duvida


Boa tarde amigos, o problema agora eh saber como faço para pegar somente os resultados dos dois primeiros numeros do campo dat tabela

Bom tenho dois edits tipo edit1 e edit2 e um botbtn para fazer o comando dentro de um dbgrid. Entao na tabela esta assim

11-RONDONIA
1100015-ALTA FLOTESTA
12-ACRE
1200013-ACRELANDIA
13-AMAZONAS
1300029-ALVARES

Bom entao no edit1 digitar assim 11 e no edit2 assim 13, quero que no dbgrid me apareça da seguinte forma:

11-RONDONIA
12-ACRE
13-AMAZONAS

Preciso de uma ideia como se faz isso em SQL ja tentei usar o like e nao consegui, e tambem tentei de diversas formas, e nada ainda

Eis o codigo
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
QUERY2.ACTIVE:=TRUE;
query2.refresh;
with Query2 do
begin
try
close;
sql.clear;
sql.add(´select * from tb8munic´);
//sql.add(´WHERE (comunicipio >= ´ + quotedstr(edit2.Text) + ´ ) and (comunicipio <= ´ + quotedstr(edit3.Text) + ´ )´);
//SQL.ADD(´where substring(comunicipio from 1 for 2) between ´ + quotedstr(Edit2.Text) +´ and ´+quotedstr(Edit3.Text)+ ´´);
//sql.add(´where comunicipio = like :Vcini and comunicipio = like :Vcfim´);
sql.add(´WHERE (comunicipio like :vcini) and (comunicipio like :vcfim)´);
Query2.ParamByName(´Vcini´).Value:=Edit2.Text+´¬´;
Query2.ParamByName(´Vcfim´).Value:=´¬´+Edit3.Text;
//sql.add(´WHERE (comunicipio >= ´ + quotedstr(edit2.Text + ´00´) + ´ ) and (comunicipio <= ´ + quotedstr(edit3.Text + ´99´) + ´ )´);
open;
except
beep;
ShowMessage(´Erro de SQL!´);
end;
end;
end;

Alguem tem uma ideia como me ajudar?
Grato
Adriano


Responder

Gostei + 0

11/11/2005

Emerson Nascimento

procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  with Query2 do
    try
      close;
      sql.clear;
      sql.add(´select * from tb8munic´);
      sql.add(´WHERE (substring(comunicipio from 1 for 2) between :vcini and :vcfim)´);
      sql.add(´and (substring(comunicipio from 3 for 1) = :traco)´);
      ParamByName(´Vcini´).Value:= Edit2.Text;
      ParamByName(´Vcfim´).Value:= Edit3.Text;
      ParamByName(´Traco´).Value:= ´-´;
      open; 
    except 
      beep; 
      ShowMessage(´Erro de SQL!´); 
    end; 
end;


desde que seja garantido que em Edit2 e Edit3 serão digitados apenas 2 dígitos. caso contrário deve ser alterado o parâmetro da função substring()

veja se isso funciona. faz muito tempo que eu não trabalho com paradoidox....


Responder

Gostei + 0

11/11/2005

Adriano_servitec

Primeiramente queria agradecer pela sua atençao e ajuda, mais ainda nao deu, esta me retornando um valor vazio dentro da dbgrid

Grato pela ajuda
Adriano


Responder

Gostei + 0

11/11/2005

Adriano_servitec

Ola Emerson, fiquei aqui estudando seu codigo ate chegar ao resultado esperado amigo, mais foi graças a vc e sua atençao que consegui chegar ao valor exato do que eu queria.

Eis o codigo

begin
with Query2 do
try
close;
sql.clear;
sql.add(´select * from tb8munic´);
sql.add(´WHERE (substring(COmunicipio from 1 for 2) between :vcini and :vcfim)´);
sql.add(´and (substring(COmunicipio from 7 for 3) < :numero)´);
ParamByName(´Vcini´).Value:= Edit2.Text;
ParamByName(´Vcfim´).Value:= Edit3.Text;
ParamByName(´numero´).Value:= ´0´;
open;
except
beep;
ShowMessage(´Erro de SQL!´);
end;
end;

Percebi que na tabela depois dos dois primeiros numeros tinha um 0 (zero) entao foi so fazer um sbstring do 7 ao 3 sendo menor que 0

Pronto o resultado ficou satisfatorio

Agradeço mais uma vez por ter me ajudado
Obrigado amigo
Abraços
T+


Responder

Gostei + 0

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

Aceitar