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