Passagem de parametros, eu acho....
Gostaria de saber se alguem pode me dar uma esclarecida no problema abaixo :
No Interbase tenho duas tabelas no BD, a primeira é de USUARIO com o campo Nivel char(1) e a segunda é a PERFIL com o campo ID Char(1) que estão ligados com FK.
Bem no primeiro Form eu listo no DBGrid todos os usuários e quando posiciono o ponteiro em um determinado usuário e pressiono o botão de perfil um novo Form é invocado apenas com o nível do usuário posicionado no primeiro Form - A questão é que no segundo Form todos os registros tambem são selecionados, não respeitando a sentença abaixo : Select * From usuario,perfil where perfil.id = usuario.nivel.
Como devo fazer para que só o registro da tabela perfil cujo ID seja igual ao nivel da tabela usuario seja mostrado de forma única ?
Grato desde já!
Rcaps. :roll:
No Interbase tenho duas tabelas no BD, a primeira é de USUARIO com o campo Nivel char(1) e a segunda é a PERFIL com o campo ID Char(1) que estão ligados com FK.
Bem no primeiro Form eu listo no DBGrid todos os usuários e quando posiciono o ponteiro em um determinado usuário e pressiono o botão de perfil um novo Form é invocado apenas com o nível do usuário posicionado no primeiro Form - A questão é que no segundo Form todos os registros tambem são selecionados, não respeitando a sentença abaixo : Select * From usuario,perfil where perfil.id = usuario.nivel.
Como devo fazer para que só o registro da tabela perfil cujo ID seja igual ao nivel da tabela usuario seja mostrado de forma única ?
Grato desde já!
Rcaps. :roll:
Rcaps
Curtidas 0
Respostas
Rmc1701e
03/06/2004
Substitua a linha:
Por essa:
E na hora de abrir a query, use o codigo:
Essa passagem de parâmetro (que é feita quando você clica no botão de Perfil, filtra a sua 2a. tabela.
Espero ter ajudado.
Reginaldo
Select * From usuario,perfil where perfil.id = usuario.nivel.
Por essa:
Select * From usuario,perfil where perfil.id = :Nivel.
E na hora de abrir a query, use o codigo:
with qryTabela2 do begin Close; ParamByName(´Nivel´).AsString := qryTabela1.FieldByName(´nivel´).AsString; Open; end;
Essa passagem de parâmetro (que é feita quando você clica no botão de Perfil, filtra a sua 2a. tabela.
Espero ter ajudado.
Reginaldo
GOSTEI 0
Rcaps
03/06/2004
Ok ! Mas onde é que eu declaro a var nivel ? pois na hora de rodar não está achando ? :oops:
GOSTEI 0
Rmc1701e
03/06/2004
O ´Nivel´ do ParamByName é um [b:99d53e7db9]parâmetro[/b:99d53e7db9]. Na sua query, esse parâmetro deve ser precedido de [b:99d53e7db9]:[/b:99d53e7db9] (dois pontos). O erro deve ser porque você não colocou o ´dois pontos´.
GOSTEI 0
Rcaps
03/06/2004
Vamos por partes :
Quando executo a IBQuery1, conforme vc indicou, recebo a informação que NIVEL Not Found...
Eu não sei onde é que a variável :nivel está recebendo o parametro do campo Nivel da tabela Usuario no momento em que eu estou invocando o segundo Form com o registro do Perfil desejado, entendeu ?
Veja com estou fazendo :
no Form1 tudo bem, tenho vários registros com níveis diferente para cada linha do Grid, OK?
-Quando do Click para invocar o segundo Form faço o seguinte :
procedure TfrmManUsua.btnPermisClick(Sender: TObject);
var
begin
frmPermissoes.ShowModal;
end;
Quando o Segundo Form é executado :
procedure TfrmPermissoes.FormActivate(Sender: TObject);
begin
with IBQuery1 do begin
Close;
ParamByName(´Nivel´).AsString := IBQuery1.FieldByName(´nivel´).AsString;
Open;
end;
Aí recebo a mensagem de Nivel Not Found.
Desculpa, mas sou iniciante ok ?
Grato.
Quando executo a IBQuery1, conforme vc indicou, recebo a informação que NIVEL Not Found...
Eu não sei onde é que a variável :nivel está recebendo o parametro do campo Nivel da tabela Usuario no momento em que eu estou invocando o segundo Form com o registro do Perfil desejado, entendeu ?
Veja com estou fazendo :
no Form1 tudo bem, tenho vários registros com níveis diferente para cada linha do Grid, OK?
-Quando do Click para invocar o segundo Form faço o seguinte :
procedure TfrmManUsua.btnPermisClick(Sender: TObject);
var
begin
frmPermissoes.ShowModal;
end;
Quando o Segundo Form é executado :
procedure TfrmPermissoes.FormActivate(Sender: TObject);
begin
with IBQuery1 do begin
Close;
ParamByName(´Nivel´).AsString := IBQuery1.FieldByName(´nivel´).AsString;
Open;
end;
Aí recebo a mensagem de Nivel Not Found.
Desculpa, mas sou iniciante ok ?
Grato.
GOSTEI 0
Zunker
03/06/2004
Pq naum tenta fazer assim
with IBQuery1 do begin
Close;
sql.add(´Select * From usuario,perfil where perfil.id = :Nivel´);
ParamByName(´Nivel´).AsString := IBQuery1.FieldByName(´nivel´).AsString;
Open;
with IBQuery1 do begin
Close;
sql.add(´Select * From usuario,perfil where perfil.id = :Nivel´);
ParamByName(´Nivel´).AsString := IBQuery1.FieldByName(´nivel´).AsString;
Open;
GOSTEI 0
Zunker
03/06/2004
Pq naum tenta fazer assim
with IBQuery1 do begin
Close;
sql.clear;
sql.add(´Select * From usuario,perfil where perfil.id = :Nivel´);
ParamByName(´Nivel´).AsString := IBQuery1.FieldByName(´nivel´).AsString;
Open;
with IBQuery1 do begin
Close;
sql.clear;
sql.add(´Select * From usuario,perfil where perfil.id = :Nivel´);
ParamByName(´Nivel´).AsString := IBQuery1.FieldByName(´nivel´).AsString;
Open;
GOSTEI 0
Rcaps
03/06/2004
O problema não está na Query e sim no parametro Nivel, ainda... :x
GOSTEI 0
Rmc1701e
03/06/2004
Eu não sei onde é que a variável :nivel está recebendo o parametro do campo Nivel da tabela Usuario no momento em que eu estou invocando o segundo Form com o registro do Perfil desejado, entendeu ?
Quero que você veja a linha que você colocou a consulta, que deve ser essa linha:
[b:87fe4b3664]Select * From usuario,perfil where perfil.id = :Nivel[/b:87fe4b3664]
Veja se você não esqueceu o ´Dois Pontos´ entre o ´= ´ e o ´Nivel´ nesta linha
GOSTEI 0
Rcaps
03/06/2004
No componente [b:1627321eb2]IBQuery1[/b:1627321eb2] e na caixa [b:1627321eb2]Command Text Editor [/b:1627321eb2]está escrito assim ( cortei e colei aqui )
[b:1627321eb2]select * from Perfil,usuario where perfil.id = :nivel[/b:1627321eb2]
Ok ?
[b:1627321eb2]select * from Perfil,usuario where perfil.id = :nivel[/b:1627321eb2]
Ok ?
GOSTEI 0
Paulo_amorim
03/06/2004
Olá
Nao sei no IBQuery, mas numa Query normal vc deveria configurar esse parametro atraves da propriedade Params...
Até+
Nao sei no IBQuery, mas numa Query normal vc deveria configurar esse parametro atraves da propriedade Params...
Até+
GOSTEI 0