[firebase-br] MASTER DETAIL com IBO

Gustavo Novaes gutonovaes19 em gmail.com
Terça Julho 28 17:31:29 -03 2020


Obrigado Marcus,
Conferi tudo Ok e o erro persistia.
A causa: um campo que adicionei do tipo BIGINT para armazenar um valor
calculado automaticamente. Não sei a razão exata do erro pois "estava"
funcionando no teste que fiz com IBOQUERY e IB_QUERY. A diferença entre
esse teste de agora e os anteriores é que resolvi usar clientdataset.
Provavelmente não tenha me atentado à problemas com tipos de campos.
Agora preciso ver como modificar o banco, ainda não está em produção.
Os campos foram criados a partir de um domínio.
Vou procurar a instrução. Obrigado. abraço.

*Gustavo Novaes *




Em ter., 28 de jul. de 2020 às 16:34, Marcos R. Weimer <
marcosweimer em gmail.com> escreveu:

> Ola!
>
> Para ambas as querys (master e detail)
> - Veja se o parametro REQUESTLIVE = True, se estiver false o IBO não grava
> no banco.
> - Clique com o direto na IBOQuery,
> - vá em Edit,
> - na aba "KeyLinks" desmarque os 2 checkbox (KeyLinksAutoDefine e
> FetchWholeRows)
> - no KeyRelation informe o apelido da tabela (Exemplo: para a SQL: "select
> * from produtos p" informar "p" que é o apelido)
> - no KeyLinks informe a PK da tabela (exemplo com base na SQL acima:
> "p.codigoproduto")
>
> Para a Query detail (filha/itens)
> - propriedade DataSource ligar ao datasource que está ligada a query master
> (pai) (fazer o mesmo com o clientdataset setando tambem o "masterfields")
>
>
> -=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 ter., 28 de jul. de 2020 às 16:12, Gustavo Novaes <
> gutonovaes19 em gmail.com>
> escreveu:
>
> > Marcos,
> > Resolvi usar IboQuery + Provider + Clientdataset, ligados ao iboDatabase
> e
> > Ibotransaction.
> >
> > Após inserir o registro, faço o teste clientdataset.changecount > 0 entao
> > clientdataset.applyupdates(-1);
> > Não está salvando e não apresenta nenhum erro.
> > Olhei o exemplo do IbObjects e não vi nenhuma configuração diferente a
> ser
> > usada nos clientdataset nem provider.
> > A diferença do exemplo para meu teste é que estou com querys "aninhados".
> > A informação não é gravada no banco.
> >
> > Tem alguma dica por favor?
> >
> > *Gustavo Novaes *
> >
> >
> >
> >
> > Em sex., 24 de jul. de 2020 às 13:35, Marcos R. Weimer <
> > marcosweimer em gmail.com> escreveu:
> >
> > > Aqui fazemos tudo em CDS, depois lemos/validamos o CDS e gravamos com
> > > querys, o tal do ApplyUpdates usamos apenas para registros simples,
> > > master/detail não, assim evitamos problemas deste tipo.
> > >
> > > -=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 sex., 24 de jul. de 2020 às 13:17, Gustavo Novaes <
> > > gutonovaes19 em gmail.com>
> > > escreveu:
> > >
> > > > Desculpem-me a insistência.
> > > >
> > > > Esse cenário/ modelo de dados que estou querendo parece-me não é
> usual,
> > > > então. Ninguem faz dessa forma.
> > > > Como fazem então? Uma entrada/saída de notas fiscais, por exemplo,
> > típico
> > > > MASTER DETAIL. Informa-se os dados principais (master) itens
> (details).
> > > Se
> > > > cancelar, cancela tudo. Só grava a nota completa no banco após
> lançados
> > > os
> > > > itens e o cabeçalho.
> > > >
> > > >
> > > >
> > > > *Gustavo Novaes *
> > > >
> > > >
> > > >
> > > >
> > > > Em qui., 23 de jul. de 2020 às 14:05, Gustavo Novaes <
> > > > gutonovaes19 em gmail.com>
> > > > escreveu:
> > > >
> > > > > Obrigado Cantu, mas...
> > > > >
> > > > > ... o controle do PK/FK até imagino como farei mas, preciso
> realmente
> > > > > fazer a entrada de dados, usando IboQuery ou IB_Query, com
> > > cachedUpdates?
> > > > > Tem algum exemplo,  tutorial ou papel de pão, guardanapo de
> botequin,
> > > > dando
> > > > > dica?
> > > > > Perdoee-me a brincadeira, obrigado mais uma vez.
> > > > >
> > > > >
> > > > >
> > > > > *Gustavo Novaes *
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Em qui., 23 de jul. de 2020 às 13:55, Carlos H. Cantu <
> > > > > 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
> > >
> > ______________________________________________
> > 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
>


Mais detalhes sobre a lista de discussão lista