Testar se Campo,Tabela,Generator e etc existem.

Firebird

16/01/2004

Galera,

Existe uma unit no meu programa que atualiza a base quando necessário, mas olha que coisa de índio.
A pessoa que programou fez assim:

procedure TfrmAtualizaBase.Atu3240;
begin
with DmDados.QryGenerica do
begin
Close;
Sql.Clear;
Sql.Add(´ALTER TABLE BANCO ´);
Sql.Add(´ ADD CODINSTR1 VARCHAR(2),´);
Sql.Add(´ ADD CODINSTR2 VARCHAR(2)´);
[b:445863b7db] Try
ExecSql;
Except
end;[/b:445863b7db] Close;
Sql.Clear;
end;
end;

Notem o Try..Except..End;

Isso é feito porque se os campos CODINTRS1 E CODINSTR2 já existirem um erro será gerado, mas como
o Except está vazio não é mostrado o erro.

Bom, eu quero fazer diferente, aliás o correto. Algo como

Se CampoX não existir então
Cria;

Se TabelaX não existir então
Cria;

Se GeneratorX não existir então
Cria;

etc.

Existe isso no IB ???

Meu IB é o 6.0

Obrigado.


Adriano Santos

Adriano Santos

Curtidas 0

Respostas

Midas

Midas

16/01/2004

select rdb$field_name from rdb$relation_fields
where rdb$relation_name= (nomedocampo)


GOSTEI 0
Midas

Midas

16/01/2004

completando
tabelas
select rdb$relation_name from rdb$relations where rdb$system_flag= 0
and rdb$relation_name = nomedatabela

generators
select rdb$generator_name from rdb$generatorS
where rdb$generator_name = nomedogenerator

obs. lembre-se que tem estar em maiusculo o nomes.


GOSTEI 0
Adriano Santos

Adriano Santos

16/01/2004

Cara com tabelas eu consegui fazer e entender, mas com campos e generators nao deu certo o teste. Olha.

SELECT RDB$GENERATOR_NAME FROM RDE$GENERATORS
WHERE RDB$GENERATOR_NAME FROM ´PARCE_ALUNOS_GEN´


[b:534aee5590]erro[/b:534aee5590]


SELECT RDB$GENERATOR_NAME FROM RDE$GENERATORS
WHERE RDB$GENERATOR_NAME FROM ´PARCE_ALUNOS_GEN´


SELECT RDB$FIELD_NAME AS EXISTE FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME = (BOLETO)

/* Tenho o campo boleto nas tabelas Parce_Alunos e Banco. Como que ele sabe que o campo que eu procuro é da tabela Parce_Alunos ? */

[b:534aee5590]Erro[/b:534aee5590]

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
BOLETO.


colquei também entre strings o nome do campo e do generator e nao entendi pq nao funcionou.

obrigado


GOSTEI 0
Midas

Midas

16/01/2004

Irmão eu fiz aqui e deu certo !
Generators.....
select rdb$generator_name from rdb$generators
where rdb$generator_name = ´GE_IDCLIENTE´
ai depois vc testa ela
if not query.isempty then
showmessage(´Gerador de codigo existe!´);


GOSTEI 0
POSTAR