login com interbase (como faço?)

Delphi

20/05/2003

Estou fazendo uma tela de login, e estou usando o interbase.

Estou acessando o banco da seguinte forma.

tenho um data module com:
um IBdatabase
um IBTransaction
um IBDataSet
um IbDataSource

Por enquanto o banco de dados tem apenas 3 campos:
Código
USuário
Senha

Como faço para fechar o formulário apenas se o nome e o usuário digitado em dois edits sejam comprados com os dados do banco de dados.

Grata.


Michele

Michele

Curtidas 0

Respostas

Flavio Sanches

Flavio Sanches

20/05/2003

Não deu pra entender direito o que vc quer, mas preciso esclarecer que:
1 - Banco de dados não tem campos, as tabelas é que tem campos
2 - O banco de dados tem users (usuários) que vc pode acessar através da sua aplicação

Ou seja...
Tente ser um pouquinho mais explícita.


GOSTEI 0
Michele

Michele

20/05/2003

desculpe no meu banco de dados tenho uma tabela apenas.
Nome do banco é empresa.grd

nesta tabela tem 3 campos.

codigo usuario e senha

são esses campos que eu preciso comparar


GOSTEI 0
Flavio Sanches

Flavio Sanches

20/05/2003

coloque um ibquery e na instrução sql coloque alguma coisa assim:

select * from <tabela>
where usuario = :usuario

depois, na sua aplicação, no click de um botão sair, por exemplo:

ibquery.close;
ibquery.parambyname(´usuario´).asstring := edit1.text;
ibquery.open;

if ibquery1.fieldbyname(´usuario´).asstring = esit2.text then
close;

ve se seria mais ou menos isso


GOSTEI 0
Michele

Michele

20/05/2003

agradeço sua resposta mas pelo que entendi só compara o usuário.
mas comparo isso com a senha....


GOSTEI 0
Marcelo.c

Marcelo.c

20/05/2003

Michele,

eu utilizo ADO, mas o princípio é o mesmo. O código abaixo pode te dar uma idéia de como proceder:

procedure TF_Menu.FormShow(Sender: TObject);
var
i: integer;
begin
DM_Geral.TabSenha.Open;
for i:= 0 to 2 do
begin
F_Senha.ShowModal;
vusuario:=F_Senha.Edit1.Text;
vsenha:=F_Senha.Edit2.Text;
if not DM_Geral.TabSenha.Locate(´Usuario;Entrada´, VarArrayOf([vusuario, ´True´]), []) then
MessageDlg(´ Usuário não Cadastrado !!! ´, mtInformation, [mbOk], 0)
else
if DM_Geral.TabSenhaSenha.Value<>vsenha then
MessageDlg(´ Senha inválida !!! ´, mtInformation, [mbOk], 0)
else
break;
if i=2 then
close;
end;
end;


GOSTEI 0
Flavio Sanches

Flavio Sanches

20/05/2003

Veja se eu entendi...

Pelo que vc falou vc vai criticar o usuario pra ver se ele tem permissão pra sair do aplicativo, certo?
se certo então
os dois edits mencionados são um pra o usuário e outro pra senha?
se certo então tente isso...

ibquery.close;
ibquery.parambyname(´usuario´).asstring := Edt_usuario.text;
ibquery.open;

{
acima vc passa o parametro usuario pra query que vai retornar o registro no qual o mesmo está cadastrado, que conterá o nome do usuario e a senha dele, daí é so comparar
}

if ibquery1.fieldbyname(´usuario´).asstring = Edt_usuario.text
and ibquery1.fieldbyname(´senha´).asstring = Edt_senha.text then
close;

Acho que essa forma é mais simples do que a do amigo gean.
Vc pode melhorar exibindo mensagens pra senha errada ou usuario não cadastrado.
Desculpe não ser tão detalhado, mas prefiro supor que vc tenha conhecimento suficiente pra entender e até adaptar o pouco que eu disse a sua necessidade.

ve se seria mais ou menos isso


GOSTEI 0
Michele

Michele

20/05/2003

é exatamente isso que estou precisando.
só que quando mando compilar ele não reconhece o ibquery1.
veja se estou fazendo certo

coloquei um ibquery1 no meu data module
na propriedade database vinculei com o ibdatabase1
na propriedade transaction vinculei com ibtransaction1

o que estou fazendo errado?


GOSTEI 0
Flavio Sanches

Flavio Sanches

20/05/2003

Na aplicação vc está, obviamente, mencionando o datamodule, né???

tipo:

with datamodule1 do
begin
ibquery1.....



end;

só assim ele vai saber que o ibquery está dentro do datamodule.

Caso, o que eu acredito, vc esteja fazendo isso, mande uma transcrição da mensagem de erro.

beijin


GOSTEI 0
Michele

Michele

20/05/2003

tirei o ibquery1 do datamodule e coloquei dentro do form,
parou de dar o erro.

Agora aparece outro erro:
ibquery1:Parameter ´usuario´ not found.

na instrução sql do ibquery1 adicionei:
select * from usuario
where usuario=:usuario

aonde estou errando agora?


GOSTEI 0
Michele

Michele

20/05/2003

agora está funcionando, sou muito grata por sua ajuda.

mas esta comparação é case sensitive.
tem como deixar o usuario sem ser?

beijos.


GOSTEI 0
Michele

Michele

20/05/2003

agora está funcionando, sou muito grata por sua ajuda.

mas esta comparação é case sensitive.
tem como deixar o usuario sem ser?

beijos.


GOSTEI 0
Michele

Michele

20/05/2003

desculpe acho que estou dando um pouco de trabalho,
mas agora verifiquei que se deixo os dois edits em branco o form fecha assim mesmo, tem alguma sugestão para mim resolver isso?


GOSTEI 0
Guedes.rj

Guedes.rj

20/05/2003

Sei problema está muito complexo!
E um pouco complicado!
Talvez se vc enviar (para o e-mail abaixo) os arquivos envolvidos neste problemas talvez possamos ajudá-la.

Guedes.
guedes.rj@bol.com.br


GOSTEI 0
Michele

Michele

20/05/2003

Agradeço muito pela ajuda.
Por hora meus problemas foram resolvidos.


GOSTEI 0
Flavio Sanches

Flavio Sanches

20/05/2003

quanto ao case sensitive vc pode colocar os dois como case up, assim:


if upcase(ibquery1.fieldbyname(´usuario).asstring) = upcase(edt_usuario.text)

e quanto fechar mesmose o edit estiver em branco, a tabela deve ter algum registro em branco, teste o edt_usuario.text <> ´´, assim:

if upcase(ibquery1.fieldbyname(´usuario).asstring) = upcase(edt_usuario.text) and edt_usuario.text <> ´´ then

obs.: Em edt_usuario.text <> ´´, o ´´(plic,plic) não é ´ (aspa) mas ´(plic) + ´(plic)


GOSTEI 0
Michele

Michele

20/05/2003

se eu definir como case up aceita maiúsculo e minúsculo?

quanto aos edits em branco é já tinha resolvido, foi um pequeno lapso.

vou abusar da sua boa vontade.
preciso fazer agora algo mais ou menos o inverso.

preciso jogar a informação de edit para um campo de uma tabela.


GOSTEI 0
POSTAR