[firebase-br] MASTER DETAIL com IBO

Carlos H. Cantu listas em warmboot.com.br
Sexta Julho 24 09:43:35 -03 2020


Até algum tempo atrás, podíamos dizer que o principio do CachedUpdates
no IBO era o mesmo da "BDE" do Delphi, então vc pode recorrer a
documentação do Delphi (TQuery, TTable) para saber como trabalhar com
ele. Atente para o evento OnCheckCachedInsert, que não existe na
"BDE" e existe no IBO. Ele deve ser usado nas queries "detalhe" e deve
retornar "true" se o registro deve ser exibido. Basicamente vc compara
o ID do mestre com o ID no detalhe e se forem iguais, retorna true.

Há uns 2 anos atrás, o Jason adicionou vários novos recursos no
CachedUpdates do IBO, principalmente em relação a como tratar
conflitos de atualização, que não existem na "BDE". Você pode ler isso
no release notes do IBO, alias, recomendo que vc abra o RN e pesquise
por CachedUpdates e leia tudo que estiver lá a respeito desse assunto.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

GN> Marcos,

GN> Ainda estou com delphi 5, infelizmente.

GN> Cantu, sobre o TransactOat escrito pelo Jason (IBO), confesso não entendi
GN> muito Vou procurar alguma outra explicação, outra forma de explicar. O
GN> Aplicativo de testes coloquei pra funcionar mas não soube como testar.

GN> Obrigado a vocês.

GN> *Gustavo Novaes *




GN> Em sex., 24 de jul. de 2020 às 08:24, Marcos R. Weimer <
GN> marcosweimer em gmail.com> escreveu:

