Fórum INTERBASE BD #428145
06/11/2012
0
o cadastro vai bem, agora estou não estou conseguindo fazer pesquisa por nome ou RG neste cadastro. alguem pode me ajudar?
Paulo
Curtir tópico
+ 0Posts
06/11/2012
Claudia Nogueira
Se você tiver dois campos na tela chamados por exemplo EdtNome e EdtRG, você pode colocar pra pesquisar o seguinte:
Var sSQL : String; begin sSQL := ''; if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')'; if EdtRG.Text <> '' then sSQL := ' AND (rg like '+QuotedStr(EdtRG.Text)+')'; with Qry do begin Close; SQL.Text := 'SELECT * FROM TABELA WHERE (1=1) ' + sSQL + ' ORDER BY nome'; Open; end; end;
Gostei + 0
06/11/2012
Paulo
Se você tiver dois campos na tela chamados por exemplo EdtNome e EdtRG, você pode colocar pra pesquisar o seguinte:
Var sSQL : String; begin sSQL := ''; if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')'; if EdtRG.Text <> '' then sSQL := ' AND (rg like '+QuotedStr(EdtRG.Text)+')'; with Qry do begin Close; SQL.Text := 'SELECT * FROM TABELA WHERE (1=1) ' + sSQL + ' ORDER BY nome'; Open; end; end;
Esses códigos vão no onchange do EdtNome, EdtRg ou BtnConsulta. Porque eu digito nome para pesquisa mais não não filtra nada?
Gostei + 0
06/11/2012
Claudia Nogueira
O DataSource que está ligado ao DBGrid tem que estar ligado ao IBQuery pra mostrar as informações.
Se você tiver dois campos na tela chamados por exemplo EdtNome e EdtRG, você pode colocar pra pesquisar o seguinte:
Var sSQL : String; begin sSQL := ''; if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')'; if EdtRG.Text <> '' then sSQL := ' AND (rg like '+QuotedStr(EdtRG.Text)+')'; with Qry do begin Close; SQL.Text := 'SELECT * FROM TABELA WHERE (1=1) ' + sSQL + ' ORDER BY nome'; Open; end; end;
Esses códigos vão no onchange do EdtNome, EdtRg ou BtnConsulta. Porque eu digito nome para pesquisa mais não não filtra nada?
Gostei + 0
06/11/2012
Paulo
O DataSource que está ligado ao DBGrid tem que estar ligado ao IBQuery pra mostrar as informações.
Se você tiver dois campos na tela chamados por exemplo EdtNome e EdtRG, você pode colocar pra pesquisar o seguinte:
Var sSQL : String; begin sSQL := ''; if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')'; if EdtRG.Text <> '' then sSQL := ' AND (rg like '+QuotedStr(EdtRG.Text)+')'; with Qry do begin Close; SQL.Text := 'SELECT * FROM TABELA WHERE (1=1) ' + sSQL + ' ORDER BY nome'; Open; end; end;
Esses códigos vão no onchange do EdtNome, EdtRg ou BtnConsulta. Porque eu digito nome para pesquisa mais não não filtra nada?
Fiz as ligações como vc mandou mais não deu certo.
Gostei + 0
07/11/2012
Claudia Nogueira
Quais componentes tem nessa tela que quer fazer uma pesquisa?
Dá algum erro na hora que executa o código?
Gostei + 0
07/11/2012
Paulo
Quais componentes tem nessa tela que quer fazer uma pesquisa?
Dá algum erro na hora que executa o código?
o nome da minha tabela criada no IBConsole é;
GAB_IDENT
os campos da tabela são os seguintes;
CREATE TABLE GAB_IDENT
(
RG NUMERIC(4, 0) NOT NULL,
NOME VARCHAR(30),
POSTOGRAD VARCHAR(30),
SITUACAO VARCHAR(30),
PAI VARCHAR(30),
MAE VARCHAR(30),
CPF VARCHAR(30),
D_NASC VARCHAR(30),
NATURALIDADE VARCHAR(30),
INCLUSAO VARCHAR(30),
EXCLUSAO VARCHAR(30),
CERTIDAO VARCHAR(30),
CERTIDAO2 VARCHAR(30),
CERT_MILITAR VARCHAR(30),
CUTIS VARCHAR(30),
CABELOS VARCHAR(30),
OLHOS VARCHAR(30),
ALTURA VARCHAR(30),
T_SANG VARCHAR(30),
S_PARTIC VARCHAR(30),
PORTE VARCHAR(30),
EXPEDICAO VARCHAR(30),
ALTERACOES VARCHAR(30),
ALTERACOES2 VARCHAR(30),
ALTERACOES3 VARCHAR(30),
ALTERACOES4 VARCHAR(30),
ALTERACOES5 VARCHAR(30),
ALTERACOES6 VARCHAR(30),
ALTERACOES7 VARCHAR(30),
ALTERACOES8 VARCHAR(30),
ALTERACOES9 VARCHAR(30),
ALTERACOES10 VARCHAR(30),
ALTERACOES11 VARCHAR(30),
ALTERACOES12 VARCHAR(30),
ALTERACOES13 VARCHAR(30),
ALTERACOES14 VARCHAR(30),
ALTERACOES15 VARCHAR(30),
ALTERACOES16 VARCHAR(30),
ALTERACOES17 VARCHAR(30),
ALTERACOES18 VARCHAR(30),
ALTERACOES19 VARCHAR(30),
ALTERACOES20 VARCHAR(30),
FOTO BLOB SUB_TYPE 0 SEGMENT SIZE 80,
DIGITAL BLOB SUB_TYPE 0 SEGMENT SIZE 80,
CONSTRAINT PK_GAG_IDENT PRIMARY KEY ("RG")
);
Gostei + 0
07/11/2012
Deivison Melo
http://www.dotbr.com.br/fernando/banco_dadosII/SQL-ParteI.pdf
http://www.dotbr.com.br/fernando/banco_dadosII/SQL-ParteII.pdf
http://www.dotbr.com.br/fernando/banco_dadosII/SQL-ParteIII.pdf
Gostei + 0
07/11/2012
Claudia Nogueira
Var sSQL : String; iRG : Integer; begin try iRG := StrToInt(EdtRG.Text); except iRG := 0; end; sSQL := ''; if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')'; if iRG <> 0 then sSQL := ' AND (rg = '+IntToStr(iRG)+')'; with Qry do begin Close; SQL.Text := 'SELECT * FROM GAB_IDENT WHERE (1=1) ' + sSQL + ' ORDER BY nome'; Open; end; end;
Tenta colocar na tela só o IBQuery, um DataSource, um DBGrid, um Botão, o Campo Nome e o o Campo RG.
Liga o IBQuery no DataSource e o DataSource no DBGrid.
Coloca o código no botão e compila.
Umas das formas é exatamente assim.
Tem que pegar o jeito de trabalhar com IBQuery, pegando o jeito o resto é moleza.
Dá uma olhada nos links que o Deivison passou pra ver se dá uma luz.
Gostei + 0
07/11/2012
Paulo
Var sSQL : String; iRG : Integer; begin try iRG := StrToInt(EdtRG.Text); except iRG := 0; end; sSQL := ''; if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')'; if iRG <> 0 then sSQL := ' AND (rg = '+IntToStr(iRG)+')'; with Qry do begin Close; SQL.Text := 'SELECT * FROM GAB_IDENT WHERE (1=1) ' + sSQL + ' ORDER BY nome'; Open; end; end;
Tenta colocar na tela só o IBQuery, um DataSource, um DBGrid, um Botão, o Campo Nome e o o Campo RG.
Liga o IBQuery no DataSource e o DataSource no DBGrid.
Coloca o código no botão e compila.
Umas das formas é exatamente assim.
Tem que pegar o jeito de trabalhar com IBQuery, pegando o jeito o resto é moleza.
Dá uma olhada nos links que o Deivison passou pra ver se dá uma luz.
não tá dando certo não! eu acho que por causa do IBTable.
tem como eu tirar o IBTable e deixar só o Qry?
só que eu meus campos são todos DBEdits que no IBTable, para inserir dados é só Dm.IBTable.append,delete,edit etc..
já no IBQuery eu não sei como configurar os campos para edits, vc pode me dar mais esta explicação?
seria então os componentes: IBTransition, IBDatabase, IBQuery ao invés de IBTable E DataSource
Gostei + 0
07/11/2012
Claudia Nogueira
Ficaria mais ou menos assim, pra logo depois da pesquisa localizar o registro no IBTable e mostrar nos dbs:
Var
sSQL : String;
iRG : Integer;
begin
try
iRG := StrToInt(EdtRG.Text);
except
iRG := 0;
end;
sSQL := '';
if EdtNome.Text <> '' then
sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')';
if iRG <> 0 then
sSQL := ' AND (rg = '+IntToStr(iRG)+')';
with Qry do
begin
Close;
SQL.Text := 'SELECT * FROM GAB_IDENT WHERE (1=1) ' + sSQL + ' ORDER BY nome';
Open;
if not isEmpty then
Tabela.Locate('codigo',Qry.FieldByName('codigo').AsInteger,[]);
end;
end;
Aí se você tem um DBGrid retornando tudo que retorna na consulta, teria dois DataSource, um ligado ao IBQuery e outro ao IbTable.
Pra mostrar nos DB o registro selecionado no DBGrid você pode colocar o código nos eventos onCellClick, onKeyDown e onKeyUp:
if not isEmpty then
Tabela.Locate('codigo',Qry.FieldByName('codigo').AsInteger,[]);
Obs.: Você tem que trocar onde está "codigo" par ao campo chave da sua tabela.
Gostei + 0
07/11/2012
Paulo
Ficaria mais ou menos assim, pra logo depois da pesquisa localizar o registro no IBTable e mostrar nos dbs:
Var
sSQL : String;
iRG : Integer;
begin
try
iRG := StrToInt(EdtRG.Text);
except
iRG := 0;
end;
sSQL := '';
if EdtNome.Text <> '' then
sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')';
if iRG <> 0 then
sSQL := ' AND (rg = '+IntToStr(iRG)+')';
with Qry do
begin
Close;
SQL.Text := 'SELECT * FROM GAB_IDENT WHERE (1=1) ' + sSQL + ' ORDER BY nome';
Open;
if not isEmpty then
Tabela.Locate('codigo',Qry.FieldByName('codigo').AsInteger,[]);
end;
end;
Aí se você tem um DBGrid retornando tudo que retorna na consulta, teria dois DataSource, um ligado ao IBQuery e outro ao IbTable.
Pra mostrar nos DB o registro selecionado no DBGrid você pode colocar o código nos eventos onCellClick, onKeyDown e onKeyUp:
if not isEmpty then
Tabela.Locate('codigo',Qry.FieldByName('codigo').AsInteger,[]);
Obs.: Você tem que trocar onde está "codigo" par ao campo chave da sua tabela.
tá dando o seguinte erro;
undeclared identifier isEmpty.
Gostei + 0
07/11/2012
Claudia Nogueira
Gostei + 0
07/11/2012
Paulo
eu coloquei os codigos no EdtRG deu certo. no EdtNome não. Dá o seguinte erro: is not a valid integer value
Gostei + 0
07/11/2012
Claudia Nogueira
O código do nome é assim:
if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')';
Pra evitar de mostrar o erro de conversão do string pra integer por causa do campo vazio, se você usar um componente do tipo edit mas que é pra valor, tipo algum da DevExpress ou da RxLib, você não usaria variável pra converter, e o código ficaria direto if CeRg.valu <> 0 then sem a variável.
Você pode colocar um código no início do botão:
if EdtRG.Text = '' then EdtRg.Text := '0';
eu coloquei os codigos no EdtRG deu certo. no EdtNome não. Dá o seguinte erro: is not a valid integer value
Gostei + 0
08/11/2012
Paulo
O código do nome é assim:
if EdtNome.Text <> '' then sSQL := ' AND (nome like '+QuotedStr(EdtNome.Text+'%')+')';
Pra evitar de mostrar o erro de conversão do string pra integer por causa do campo vazio, se você usar um componente do tipo edit mas que é pra valor, tipo algum da DevExpress ou da RxLib, você não usaria variável pra converter, e o código ficaria direto if CeRg.valu <> 0 then sem a variável.
Você pode colocar um código no início do botão:
if EdtRG.Text = '' then EdtRg.Text := '0';
eu coloquei os codigos no EdtRG deu certo. no EdtNome não. Dá o seguinte erro: is not a valid integer value
O campo RG numeric estava dando muito problema eu mudei de numeric para VARCHAR.
como seria a adaptação dos codigos com a mudança do campo RG numeric para RG VARCHAR?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)