[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