>> Gustavo
>>
>> Se está usando delphi "mais novo", migre para FireDac, aqui usamos IBO por
>> anos (desde o delphi 6) e com a atualização do delphi a poucos anos
>> acabamos fazendo testes com o FireDac e os resultados (desempenho) em
>> alguns casos específicos (insert de vários registros em lotes) foram bem
>> melhores (além de economizar na licença do IBO). Não lembro exatamente os
>> valores por que já faz tempo, aqui estamos migrando aos poucos.
>>
>>
>> -=Ma®©oS=-
>> Marcos R. Weimer
>> Pessoas quietas têm as mentes mais barulhentas - Stephen Hawking
>> Viver significa ter algumas alegrias e muito sofrimento - Pepe Mujica
>> Muitos daqueles que te chamam de louco queriam ter a sua coragem - Silvio
>> Santos
>>
>>
>>
>>
>>
>> Em qui., 23 de jul. de 2020 às 15:08, Carlos H. Cantu <
>> listas em warmboot.com.br> escreveu:
>>
>> > Acho que o arquivo OptimizingQuerysAndTransaction.rtf que fica na
>> > pasta docs do IBO tb fala sobre CachedUpdates.
>> >
>> > []s
>> > Carlos H. Cantu
>> > eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
>> > www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>> >
>> > GN> Obrigado Cantu, mas...
>> >
>> > GN> ... o controle do PK/FK até imagino como farei mas, preciso realmente
>> > fazer
>> > GN> a entrada de dados, usando IboQuery ou IB_Query, com cachedUpdates?
>> Tem
>> > GN> algum exemplo,  tutorial ou papel de pão, guardanapo de botequin,
>> dando
>> > GN> dica?
>> > GN> Perdoee-me a brincadeira, obrigado mais uma vez.
>> >
>> >
>> >
>> > GN> *Gustavo Novaes *
>> >
>> >
>> >
>> >
>> > GN> Em qui., 23 de jul. de 2020 às 13:55, Carlos H. Cantu <
>> > GN> listas em warmboot.com.br> escreveu:
>> >
>> > >> Com CachedUpdates vc precisa do valor das PKs/FKs antes de mandar os
>> > >> dados pro servidor, do contrário, não há como manter o relacionamento
>> > >> entre os registros pois não se sabe quais IDs seriam atribuidos.
>> > >> Portanto, você terá que incrementar os generators no OnNewRecord e já
>> > >> atribuir ao campo especifico, bem como atribuir os IDs dos "pais" nos
>> > >> registros "filhos" conforme eles vão sendo inseridos, pra que quando
>> > >> forem enviados pro Firebird já estejam definidos.
>> > >>
>> > >> []s
>> > >> Carlos H. Cantu
>> > >> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
>> > >> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>> > >>
>> > >> GN> Boa tarde,
>> > >> GN> Na minha aplicação antiga (bde + paradox) tinha dificuldades em
>> > fazer
>> > >> uma
>> > >> GN> entrada de dados master-detail. Usava cached updates. O usuário
>> > poderia
>> > >> GN> inserir/editar dados na tabela pai e  na filha. Após gravar,
>> fazia o
>> > >> apply
>> > >> GN> updates para persistir no banco.
>> > >> GN> O Modelo não funcionava bem. Passei a usar um exemplo de querys
>> > >> aninhadas
>> > >> GN> (2 tquerys relacionados), 1 provider, 2 clients datasest onde o 2o
>> > era
>> > >> GN> ligado ao tdatasetfield da query2. Beleza, assim ficou.
>> > >>
>> > >> GN> Agora que estou migrando pro IBO, deparei-me com um problema.
>> > >> GN> No banco paradox eu tinha uma estrutura semelhante a essa :
>> > >>
>> > >> GN>    1. Campo código, ALFA DE 8, CHAVE PRIMARIA
>> > >> GN>    2. CAMPO NOME, ALFA 60
>> > >> GN>    3. campo CodigoEndereco (autoincremento)
>> > >>
>> > >> GN> Tenho uma tabela Filial
>> > >>
>> > >> GN>    1. Campo CodigoDoPai (alfa de 8) PK
>> > >> GN>    2. Campo CodigoFilial (Alfa de 8) PK
>> > >> GN>    3. Nome da Filial
>> > >> GN>    4. Campo CodigoEndereço (autoincremento)
>> > >>
>> > >> GN> Tenho uma tabela de Endereços, que serve tando à empresa como à
>> > filial
>> > >>
>> > >> GN>    1. CodEndereco (inteiro) PK
>> > >> GN>    2. QuemGravou (alfa, 10) (valores vários EMPRESA ou FILIAL) PK
>> > >> GN>    3. Campos de endereço/localidades...
>> > >>
>> > >> GN> No modelo para FB os campos autoincremento passaram para bigint
>> > >> calculados
>> > >> GN> via sequence+trigger (na conversão que fiz automatica, via
>> DataPump,
>> > >> que
>> > >> GN> gerou o script - mantive assim)
>> > >>
>> > >> GN> Pois bem, repetindo o que disse acima "cria ou altera uma empresa
>> ou
>> > >> uma
>> > >> GN> filial, infomando codigo, nome e endereço, tudo de uma vez só, em
>> > >> cache,
>> > >> GN> que depois vai pro banco).
>> > >>
>> > >> GN> Não estou conseguindo fazer esse "efeito" com o IboQuery e não
>> > >> encontrei um
>> > >> GN> exemplo.  Já percebi que não poderei trabalhar com a
>> > SEQUENCE/TRIGGER
>> > >> (ou
>> > >> GN> poderei?), terei que controlar "manualmente" os numeradores.
>> > >>
>> > >> GN> Podem me ajudar por favor? Algma dica. Não queria ter que fazer no
>> > >> modelo
>> > >> GN> QUERY+PROVIDER+CLIENTDATASET.
>> > >>
>> > >> GN> Obrigado.
>> > >>
>> > >>
>> > >> GN> *Gustavo Novaes *
>> > >> GN> ______________________________________________
>> > >> GN> FireBase-BR (www.firebase.com.br) - Hospedado em
>> www.locador.com.br
>> > >> GN> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> > >> GN> http://www.firebase.com.br/fb/artigo.php?id=1107
>> > >> GN> Para consultar mensagens antigas:
>> > >> GN> http://www.firebase.com.br/pesquisa_lista.html
>> > >>
>> > >>
>> > >> ______________________________________________
>> > >> 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://www.firebase.com.br/pesquisa_lista.html
>> > >>
>> >
>> >
>> > ______________________________________________
>> > 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://www.firebase.com.br/pesquisa_lista.html
>> >
>> ______________________________________________
>> 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://www.firebase.com.br/pesquisa_lista.html
>>
GN> ______________________________________________
GN> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
GN> Para saber como gerenciar/excluir seu cadastro na lista, use:
GN> http://www.firebase.com.br/fb/artigo.php?id=1107
GN> Para consultar mensagens antigas:
GN> http://www.firebase.com.br/pesquisa_lista.html




Mais detalhes sobre a lista de discussão lista