ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

inicialização do sistema! Splash

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Seg Fev 27, 2017 4:55 pm    Assunto: inicialização do sistema! Splash Responder com Citação

Pessoal gostaria de saber como voces fazem para realizar verificação no banco de dados ao iniciar o sistema.
Trabalho com Firebird, e executo os scripts de atualização manualmente, e com isso pode acontecer de por ventura passar alguma script sem rodar e pode ocorrer erro ao rodar o sistema.

Gostaria de fazer uma melhoria nisso, para que ao abrir a tela de login.. faça uma verificação se está tudo certo com os campos, e caso nao esteja que seja retornado uma mensagem informando está falando tal CAMPO em tal TABELA.

Como vcs fazem isso?Utilizo Firebird 2.5.

Procurei fazer este recurso mas nao surgiu o efeito esperado.
Código:
procedure TfrmAcesso.TsplashTimer(Sender: TObject);
var
  Qry : TIBQuery;
begin
     Try
        Qry := TIBQuery.Create(self);
        Qry.Database := BANCO_DADOS;

        gblogin.Enabled:= False;
        lblSpl.Caption :='Por favor aguarde, listando tabelas. ';
        Prog.Position :=0;
        Prog.Max := IBQListaTabelas.RecordCount;
        IBQListaTabelas.Close;
        IBQListaTabelas.Open;

        IBQListaTabelas.First;
        lblSpl.Caption :='Por favor aguarde, preparando banco de dados.';
     except
       on  E:Exception do
       begin
          Application.MessageBox(pchar('Erro ao realizar verificação no banco de dados - >> '#13+#13 + E.Message),pchar('    Mensagem'),MB_OK + MB_DEFBUTTON1);
          Abort;
       end;
     end;
        while not IBQListaTabelas.Eof do
        begin
            try
              Qry.Close;
              Qry.SQL.clear;
      // compara apenas fields da tabela informada
             // IBQAbreBanco.SQL.Add('select rdb$relation_name, rdb$field_name, rdb$field_source,');
            //  IBQAbreBanco.SQL.Add('rdb$field_position from rdb$relation_fields where rdb$relation_name =:p1');

      // ..compara fields,tamanho e tipo da tabela informada
              Qry.SQL.Add('select a.rdb$relation_name, a.rdb$field_name, a.rdb$field_source,');
              Qry.SQL.Add('a.rdb$field_position,b.rdb$field_type, b.rdb$field_length');
              Qry.SQL.Add('from rdb$relation_fields a inner join rdb$fields b on (a.rdb$field_source = a.rdb$field_name)');
              Qry.SQL.Add('where rdb$relation_name =:p1');
              Qry.ParamByName('p1').AsString := IBQListaTabelas.Fields[0].AsString;
              Qry.Open;
            except on erro : EDatabaseError do
            begin
                lblSpl.Caption :='erro na coneção, seu sistema será fechado ...';
                MessageDlg('ATENÇÃO!!! Ocorreu um erro na operação.'+#13+ 'Tabela : '+IBQListaTabelas.Fields[0].AsString +#13+'Comunique imediatamente o suporte técnico'+#13+#13''+erro.message,mtError,[mbOK],0);
                Application.Terminate;
            end;
            end;
            Prog.Position := Prog.Position + 1;
            IBQListaTabelas.Next;
        end;
        if Prog.Max = IBQListaTabelas.RecordCount then
        begin
          Tsplash.Enabled :=false;
          gblogin.Enabled:=True;
          edtlogin.SetFocus;
          lblSpl.Caption :='Procedimento realizado com sucesso';
        end;
end;

_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qua Mar 01, 2017 5:09 pm    Assunto: Re: inicialização do sistema! Splash Responder com Citação

alguém de banco de dados para me auxiliar ??
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Ter Mar 07, 2017 11:50 pm    Assunto: Responder com Citação

Fala, rique_neves!

Em um dos projetos que já trabalhei, não tínhamos apenas a versão do sistema, mas também a versão do banco de dados. Sempre que um script SQL do tipo DDL (create table, alter table, etc) era executado no banco de dados, nós alterávamos a versão dele, por exemplo, de 2.3.5 para 2.3.6.
Com essa técnica, conseguíamos identificar se algum script estava faltando, verificando a versão do banco de dados durante a inicialização do sistema.

Em outro projeto, nós tínhamos uma tabela que armazenava o nome de todos os scripts já executados no banco de dados. Sendo assim, quando o sistema inicializava, bastava executar todos os scripts no pacote de atualização que ainda não estavam cadastrados nessa tabela. A grande vantagem dessa abordagem é que não haviam riscos caso o cliente "pulasse" 2 ou 3 versões do sistema, já que todos os scripts ausentes seriam rodados no banco de dados.

Essas são duas formas de controlar a integridade da estrutura do banco de dados sem a necessidade de executar os scripts manualmente.

Abraço!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB