[firebase-br] Perguntas sobre DBX e misterioso comportamento do CommandText

Antonio Carlos a.lima.silva em terra.com.br
Sex Jun 17 09:01:49 -03 2005


Eu estou migrando TODOS os meus aplicativos para DBX em substituicão a IBX e 
quando usava IBX eu controlava explicitamente a transacao, mesmo em um 
select.
Usei e abusei de IBQuery + IBTransaction + DataSetProvider + ClienteDataSet 
e mesmo assim o DataSetProvider sempre fechava a transacão quando o 
ClientDataSet era solicitado.

1 - Bom , uso o Delphi 7 Prof com SP1 e estou usando SqlDataSet + 
DataSetProvider + ClienteDataSet e me deparei com a situacão de que uma 
estacao altera os dados na tabela e estando outra estacao acessando a 
tabela, quando se depara com o erro ( OnReconcileError ) mesmo eu fazendo 
ClientDataSet.Close e .Open ou Refresh, os dados nao sao atualizados, tendo 
que sair da aplicacao e voltar para ter os dados alterados pela outra 
estacao exibidos.

2 - Deparei-me com a seguinte situacao, tenho um form de ConfiguracoesGerais 
que chama os dados do dataSet assim ( ah, os componentes de acesso ficam em 
um DataModule ):

ClientDataSet.Close;
SqlDataSet.CommandText := 'select * from tabela where chave =:chave',
ClientDataSet.Close;
ClientDataSet.FetchParams;
ClientDataSet.Open;

Beleza os dados sao exibidos e tudo funciona 100%. Ocorre que escreci uma 
procedure que fica em uma Unit ( Util.pas ) para abrir e fechar e ese 
dataSet pois é uma tabela de configuracao.
procedure Configuracao(a:boolean);
begin
   if not a then
    ClientDataSet.Close
   else
      begin
         ClientDataSet.Close;
         SqlDataSet.CommandText := 'select * from tabela where chave 
=:chave',
         ClientDataSet.Close;
         ClientDataSet.FetchParams;
         ClientDataSet.Open;
      end;
end;
Abre e fecha numa boa, desde que nao ocorra a seguinte situacao :

Eu saia de um form que chamou a procedure de configuracao e entre no form de 
configuracao ou vice versa.
Da o seguinte erro ao Required Field CHAVE not value

Como nao há campos Requiridos, e nos Fiels do DataSet nao existe nenhum 
assinaldo assim a nao ser o campo CHAVE, e esse é a primay key fiquei pasmo 
mas resolvi com algo que ainda nem sei explicar
coloquei na procedure assim:

SqlDataSet.CommandText := 'select * from tabela where chave =:nomedachave',

Misteriosamente não houve mais erros , mas o que fiz , como explicar ...


Agradeço desde já aos comentarios 






Mais detalhes sobre a lista de discussão lista