PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum DBExpress ClientDataSet... Qual a melhor abordagem? #367649

09/01/2009

0

Bem, eu gostaria de saber de vcs, quais as melhores técnicas para armazenar um mestre/detalhe. No caso que mostro abaixo nao utilizo sp no banco para cadastrar, devido a tabela clientes ter mais de 100 campos, isto tornaria o trabalho bem lento, claro que no caso de escrita de código, consumiria somente da tabela clientes mais de 100 linhas de código com parametros desta.

Tb gostaria de saber se esta lógica está com o seu uso correto e se puderem explicitar outras técnicas mais apropriadas...


como ex usuário do paradox, acredito que velhos vícios ficaram, leva-se tempo para acostumar ao modo diferente de fazer as coisas no firebird...

Quando exportei o antigo banco, tive que reformular o banco de dados para o conceito do firebird ao passo que fui aprendendo, mas ainda estou cainhando nesta estrada de client/server... apenas os primeiros passos...


BANCO: firebird + driver uib 1.5, servidor 2.1


     With DMCS do
     begin
          if cdsClientes.State in [dsInsert, dsEdit] then
          begin
               cdsClientes.FieldByName(´DATA_ALT´).AsDateTime := Date;
               try
                  cdsClientes.Post;
                  StartTransactionID;
                  // Gravação de clientes
                  if cdsClientes.ApplyUpdates(0) = 0 then
                  begin
                       // Gravação dos Protestos
                       if not cdsProtestos.IsEmpty then
                       begin
                            if not cdsProtestos.Active then
                               cdsProtestos.Open;
                            cdsProtestos.DisableControls;
                            cdsProtestos.First;
                            try
                               while not cdsProtestos.Eof do
                               begin
                                    cdsProtestos.Edit;
                                    cdsProtestosID_CLI.Value := cdsClientesID_CLI.Value;
                                    cdsProtestos.Post;
                                    cdsProtestos.Next;
                               end;
                            finally
                               cdsProtestos.EnableControls;
                            end;
                       // FIM PROTESTOS
                       end;


                       // Grava as referências comerciais
                       if not cdsRefCom.IsEmpty then
                       begin
                            if not cdsRefCom.Active then
                               cdsRefCom.Open;
                            cdsRefCom.DisableControls;
                            cdsRefCom.First;
                            try
                               while not cdsRefCom.Eof do
                               begin
                                    cdsRefCom.Edit;
                                    cdsRefComID_CLI.Value := cdsClientesID_CLI.Value;
                                    cdsRefCom.Post;
                                    cdsRefCom.Next;
                               end;
                            finally
                               cdsRefCom.EnableControls;
                            end;
                       //FIM DE REFERÊNCIAS COMERICIAIS
                       end;



                       // Grava referências Bancárias
                       if not cdsRefBank.IsEmpty then
                       begin
                            if not cdsRefBank.Active then
                               cdsRefBank.Open;
                               cdsRefBank.DisableControls;
                               cdsRefBank.First;
                               try
                                  while not cdsRefBank.Eof do
                                  begin
                                       cdsRefBank.Edit;
                                       cdsRefBankID_CLI.Value := cdsClientesID_CLI.Value;
                                       cdsRefBank.Post;
                                       cdsRefBank.Next;
                                  end;
                               finally
                                  cdsRefBank.EnableControls;
                               end;
                       // FIM REF. BANCÁRIAS
                       end;



                       // Grava Bens Patrimoniais
                       if not cdsBensPatrimoniais.IsEmpty then
                       begin
                            if not cdsBensPatrimoniais.Active then
                               cdsBensPatrimoniais.Open;
                               cdsBensPatrimoniais.DisableControls;
                               cdsBensPatrimoniais.First;
                               try
                                  while not cdsBensPatrimoniais.Eof do
                                  begin
                                       cdsBensPatrimoniais.Edit;
                                       cdsBensPatrimoniaisID_CLI.Value := cdsClientesID_CLI.Value;
                                       cdsBensPatrimoniais.Post;
                                       cdsBensPatrimoniais.Next;
                                  end;
                               finally
                                  cdsBensPatrimoniais.EnableControls;
                               end;
                       // FIM BENS PATRIMÔNIO
                       end;



                       // Grava todos os detalhes das tabelas
                       // filhas
                       if cdsProtestos.ApplyUpdates(0) = 0 then
                          if cdsRefCom.ApplyUpdates(0) = 0 then
                             if cdsRefBank.ApplyUpdates(0) = 0 then
                                if cdsBensPatrimoniais.ApplyUpdates(0) = 0 then
                                begin
                                     if Conexao.InTransaction then
                                        Conexao.Commit(Transaction);
                                end
                                else
                                begin
                                    Conexao.Rollback(Transaction);
                                    Application.MessageBox(PChar(´Não foi possível conluir a transação, devido a um problema ocorrido.´), ´AVISO DOS SISTEMA - Inclusão/Iserção´, MB_ICONERROR+MB_Ok);
                                end;
                  // Aqui desfaz a transação se ocorrer alguma coisa errada com
                  // a tabela clientes
                  end
                  else
                     Conexao.Rollback(Transaction);
               except
                  on E: Exception do
                  begin
                     Application.MessageBox(PChar(´Não foi possível conluir a transação.´
                                                  +#1310+´Mensagem Original: ´+E.Message),
                                                  ´AVISO DOS SISTEMA - Inclusão/Iserção´,
                                                  MB_ICONERROR+MB_Ok);
                     Conexao.Rollback(Transaction);
                  end;
               end;
          //FIM EDIT/INSERT/CLIENTES
          end;





desde já agradeço...




bye


Johnny-walker

Johnny-walker

Responder

Posts

17/01/2009

Johnny-walker

Ninguém???


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar