GARANTIR DESCONTO

Fórum Tem como criar relacionamento com o BD em uso??? #45352

06/07/2004

0

Oi,

Sei que da para criar / alterar e até ecluir campos com banco de dados em uso.

Porem não estou conseguindo criar um relacionamento com o banco de dados em uso.
Tentei:
ALTER TABLE ´PROD_DESC1´ ADD FOREIGN KEY (´CODPROD´) REFERENCES ´PRODUTOS´ (´CODIGO´) ON UPDATE CASCADE ON DELETE CASCADE;

E aparece:
unsuccessful metadata update.
object PRODUTOS is in use .

Tem como criar este relacionamento, sem que meus clientes tenham que fechar o sistema em todos os micros?


Larry

Larry

Responder

Posts

07/07/2004

Maicongabriel

Sei que da para criar / alterar e até ecluir campos com banco de dados em uso.


Reveja seus conceitos amigo!
Nunca trabalhe sobre uma base de ´produção´!
Efetue uma cópia desta base e faça seus testes/alterações sobre ela e não sobre o banco de dados que o seus usuarios estao utilizando; Não é correto, não é seguro. :roll:


Responder

Gostei + 0

07/07/2004

Rodolpho123

Desse jeito vc vai corromper o seu banco fácil, fácil...


Responder

Gostei + 0

07/07/2004

Larry

[quote:5148e57a05=´Larry´]Sei que da para criar / alterar e até ecluir campos com banco de dados em uso.


Reveja seus conceitos amigo!
Nunca trabalhe sobre uma base de ´produção´!
Efetue uma cópia desta base e faça seus testes/alterações sobre ela e não sobre o banco de dados que o seus usuarios estao utilizando; Não é correto, não é seguro. :roll:[/quote:5148e57a05]

Valeu pela dica,

Quando a exlcuir um campo é claro que não irei fazer com o sistema em uso, mas quando a adicionar um campo novo é muito comum e alterar o tamanho de um já existente é meio raro.
Não é aconselhavel faze-lo com o sistema em uso? pode haver corrompimento?


Responder

Gostei + 0

07/07/2004

Larry

Desse jeito vc vai corromper o seu banco fácil, fácil...


Mesmo incluir campo novo (oque é muito comum) no sistema em uso pode corromper o banco de dados?


Responder

Gostei + 0

09/07/2004

Bon Jovi

Reveja seus conceitos amigo! Nunca trabalhe sobre uma base de ´produção´! Efetue uma cópia desta base e faça seus testes/alterações sobre ela e não sobre o banco de dados que o seus usuarios estao utilizando; Não é correto, não é seguro. :roll:


Nao concordo... Ruim é o SGDB que está usando.


Responder

Gostei + 0

09/07/2004

Bon Jovi

Desse jeito vc vai corromper o seu banco fácil, fácil...


´Corromper fácil´ é da natureza deste SGDB, infelizmente.


Responder

Gostei + 0

09/07/2004

Maicongabriel

[quote:e4c641aeb3=´Bon Jovi´]
Reveja seus conceitos amigo! Nunca trabalhe sobre uma base de ´produção´! Efetue uma cópia desta base e faça seus testes/alterações sobre ela e não sobre o banco de dados que o seus usuarios estao utilizando; Não é correto, não é seguro. :roll:


Nao concordo... Ruim é o SGDB que está usando.[/quote:e4c641aeb3]

Que mania cara :evil:
Se você não gosta de IB/FB, porque frequênta o forum :?


Responder

Gostei + 0

09/07/2004

Afarias

[b:8f9be4aecd]Bon Jovi[/b:8f9be4aecd], é incrível como tem essa capacidade de produzir esses comentários infrutíferos e inúteis para este fórum e seus frequentadores.

Tais comentários revelam apenas sua total falta de conhecimento do Interbase ou Firebird ou qualquer outro SGBD-R.

Se vc quer aprender um pouco sobre essas ferramentas (como todos nós q frequentamos este fórum), acompanhe o fórum de mente aberta e leia mais para ter embasamento no que fala -- ninguem gosta de comentários vazios e sem comprometimento.

Todos aqui estão interessados em aprender e tirar o máximos destes [b:8f9be4aecd]super[/b:8f9be4aecd] bancos de dados -- grandes empresas a décadas o utilizam e não é possível q vc do alto de seu leigo entender queira desfazer isso.

Toda ferramenta tem seus prós e contras, estamos aqui tentando tirar o máximo dos ´prós´ do IB e/ou FB e contornar da melhor forma seus ´contras´ -- quem frequenta este grupo está buscando SOLUÇÃO -- solução com IB ou FB -- se vc não pode dar isso, ninguem vai ficar chateado por vc se abster.


