Conexao exclusiva com o banco
30/11/2004
0
Wilson Luz
Posts
01/12/2004
Vinicius2k
Como exatamente vc faz esta criação? Através da aplicação ou de uma ferramenta externa?
Vc, *provavelmente*, está recebendo esta mensagem porque existe alguma transação pendente envolvendo o objeto que vc pretende alterar...
T+
01/12/2004
Wilson Luz
tipo coisas assim
REATE TABLE AUX_00(
AUX_00_CODIGO INTEGER NOT NULL,
AUX_00_CLIE_EMP INTEGER,
AUX_00_CLIENTE INTEGER ,
AUX_00_NOME VARCHAR(10));
COMMIT WORK;
alter table AUX_00
add constraint PK_AUX_000
primary key (AUX_00_CODIGO) ;
COMMIT WORK;
ALTER TABLE AUX_00
ADD CONSTRAINT AUX_00_CLI_FK FOREIGN KEY (AUX_00_CLIE_EMP,AUX_00_CLIENTE) REFERENCES CLIENTE (CLI_EMP_ID, CLI_ID) ON DELETE CASCADE;
COMMIT WORK;
funciona bem o unico poblema se ma criacao da chave estrangeira quando a tabela CLIENTE esta foi aberta em qualquer transacao... mesmo de select .... eu uso o ibexpert ... acontece que mesmo fechando o ibexpert fechando a aplicacao... o erro de object in use permanece ...ao que parece o banco mantem um registro que a tabela esta em uso mais aparentemente isto nao e muito eficiente ja que mesmo fechando a aplicacao que fez uso da tabela este estatus nao e atualizado.. unica solucao que tenho encontrado e dar um shutdown no banco... o servidor e local em minha maquina e ....dai ao executar novamente funciona bem ... vi uma materia uma vez que explicava como desconectar uma tabela especifica usando comandos de baixo nivel da propia gds32 .. mas nao sei mais onde esta este material.... pois pelo que eu entendi isto seria o ideal pra mim por que na minha aplicacao eu sempre estou criando estas tabelas temporarias e sempre com realacionamento na tabela de CLIENTES dai eu simplesmente forcaria um shutdown
01/12/2004
Wilson Luz
01/12/2004
Vinicius2k
O ideal nestes casos, é que vc utilizasse um componente de execução de scripts, como o IBScript (Paleta IBX).
Não garanto que vá funcionar, mas tente fazer o seguinte...
Uma instrução por vez na SQLQuery abrindo e commitando a transação em cada uma delas...
Ex:
1. abre transação -> cria tabela -> commit transação
2. abre transação -> cria a PK -> commit transação
e etc...
No meu ponto de vista é a própria aplicação que está ´travando´ a tabela porque CREATE e ALTER estão dentro da mesma transação... acho que vale a pena testar...
T+
01/12/2004
Weber
02/12/2004
Wilson Luz
Clique aqui para fazer login e interagir na Comunidade :)