MestreDetalhe-FireDAC

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ม.ค. 2025

ความคิดเห็น • 63

  • @elizeusouza2008
    @elizeusouza2008 2 ปีที่แล้ว +1

    Alan, parabéns meu amigo e muito obrigado... Sua didática é muito boa.. assisti alguns vídeos dizendo a mesma coisa mais nesse eu entendi... Valeu meu amigo..

  • @007kzar
    @007kzar 9 ปีที่แล้ว

    Excelente. Aguardo ansiosamente pela aula sobre erros! Parabéns!

  • @winsiacom
    @winsiacom 11 ปีที่แล้ว

    Alan, muito bom!
    Vídeo-aula bem direta e simples, vai ajudar muito no uso desse novo componente.
    valeu

  • @Alexandre_amds
    @Alexandre_amds 9 ปีที่แล้ว

    Amigo parabéns pela iniciativa, e abraço a galera potiguar, morei ai já, hoje moro em Fortaleza/CE.

  • @leandroaraujo3364
    @leandroaraujo3364 11 ปีที่แล้ว

    Fiz mais uns ajustes seguindo o vídeo e uns exemplos do próprio FireDAC e funcionou com o MySQL.
    Vou fazer um tutorial com MySQL (não mudou muita coisa do MSSQL) depois posto o link aqui.
    Obrigado pela videoaula Alan.

  • @rodolfonascimento316
    @rodolfonascimento316 5 ปีที่แล้ว

    Muito bom o seu video, simples... mas acrescenta muito!

  • @AngeloReisDev
    @AngeloReisDev 10 ปีที่แล้ว

    Cara... obrigado por essa vídeo-aula! Muito show!

  • @adrianobrunes8948
    @adrianobrunes8948 10 ปีที่แล้ว

    Alan, Muito bom seu artigo! Belo Trabalho!

  • @ribamarsantos2048
    @ribamarsantos2048 8 ปีที่แล้ว

    Muito bom ! Parabéns e Obrigado! Gostaria de saber as vantagens de uso entre o Firedac X Dbexpress ...

  • @leonardosoares9541
    @leonardosoares9541 3 ปีที่แล้ว

    bem didático, ótimo vídeo

  • @AlexandreLimaPE
    @AlexandreLimaPE 8 ปีที่แล้ว

    Muito bom ! Como faço isso aparecer no quickreport?
    Quero mostrar todas as vendas e itens de cada venda ?

  • @adailsonpriori5043
    @adailsonpriori5043 9 ปีที่แล้ว

    Uma dica!
    Para funcionar no firebird é essencial que o nome do parâmetro da query detalhe seja o mesmo nome do field master!

  • @w4.fabiowatanabe
    @w4.fabiowatanabe 8 ปีที่แล้ว

    Olá Alan, ótima publicação! Você teria algum exemplo nesse sentido para realizar "Mestre/Detalhe", via ClienteServidor? Minha estrutura atualmente é assim: CAMADA SERVIDORA: FDConnection

  • @picfumo
    @picfumo 5 ปีที่แล้ว

    Alan , estou fazendo do mesmo jeito que você ,usando o banco de dados postgres, na hora que coloco o primeiro item detalhe e dou enter na grid , ele dá esse erro "[FireDAC] [DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint]." , estou usando o Embarcadero Delphi 10.2.

  • @JoseNeris1
    @JoseNeris1 8 ปีที่แล้ว

    Prezado Alan, boa tarde;
    Poderia da uma breve explicação para que serve o componente WaitCursor do FireDac.
    Obrigado

    • @AlanGlei
      @AlanGlei  8 ปีที่แล้ว

      Este componente carrega o cursor nativo do banco que você está conectado...

    • @JoseNeris1
      @JoseNeris1 8 ปีที่แล้ว

      Valeu Alan muito obrigado, e sempre quando poder, faça alguma video aula sobre FireDac. Abraços!!

  • @alexandreribeiro8676
    @alexandreribeiro8676 8 ปีที่แล้ว +1

    Excelente!!!!!!!!Muito bom!!!!!!!

  • @biobabinskiroell
    @biobabinskiroell 11 ปีที่แล้ว

    Ficou ótimo,..Alan...
    Os videos de tratamento de erros estão prontos?

  • @samukagto3d
    @samukagto3d 7 ปีที่แล้ว

    Meu projeto está acontecendo uma coisa confusa, quando insiro os dados pelas grids e clico no botão de jogar para o banco funciona direitinho...., mais quando insiro pelos campos edits, combos e currents, ele não joga o valor para o banco e nem retorna nenhum erro, quais comandos o dbgrid usa internamente?

  • @dixiecorrea6711
    @dixiecorrea6711 11 ปีที่แล้ว

    Alan, Necesito saber como utilizar una ventana de dialogo con firedac, actualmente la utilizo con paradox, agradeceré tu información.

  • @filipedossantos2179
    @filipedossantos2179 7 ปีที่แล้ว

    Parabéns, Alan!

  • @3dcapitao
    @3dcapitao 9 ปีที่แล้ว

    Erro estranho!
    Estou utilizando Delphi XE7 com Firebird 2.5.
    Fiz o mstre/detalhe utilizando apenas firedac, e funcionou. Porém, ao usar em rede, em dois ou mais computadores, se inicio no PC_1 o NOVO CADASTRO, não concluo, e em seguida, inicio um NOVO CADASTRO no PC_2. Termino o cadastro do PC_2 e clico em SALVAR, e em seguida, volto para o PC_1, quando salvo o cadastro no PC_1, o detalhe do PC_1 se anexa ao mestre gravado no PC_2, e não a mestre que gerou no PC_1.
    Não sei se expliquei bem, mas o erro consegui notar que, logo após dar um refresh no mestre, estando no PC_1 (o que iniciou o primeiro cadastro, mas deixou o PC_2 gravar na frente), ao dar o refresh, o mestre abre no outro cadastro feito pelo PC_2.
    Resolvi dando um close, sql clear, sql add (select ... where ID_MESTRE IGUAL A TAL NÚMERO), e open. Mas, gostaria de entender o porquê disto, dele abrir em outro. Nem gravando o ponteiro, nada, ele volta em outro da mesma forma.

  • @joaovictorholander6128
    @joaovictorholander6128 8 ปีที่แล้ว

    Olá Alan, que luz você me deu. Só fiquei com uma duvida, como eu recuperaria o id para aplicar em outra função, na verdade preciso filtrar essa id para imprimir via Report Builder. Se puder me dar mais uma luz agradeço.
    Abraços !

  • @joabeanderson
    @joabeanderson 10 ปีที่แล้ว +1

    Alan , estou fazendo do mesmo jeito que você ,usando o firebird 2.5 , na hora que coloco o primeiro item detalhe e dou enter na grid , ele dá esse erro "[FireDAC] [DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint]." , estou usando o xe6 .

    • @bzottis
      @bzottis 4 ปีที่แล้ว

      Olá, estou com o mesmo problema, como reslveu?

    • @joabeanderson
      @joabeanderson 4 ปีที่แล้ว

      @@bzottis Você deve dar insert, um post e um edit ai sim você vai conseguir trabalhar.

    • @bzottis
      @bzottis 4 ปีที่แล้ว

      @@joabeanderson Obrigado pelo retorno Joabe, deu certo para inserir, porém, não gravou o Item, somente o mestre, talvez tenha que setar mais alguma coisa pois pela época do vídeo e com a Evolução do delphi.....mas vou fazer outros testes. Valeu mesmo!

  • @filipedossantos2179
    @filipedossantos2179 6 ปีที่แล้ว

    E aí Alan. Parabéns! Isto não funciona quando a gente usa campos calculados na QueryMaster, cujo valores são obtidos a partir de uma compilação dos dados da QuerySlave. Poderias me ajudar a solucionar isto, por favor?

  • @AlanGlei
    @AlanGlei  11 ปีที่แล้ว

    Update 1 do XE5 vem a com a correção

  • @AlanGlei
    @AlanGlei  11 ปีที่แล้ว

    Update 1 do XE5 vem com a correção

  • @LeoHades12
    @LeoHades12 11 ปีที่แล้ว +1

    muito bom. Dúvida: qual é essa ferramenta que usa para modelar o banco?

    • @AlanGlei
      @AlanGlei  11 ปีที่แล้ว +1

      Diagramas do próprio SQL Server!

    • @LeoHades12
      @LeoHades12 11 ปีที่แล้ว

      ALAN GLEI ok, tks.Parabéns pelo modo como estruturou a demonstração.

  • @winsiacom
    @winsiacom 11 ปีที่แล้ว

    Só um detalhe, Alan ?!
    Esse procedimento da forma que esta explicado não irá funcionar com Firebird, correto !?
    Pelo menos comigo não consegui, ele até alinha as grids e tudo mais, mas na hora do applyupdates, não da nada.

  • @rodrigomore
    @rodrigomore 4 ปีที่แล้ว

    Olá Alan no meu computador, quando clico 2 vezes sobre o componente FDQuery, ele nao abre a Tela do "FireDac Query Editor" para inserir o comando SQL. você tem noção do que possa ser o problema? (Windows 10, Delphi Seattle).

    • @AlanGlei
      @AlanGlei  4 ปีที่แล้ว +1

      Esse é comportamento padrão do Firedac, para acessar a lista de Fields use o menu de contexto

    • @rodrigomore
      @rodrigomore 4 ปีที่แล้ว

      @@AlanGlei o comportamento normal é abrir o Query Editor ao clicar duas vezes sobre o componente FDQuery, mas no meu Delphi, quando eu clico duas vezes ele não abre a tela do Query Editor. Aparentemente ele abre a tela do query editor atrás do form, mas nao mostra nada e o Delphi parece estar travado.

  • @omizollo
    @omizollo 6 ปีที่แล้ว

    Olá
    Olá Alan. Primeiramente parabéns pelo vídeo! Seguindo esse vídeo até o final e usando cache, tudo parece funcionar de forma correta mas com uma exceção: Ao fazer o mestre detalhe, se apagar os filhos de forma que o mestre fique sem nenhum filho, ao navegar pelos mestres, ele carrega os filhos do banco de dados, como se não houvesse cache dos filhos (funciona perfeitamente para alterações ou inclusão ou mesmo exclusão que sobre um registro filho). Pelo que entendi, sempre que não tem filho a leitura do banco é executada. Se apagar todos os filhos e inserir um novo registro filho ele continua com o cache corretamente. O que posso estar fazendo de errado?

    • @nautilussuporte8009
      @nautilussuporte8009 3 ปีที่แล้ว

      você deve dar um commit updates na query filha para pode limpar o cash

  • @reinaldopsilveira
    @reinaldopsilveira 7 ปีที่แล้ว

    Olá Alan. Segui os passos desta vídeo aula, mas utilizo o Firebird e recebo o seguinte erro ao dar o ApplyUpdates no SchemaAdapter:
    "Exception class EFDException with message '[FireDAC][DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint]'. Process Project1.exe (3200)".
    Tem alguma ideia do que pode ser?

    • @reinaldopsilveira
      @reinaldopsilveira 7 ปีที่แล้ว +4

      Consegui resolver da seguinte forma: no evento BeforeInsert da query detalhe, declarei o seguinte:
      if FDQuery1.State = dsInsert then
      begin
      FDQuery1.Post; //query master
      FDQuery1.Edit;
      end;
      O ClientDataSet faz isso de forma implícita, pelo visto o FireDAC não é tão "esperto" assim...

  • @hugodev
    @hugodev 11 ปีที่แล้ว

    Não Esta funcionando com FireBird!
    Fiz vários testes e somente com SqlServer deu certo !

  • @Aleatory87
    @Aleatory87 11 ปีที่แล้ว

    Bom video.

  • @MotaDev
    @MotaDev 7 ปีที่แล้ว

    Obrigado Alan, mas, o que acontece num cenário em que vc tem validações no BeforePost do Mestre? Alguns usam [Post + Edit] mas, isso faz a validação ser quebrada, pois o registro ainda não está devidamente validado para ser postado. Digo isso por causa dum cenário meu em que os dados devem ser validados entes ao postar e dependem dos dados do Detalhe (que ainda não foram inseridos)

    • @AlanGlei
      @AlanGlei  7 ปีที่แล้ว

      Então sua validação deve ficar no post do detalhe já que você necessita dos dados...

    • @MotaDev
      @MotaDev 7 ปีที่แล้ว

      Mas, nessa abordagem, se não for inserido nenhum detalhe, nenhuma validação será disparada

    • @AlanGlei
      @AlanGlei  7 ปีที่แล้ว

      Então valide no BeforeApplyUpdates...

    • @MotaDev
      @MotaDev 7 ปีที่แล้ว

      Então, se eu tive um cenário com três níveis, o segundo nível teria que se comportar da mesma maneira que o mestre (Post+ Edit), então, se eu quiser validar os dados do segundo nível, segue o mesmo problema. No meu modesto entendimento, o Post é a conformação de um registro (ou seja: os dados estão todos OK). Me parece estranho fazer esse tipo de contorno por uma limitação técnica do componente. Deveria, ao meu ver, haver a possibilidade de postar qualquer registro a qualquer momento e o 'adapter' ou a 'connection' gerenciar melhor as dependências ao mandar para o banco. Validar dados em BeforePost é tão natural como respirar...rsrs.

    • @AlanGlei
      @AlanGlei  7 ปีที่แล้ว

      Se você possui um cadastro com vários níveis, o ideal é trabalhar com o cache update ativo e dentro de uma transação para garantir a atomicidade do cadastro. Com esse modelo, você pode colocar seu método de validação no onBeforeApplyUpdates do FDSchemeAdapter (que é o momento antes de enviar o dados para o banco de dados)

  • @filipedossantos2179
    @filipedossantos2179 7 ปีที่แล้ว

    Olá, Alan! No meu projeto ao executar DataSet_Detalhe.Post dá erro de chave estrangeira nula. No caso, a chave estrangeira que se refere à tabela pai. A navegação está correta, o que confirma que está configurado como você mostrou. Sabe o que posso estar fazendo de errado?

    • @filipedossantos2179
      @filipedossantos2179 7 ปีที่แล้ว

      A coluna da Chave estrangeira está marcada para NOT NULL. Eu acabei de alterar para permitir valor nulo, apenas para testar. Então retornou erro referente ao valor negativo: "Cannot process - no parent row. Constraint [ForeignKeyConstraint]"

    • @filipedossantos2179
      @filipedossantos2179 7 ปีที่แล้ว

      Tens alguma luz pra mim?

    • @filipedossantos2179
      @filipedossantos2179 7 ปีที่แล้ว

      Resolvido isso, Alan! Valeu

    • @felipemachado9363
      @felipemachado9363 7 ปีที่แล้ว

      Olá Filipe, estou com o mesmo problema, resolveu como?

    • @filipedossantos2179
      @filipedossantos2179 7 ปีที่แล้ว

      Oi Felipe! Tudo bem? Cara, eu não me recordo perfeitamente, mas se não me engano eu havia criado as tabelas de forma errada. Quando o relacionamento era de 1x1, eu tinha o hábito de criar a chave estrangeira na tabela pai, fazendo referência para a tabela detalhe, pois desta forma eu garantia que só poderia haver 1 detalhe. Porém, Alan me explicou por e-mail que eu deveria criar a chave estrangeira na tabela detalhe, referenciando a tabela pai, do mesmo modo que em um relacionamento 1xN, mas poderia criar uma chave primária para a mesma coluna de chave estrangeira, deste modo não permitindo valores repetidos, fazendo com que na prática a relação seja de 1x1.
      Se isso não resolver, mande-me um e-mail detalhando melhor suas configurações e eu tentarei te ajudar. Um abraço, amigo!

  • @jesuelkler
    @jesuelkler 7 ปีที่แล้ว

    Alan, tentei reproduzir esse processo dentro de uma transação. Com TDBEdits e não está funcionando. O que seria?
    Banco: Firebird 2.5

    • @AlanGlei
      @AlanGlei  7 ปีที่แล้ว

      Alguma mensagem de erro?

    • @jesuelkler
      @jesuelkler 7 ปีที่แล้ว

      Esse é o código valendo. Que não quer funcionar. Sempre cai no Exception e o que você ensina eu reproduzi e não deu erro algum.
      try
      F_dmConexao.FDConn.StartTransaction; {inicia a transação}
      F_dmHospedes.QRY_entraHospede.Edit;
      F_dmHospedes.QRY_entraHospedeENT_FILIAL.AsString := '1'; {pegar a filial logada}
      F_dmHospedes.QRY_entraHospedeENT_STATUS.AsString := 'OCUPADO'; {NA TABELA ENTRA HOSPDE}
      F_dmHospedes.FDSchemaAdapterEntraHospede.ApplyUpdates(0); {dá o ApplyUpdates nas duas tabelas}
      {Update atualiza a tabela x}
      {Update atualiza a tabela y}
      F_dmConexao.FDConn.Commit; {se tudo der certo, commita a transação}
      OrdenaLista; {atualiza a lista}
      {Mensagem de sucesso!}
      except on e:Exception do
      begin
      F_dmConexao.FDConn.Rollback;
      {Mensagem de Erro}
      exit;
      end;
      end;

  • @regismatos
    @regismatos 8 ปีที่แล้ว

    bacana

  • @Alice-v7t3w
    @Alice-v7t3w 4 ปีที่แล้ว

    Usei FDSchemaAdapter1.CommitUpdates; e deu certo ou fazer isso não é correto