Fórum Passagem de parametros, eu acho.... #235950

03/06/2004

0

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:


Rcaps

Rcaps

Responder

Posts

03/06/2004

Rmc1701e

Substitua a linha:
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


Responder

Gostei + 0

03/06/2004

Rcaps

Ok ! Mas onde é que eu declaro a var nivel ? pois na hora de rodar não está achando ? :oops:


Responder

Gostei + 0

03/06/2004

Rmc1701e

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


Responder

Gostei + 0

03/06/2004

Rcaps

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.


Responder

Gostei + 0

03/06/2004

Zunker

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;


Responder

Gostei + 0

03/06/2004

Zunker

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;


Responder

Gostei + 0

03/06/2004

Rcaps

O problema não está na Query e sim no parametro Nivel, ainda... :x


Responder

Gostei + 0

03/06/2004

Rmc1701e

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


Responder

Gostei + 0

03/06/2004

Rcaps

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 ?


Responder

Gostei + 0

03/06/2004

Paulo_amorim

Olá

Nao sei no IBQuery, mas numa Query normal vc deveria configurar esse parametro atraves da propriedade Params...

Até+


Responder

Gostei + 0

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

Aceitar