Obrigado pela sua compreensão,

T+


Responder

Gostei + 0

09/07/2004

Rodolpho123

[b:e77b4c4500]Bon Jovi[/b:e77b4c4500], é incrível como tem essa capacidade de produzir esses comentários infrutíferos e inúteis para este fórum e seus frequentadores. Tais comentários revelam apenas sua total falta de conhecimento do Interbase ou Firebird ou qualquer outro SGBD-R. Se vc quer aprender um pouco sobre essas ferramentas (como todos nós q frequentamos este fórum), acompanhe o fórum de mente aberta e leia mais para ter embasamento no que fala -- ninguem gosta de comentários vazios e sem comprometimento. Todos aqui estão interessados em aprender e tirar o máximos destes [b:e77b4c4500]super[/b:e77b4c4500] bancos de dados -- grandes empresas a décadas o utilizam e não é possível q vc do alto de seu leigo entender queira desfazer isso. Toda ferramenta tem seus prós e contras, estamos aqui tentando tirar o máximo dos ´prós´ do IB e/ou FB e contornar da melhor forma seus ´contras´ -- quem frequenta este grupo está buscando SOLUÇÃO -- solução com IB ou FB -- se vc não pode dar isso, ninguem vai ficar chateado por vc se abster. Obrigado pela sua compreensão, T+



Disse tudo, Afarias. Esperamos que o nosso ´amigo´ adote esta mensagem...

Sem mais....


Responder

Gostei + 0

09/07/2004

Rodolpho123

Mesmo incluir campo novo (oque é muito comum) no sistema em uso pode corromper o banco de dados?


Tudo é possivél. Mas eu aconselho assim: Quando for fazer qualquer modificação na estrutura do BD, 1º faça um BackUp e 2º proceder com a sua modificação. Desta forma, as chances de uma possível corrupção de BD é muito rara.


Responder

Gostei + 0

28/03/2008

Vitor Alcantara

Saudações a todos.

Aproveitando o tópico ja aberto, gostaria de expressar minha dúvida.
Vez por outra tenho que fazer alterações em um BD (Firebird 1.5) de um sistema meu, dai desenvolvi um sisteminha de atualizações bem simples.

Tenho uma tabela no meu sistema com os seguintes campos.

Tab_Versao
(
 Tabela = VarChar(50),
 Versao = Integer,
 Descricao = VarChar(255),
 Tipo = Char(1)
)


Nessa tebela eu guarda a versão atual de cada objeto (Tabelas, Procedures e Triggers) no meu banco de dados.

E tenho em meu executavel vários scripts de atualizações (IbScript) com a seguinte nomenclatura:NomeObjeto_Versao.
Ex: PRO_1 PRO_2; PRO_3 onde cada um é um script referente as atualizações feitas em cada versão.


Dai em meu sistema tenho um mecanismo que faz a varredura da versão que ta gravada no executavel com a versão do BD.

Exemplo no meu executavel tenho a versão 3 de uma tabela e na tab_versao tem a versão 1,

Então eu executo na seguinte ordem PRO_2 e depois PRO_3.
Estava tudo correndo bem até o dia em que tive de fazer a seguinte alteração em uma tabela do meu BD.

Corpo do Script.:

alter table FIN_CAIXA
add constraint FK_FIN_CAIXA_FIN_CONTA1
foreign key (FINH_CODCONTA1,FINH_CODEMP)
references FIN_CONTA(FINC_CODIGO,FINC_CODEMP);

alter table FIN_CAIXA
add constraint FK_FIN_CAIXA_FIN_CONTA2
foreign key (FINH_CODCONTA2,FINH_CODEMP)
references FIN_CONTA(FINC_CODIGO,FINC_CODEMP);


alter table FIN_CAIXA
add constraint FK_FIN_CAIXA_FIN_CONTA3
foreign key (FINH_CODCONTA3,FINH_CODEMP)
references FIN_CONTA(FINC_CODIGO,FINC_CODEMP);


UPDATE TAB_VERSAO
SET VERSAO =3
WHERE TABELA = ´FIN_CAIXA´;


Isso é feito da seguinte forma.(no Delphi)


1:Dou um StarTransaction ;
2:verifico e fasso as alterações nescessárias.
3:Caso de sucesso dou um COMMIT em caso de erro dou um ROLLBACK.

Só que nessa atualização que mostrei acima no script ocorre o seguinte erro
[b:eb11373e13]´Project DSEstoque.exe raised exception class EIBInterBaseError with message ´unsuccessful metadata update
object FIN_CONTA is in use ´.´[/b:eb11373e13]

Li em outros posts desse forum que se eu colocasse COMMIT WORk; após cada alteração feita no BD daria certa, dai fiz isso em cada final de alteração, mais o erro persiste.

