Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Desativar Constraints (FK) Firebird 2.5.


pimpocvl007

Question

Boa noite,

Até pouco tempo atrás o IBSQL1, com o comando:

IBSQL1.SQL.Clear;

IBSQL1.SQL.Add('delete from TABELA1');

IBSQL1.ExecQuery;

IBSQL1.Transaction.Commit;

IBSQL1.Transaction.Active := True;

...dava conta do recado, agora preciso ajeitar o código para desativar as Contraints (Foreign Keys) para apagar todos os registros de todas as tabelas, tendo em vista que são varios FK's, existe algum comando que desativa (desabilita) tudo de uma unica vez?

Att.

Olimpio

Edited by pimpocvl007
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0
agora preciso ajeitar o código para desativar as Contraints (Foreign Keys) para apagar todos os registros de todas as tabelas, tendo em vista que são varios FK's, existe algum comando que desativa (desabilita) tudo de uma unica vez?

Esta é uma questão mais apropriada para a sessão de Banco de Dados do que Delphi, mas acho que posso tentar comentar algo...

Pelo pouco que mexo com o FireBird, eu sei que ainda não tem um comando para desabilitar as constraints. Voce pode ver no Firebird Bug Tracker que as solictações para este recurso ainda estão em aberto (Open -> CORE-1924 e CORE-1084).

Há a possibilidade de voce excluir a constraint, mas posteriormente terá que criá-la. Opção muito trabalhosa (tem que fazer tabela por tabela), mas possível: Firebird Alter Table Drop Constraint

Também há a possibilidade vc "varrer" as tabelas internas do banco (rdb$) e montar consultas que lhe tragam toda a informação sobre as tabelas, mas se algo mudar de uma versão do banco para outra, você pode ter problemas: Dependencias e relacionameto das tabelas nas Systems Tables (ref. DevMedia)

Considerando que você fala em zerar todas as tabelas, parece que você quer simplesmente obter um banco zerado - só com a extrutura (sem os dados). Isto você pode fazer facilmente utilizando um frot-end para o Firebird. Poderia ser o ISQL.exe (ferramenta de linha de comando instalada com o Firebird). No prompt do DOS:

isql -extract -output c:\metadata.txt c:\teste_isql.gdb -user SYSDBA -password masterkey

este metadata.txt poderia ser melhor nomeado para metadata.sql.

daí, voce pode usar esta mesma ferramenta para criar o novo banco de dados utilizando o metadata extraído.

Dê uma olhada nestes artigos:

- Entendendo as ferramentas iSql e gSec (registre-se - que vale a pena)

- ISQL - Firebird Interactive SQL Tool

Eu uso como front-end a versão free do IBExpert (download - depois de instalar você pode escolher o idioma) - muito útil e no menu de ferramentas ele tem a opção de backup e restauração. Neste caso, você faz um backup e depois, ao restaurar o backup voce usa a opção criar novo banco (obviamente com outro nome) e importa apenas o metadata do arquivo do backup anterior.

Espero que algo lhe seja útil.

Abraços

Link to comment
Share on other sites

  • 0

...supomos que tenho um banco rodando no cliente. Faço backup e recupero dados numa boa utilizando o ibexpert.

Mas, eu vou dando manutenção aqui, criando novas telas, novas tabelas, novos campos, qual e a melhor forma de atualizar isso no cliente mantendo os dados que ele possui?

Att.

Olimpio

Link to comment
Share on other sites

  • 0
...supomos que tenho um banco rodando no cliente. Faço backup e recupero dados numa boa utilizando o ibexpert.

Mas, eu vou dando manutenção aqui, criando novas telas, novas tabelas, novos campos, qual e a melhor forma de atualizar isso no cliente mantendo os dados que ele possui?

Olimpio, eu não trabalho profissionalmente com programação, então vou apenas comentar como costumo realizar este processo...

Se voce usa o IBExpert (IBE para incurtar) como eu, este processo de criação de novas tabelas e campos é feito utilizando ele inicialmente em sua base de dados fria (a de trabalho). Então, voce também já deve ter observado que, quando você aplica uma alteração para o banco, o IBE gera e lhe apresenta o script "gerador" da alteração. Este script eu copio e adiciono a um arquivo (usando o notepad mesmo) que será utilizado para ser aplicado à base quente (em produção) posteriormente. Neste arquivo eu coloco qualquer comentário necessário e os fragmentos de script (podem ser várias pequenas alterações) ficam separados em bloco.

Para aplicar as alterações eu utilizo o IBE no cliente também. Primeiramente, voce não deve ter nenhuma conexão com o banco (ou seja, nenhum usuário acessando o mesmo). Depois executo o backup e ao nome do arquivo eu acrescento a data. Feito isto, abro o arquivo com a sequência de script e aplico um bloco de cada vez (assim, se houver qualquer problema na sua execução, fica mais fácil de acompanhar no log de erros). Ao final, eu renomeio este arquivo de script, adicionando a data à ele.

Após todas as alterações aplicadas é hora de atualizar o executável que já está preparado para a "nova versão" da base, mas eu não faço a substituição do programa. Eu renomeio o existente acrescentando a data (como faço com o backup) e então copio o novo executável para o devido local.

Eu dou preferência por fazer tudo o que for possível via script SQL, mas há casos em que uma alteração pode requerer a execução de um programa de conversão (migração) de dados. Nestes casos, eu sinalizo isto no arquivo de script, de forma que eu faço uma "pausa" e executo o tal programa.

Espero que algum profissional possa lhe dar mais informações (idéias). De qualquer forma, voce deve sempre se preocupar em não "queimar" a base quente - faça sempre um backup antes! Da base de dados e do programa (executável e código fonte), pois assim, se algo der errado voce poderá voltar atrás com segurança.

Abraços

Link to comment
Share on other sites

  • 0

...obrigado por compartilhar sua experiencia, Micheus.

De inicio estava querendo fazer tudo via programa, estava sofrendo, certamente por não ter experiencia suficiente. Enfim, decidi mudar o foco das perguntas e verificar como "que os mais experientes" fazem para contornar esta situação.

Vou testar a sua metodologia!!!

Caso mais alguém queira compartilhar agradeço.

Att.

Olimpio

Link to comment
Share on other sites

  • 0
'...Feito isto, abro o arquivo com a sequência de script e aplico um bloco de cada vez'.

Onde você faz este procedimento no IBE? seria em: TOOLS / SQL Editors?

Sim.

Assim como no Executor de Scripts (ao carregar todo o arquivo), quando voce marca/seleciona um bloco, apenas ele é executado quando você aciona o "Play" [>].

o IBE gera e lhe apresenta o script "gerador" da alteração.

onde? na aba DLL?

Corrigindo... DDL (Data Description Language). Nesta guia você tem o script para construção de toda a tabela, procedure, trigger,...

Quando você faz uma alteração, voce não vai aplicar o script na guia DDL porque certamente obterá erro, já que o referido "elemento" já existe no seu banco de dados.

Quando você conclui uma alteração e usa a opção Compilar (o raio amarelo) uma janela de validação é presentada lhe informando se há algum erro ou se está tudo Ok. Se voce observar direito, há um botão Copy Script que é o que eu utilizo antes de fechá-la.

É uma tela como esta, que neste caso está apresentando uma mensagem de erro, logo não adiantaria usar a função:

dmiles565.gif

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...