 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
rique_neves Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012 Mensagens: 873
|
Enviada: Seg Fev 27, 2017 4:55 pm Assunto: inicialização do sistema! Splash |
|
|
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 |
|
 |
rique_neves Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012 Mensagens: 873
|
Enviada: Qua Mar 01, 2017 5:09 pm Assunto: Re: inicialização do sistema! Splash |
|
|
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 |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Ter Mar 07, 2017 11:50 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|