[firebase-br] Consulta SQL com Parâmetros

Fausto fausto.s.a em uol.com.br
Qui Ago 6 08:40:03 -03 2009


Em 05/08/2009 23:41, Reginaldo Martins Costa escreveu:
> Amigos,
>
> Estou desenvolvendo uma aplicação em DELPHI 2006 utilizando:
> TSQLConnection ==>  TSQLQuery ->  TDataSetProvider ->  TClientDataSet ->
> TDataSource
>
> Ocorre que as consultas SQL que possuem parâmetros só retornam o resultado
> da primeira vez que eu consulto.
>
> Exemplo: tenho a seguinte SQL:
> SELECT * FROM usuario usu
> WHERE usu.usriCdUsuario = :CdUsuario
> AND usu.usriCdSenha = :CdSenha
> No Delphi, o código está da seguinte forma:
>    with dmdsgipri.qryUsuarioLog do begin
>        Close;
>        dmdsgipri.cdsUsuarioLog.Close;
>        ParamByName('CdUsuario').AsString := edtUsuario.Text;
>        ParamByName('CdSenha').AsString := edtSenha.Text;
>        Open;
>        dmdsgipri.cdsUsuarioLog.Active := true;
>        if dmdsgipri.cdsUsuarioLog.RecordCount = 1 then
>          lAcesso := true
>        else
>        begin
>          MessageDlg('Usuário não Cadastrado',mtError,[mbOk],0);
>          lAcesso := false;
>        end;
>      end;
> Eu efetuo o login com o usuário "aaa" senha "1". Se eu efetuo o logon e
> tento novo logn com o usuário "A2" senha "2", o conteúdo no cdsUsuarioLog
> ainda é o resultado da primeira consulta (usuário "aaa" senha "1").
>
> Fiz alguns testes processando o qryUsuarioLog  e exibindo os campos com
> "showmessage" e aparentemente a segunda consulta retorna o resultado
> correto. O problema é no ClientDataSet.
>
> Alguem já passou por este tipo de problema?
>
> Agradeço qualquer dica.
>
> Reginaldo.
Onde você esta  abrindo o ClientDataSet?
Caso insista em deixar o with faça o somente com o Dmdsgirpi
Outra coisa a passagem de parametros esta errada, passe diretamente para 
o cds.
Primeiro vá no cds com o botão direito clique em FechtParams
Depois faça assim:
dmdsgipri.cdsUsuarioLog.Params[0].asstring := edtUsuario.Text;
dmdsgipri.cdsUsuarioLog.Params[0].asstring := edtSenha.Text;
Note que no seu exemplo esta havendo uma confusão, pois você usa a 
clausula with portanto ela esta passando o paramentro para o TSql,
e abrindo o TSql e não o Cds.

-- 
Fausto Alves
Skype:faustoalves
msn:faustoalves em com4.com.br
Franca-SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird





Mais detalhes sobre a lista de discussão lista