Pessos aos amigos mais experientes que se puderme me dar uma luz de como corrigir isso, pois não seria legal ter que ir em cada cliente e executar o comando via IbExpert (que funciona perfeitamente o script).

PS: Estou utilizando Delphi 2007 e componentes de conexão da palheta Interbase.

olha o script das duas tabelas envolvidas.

CREATE GENERATOR GEN_FIN_CAIXA;

CREATE TABLE FIN_CAIXA (
    FINH_CODIGO     INTEGER NOT NULL,
    FINH_CODEMP     INTEGER NOT NULL,
    FINH_CODCONTA1  INTEGER NOT NULL,
    FINH_CODCONTA2  INTEGER NOT NULL,
    FINH_CODCONTA3  INTEGER NOT NULL,
    FINH_DATA       DATE DEFAULT CURRENT_DATE NOT NULL,
    FINH_HORA       TIME DEFAULT CURRENT_TIME NOT NULL,
    FINH_HISTORICO  VARCHAR(255) NOT NULL,
    FINH_NUMERODOC  VARCHAR(20) NOT NULL,
    FINH_CODLANC    INTEGER,
    FINH_LANCDUPLO  CAMPO_LOGICO /* CAMPO_LOGICO = CHAR(1) DEFAULT ´N´ NOT NULL CHECK (VALUE IN (´S´,´N´)) */,
    FINH_CREDITO    DECIMAL(10,2) DEFAULT 0 NOT NULL,
    FINH_DEBITO     DECIMAL(10,2) DEFAULT 0 NOT NULL,
    FINH_SALDO      COMPUTED BY (FINH_CREDITO - FINH_DEBITO)
);




/* Check constraints definition */

ALTER TABLE FIN_CAIXA ADD CONSTRAINT CK_FIN_CAIXA_CREDITO CHECK(FINH_CREDITO > 0);
ALTER TABLE FIN_CAIXA ADD CONSTRAINT CK_FIN_CAIXA_DEBITO CHECK(FINH_DEBITO > 0);


/******************************************************************************/
/*                                Primary Keys                                */
/******************************************************************************/

ALTER TABLE FIN_CAIXA ADD CONSTRAINT PK_FIN_CAIXA PRIMARY KEY (FINH_CODIGO);


/******************************************************************************/
/*                                  Triggers                                  */
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/*                            Triggers for tables                             */
/******************************************************************************/



/* Trigger: TRI_CHAVE_FIN_CAIXA */
CREATE OR ALTER TRIGGER TRI_CHAVE_FIN_CAIXA FOR FIN_CAIXA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.FINH_CODIGO IS NULL) THEN
    NEW.FINH_CODIGO = GEN_ID(GEN_FIN_CAIXA,1);
END
^


SET TERM ; ^



/******************************************************************************/
/*                                 Privileges                                 */
/******************************************************************************/


/******************************************************************************/
/*                                   Tables                                   */
/******************************************************************************/



CREATE TABLE FIN_CONTA (
    FINC_CODIGO   INTEGER NOT NULL,
    FINC_CODEMP   INTEGER NOT NULL,
    FINC_NOME     VARCHAR(50) NOT NULL,
    FINC_NIVEL    INTEGER NOT NULL,
    FINC_CODMAE   INTEGER NOT NULL,
    FINC_CODRED   INTEGER,
    FINC_CREDITO  CAMPO_LOGICO /* CAMPO_LOGICO = CHAR(1) DEFAULT ´N´ NOT NULL CHECK (VALUE IN (´S´,´N´)) */
);




/******************************************************************************/
/*                             Unique Constraints                             */
/******************************************************************************/

ALTER TABLE FIN_CONTA ADD CONSTRAINT UN_FIN_CONTA_NOME UNIQUE (FINC_CODEMP, FINC_NIVEL, FINC_NOME);


/******************************************************************************/
/*                                Primary Keys                                */
/******************************************************************************/

ALTER TABLE FIN_CONTA ADD CONSTRAINT PK_FIN_CONTA PRIMARY KEY (FINC_CODIGO, FINC_CODEMP);


/******************************************************************************/
/*                                 Privileges                                 */
/******************************************************************************/


Agradeço desde já
Atenciosamente Vitor Araújo Alcãntara.


Responder

Gostei + 0

29/03/2008

Vitor Alcantara

Pessoal vi que esse erro não ocorre no firebird 2.0 , só que o chato e que ja tenho o sistema rodando em alguns clientes, dai terei que atualizar nesses clientes.
Não sei se isso seria apropriado pois essa versão (me corrijam se estiver enganado) à 2.0 é uma versão de teste que não é recomendado ainda pra produção.


Responder

Gostei + 0

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

Aceitar