Satoy Matsuoka wrote:
> Olá João,
>  
> Estou usando os componentes errados ?
> Como poderia fazer então ??
> Estou utilizando o D7 + IBX + FB 2 + DBEdit + DBNavigator ...
> Quais os componentes que deveria utilizar ????

Você está usando os componentes certos, mas o jeito que estes 
componentes trabalham quando estão juntos é que _podem_ vir a te causar 
problemas. O maior deles é o tempo em que a transação permanece aberta.

Não tem como falar em certo e errado porque isto são questões pessoais. 
Vou falar as abordagens que eu vi por aí afora, os prós e contras de 
cada uma, e você pergunta aonde tiver dúvida para então montar sua 
própria opção.

1.
Uma solução rápida é o uso do cached updates do IBX. Com ele você altera 
os dados em memória e pode conectar ao banco só na hora de aplicar o 
insert ou update. O maior problema dele é que ele não funciona com um 
nível de mestre detalhe maior do que 1 (ex. 
Pedido->PedidoItem->PedidoItemCusto), sem falar que é um recurso chato 
pácas de usar (opinião pessoal).

2.
Você tem também a opção de tirar o DBEdit & Cia. da jogada e trabalhar 
direto com componentes simples (Edit & Cia.) então apenas quando o 
usuário confirma os dados é que você monta os inserts ou updates de 
todos os níveis de mestre-detalhe, abre a transação, manda tudo para o 
banco e fecha a transação. Isto dá um trabalho infernal no começo, mas a 
partir do momento em que você começa a reaproveitar código, este 
trabalho começa a ficar menor. Se você tiver jeito para a coisa, poderá 
montar uma estrutura que facilite novas implementações e as manutenções. 
Se não tiver muito jeito, isso pode te dar muito trabalho sempre que 
tiver que mexer na estrutura. O lado bom é que você tem controle 100% de 
tudo o que está acontecendo, e como você faz a coisa do seu jeito, você 
consegue resolver problemas 'de outro mundo' com mais facilidade.

3.
Você tem ainda a opção de usar ClientDataset, caso a sua versão de 
Delphi tenha este componente (acho que todos os D7 tem, correto?). Com 
ele você terá transações curtas com tantos níveis de mestre-detalhe 
quantos precisar. O problema é que, se com a implementação tradicional 
você já tem que configurar um monte de componente, com ClientDataset 
esse trabalho é multiplicado por 2 ou 3. Para usar cds existe também uma 
pequena curva de aprendizado.

4.
Por fim, você pode usar orientação a objetos no acesso e na apresentação 
dos dados. Esta é a solução que 'salvou o meu emprego' e que eu utilizo 
até hoje. O problema é que esta técnica tem uma curva de aprendizado 
muito longa e você tem que estar com disposição, força de vontade e 
paciência para fazer uso dela. E lógico, acreditar que é uma boa técnica 
também ajuda. Uma vez conhecendo a técnica, você ganha muito em 
produtividade e risca controle transacional e montagem de Query da sua 
lista de tarefas.

--
Joao Morais




> 
>  
> Em 30/08/07, *Joao Morais* <[EMAIL PROTECTED] 
> <mailto:[EMAIL PROTECTED]>> escreveu:
> 
>     Satoy Matsuoka wrote:
>     >  Mas não é o que ocorre com minha aplicação.
>     >
>     >  Ex. se estou na tela simples (Cód. descrição).
>     >  Depois que faço a atualização, (aperto o botão de insert do
>     DBNavigator), e
>     >  sem sair da tela, faço a query por fora do sistema, ela não me
>     responde com
>     >  as alterações feitas.
>     >
>     >  Somente depois que saido, ou dou um commit explícito, é que
>     enchergo as
>     >  alterações.
>     >
>     >  Então estou fazendo algo de errado na minha estrutura ??
> 
>     Você está fazendo certo, porém o componente que você usa não foi
>     desenhado para trabalhar desta forma.
> 
>     Para este caso específico, você terá que abrir uma transação, executar
>     suas dml e então enviar um commit para gravar caso não tenha ocorrido
>     erro, ou enviar rollback para cancelar caso tenha ocorrido algum erro.
> 
>     Para futuro, pense na hipótese de usar alguma coisa para fazer cache
>     dos
>     dados. Que seja client dataset, que seja um framework de persistência,
>     que seja usar edit ao invés de dbedit, mas evite usar componentes que
>     não façam cache (IBX) junto com componentes dbware, porque isso dá um
>     bocado de dor de cabeça.
> 
>     --
>     Joao Morais

Responder a