[firebase-br] Consulta SQL com Parâmetros

Reginaldo Martins Costa rmc1701e em ig.com.br
Qui Ago 6 09:10:37 -03 2009


Fausto,

Realmente eu abro o TSql e depois apenas seto a propriedade active do Cds
para true. Estou fazendo assim porque já que o select está no TSql, achava
que tinha que abrir era ele... Vou tentar sua dica lá em casa hoje.

Outra coisa mais desesperadora ainda: aqui na empresa onde trabalho este
erro não ocorre, ou seja, faço a primeira consulta e retorna OK. Seleciono
novos parâmetros, fecho os componentes e faço a segunda consulta e retorna o
conteúdo OK também!!!

O Delphi é o mesmo (2006), o acesso ao banco é local. Todos os fontes são os
mesmos, pois copio tudo para o meu pendrive e transito entre o computador da
empresa e o de casa. O banco (.fdb) é o mesmo.

A única diferença que eu notei:
Empresa: Windows XP
Casa: Windows Vista Start Edition

Como a consulta funciona corretamente aqui na empresa, vou tentar sua dica
hoje a noite.

Valeu!

2009/8/6 Fausto <fausto.s.a em uol.com.br>

> 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 <msn%3Afaustoalves em com4.com.br>
> Franca-SP
> Enviado pelo Mozilla Thunderbird
> http://br.mozdev.org/thunderbird
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista