Testar se tabela existe dentro do FB

Firebird

25/07/2008

Preciso fazer um IF dentro de um banco FB para saber se determinada tabela existe ou não, tipo:

if Tabela Exist then
Drop Table.....

Como faço? Como é a sintaxe?
Atenção!!! Não é via Delphi, eu preciso criar uns Scripts e gosto de começar com drop e se a tabela não existir(Primeira vez) dá erro.


Paulo

Paulo

Curtidas 0

Respostas

Joaoshi

Joaoshi

25/07/2008

Colega, vê se ajuda:

[b:95b0b5980b]select rdb$relation_name from rdb$relations[/b:95b0b5980b] where rdb$relation_name = ´NomeSuaTabela´;


GOSTEI 0
Paulo

Paulo

25/07/2008

JOAO, EU DOU UM IF EXISTS(SELECT.....) = 0 THEN DROP...? OU COMO FAÇO?


GOSTEI 0
Joaoshi

Joaoshi

25/07/2008

Paulo, pelo que entendi seria pelo IF EXISTS.


GOSTEI 0
Paulo

Paulo

25/07/2008

Não funcionou. Da erro no if:

IF EXISTS(SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WRDB$RELATION_NAME = ´VENDA_ITENS´ THEN DROP TABLE VENDA_ITENS;



GOSTEI 0
Joaoshi

Joaoshi

25/07/2008

Tente com este código:

IF EXISTS(SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME = ´VENDA_ITENS´) THEN DROP TABLE VENDA_ITENS;



GOSTEI 0
Paulo

Paulo

25/07/2008

É o mesmo código que o meu. Continua dando erro.


GOSTEI 0
Joaoshi

Joaoshi

25/07/2008

No seu código não estava escrito corretamente o WHERE e faltava fechar o parentesis após ´VENDAS_ITENS´.

Espero ter ajudado.


GOSTEI 0
Martins

Martins

25/07/2008

Não testei as dicas do senhores, mas vejam se a dica do sr. Vampas ajuda vcs.

Procedure TForm1.BitBtn1Click(Sender: TObject);
var L:TStringList;
begin
{A classe TStringList é utilizada para armazenar e manipular
uma lista de strings. Através do método Add da classe é possível
inserir uma nova string a lista}

//criando Stringlist na memória
L := TStringList.Create;
//pega o nome da tabela
SQLConnection1.GetTableNames(L);
//pega a posição do tbteste(começa no 0)
if L.IndexOf(´tbteste´) >= 0 then
begin
Showmessage(´Esta tabela já existe no BD!´);
Abort
end
else
begin
SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(´create table tbteste(´);
SQLQuery1.Sql.Add(´cod_teste integer not null primary key, ´);
SQLQuery1.Sql.Add(´nome_teste varchar(40))´);
SQLQuery1.ExecSQL;
L.Free;
ShowMessage(´Tabela Criada com sucesso!´);
end;
end;


Por esse código é possível ter uma idéia, mas assim q o tempo me permitir irei olhar os códigos postados pelos senhores.

Boa sorte e bons códigos.


GOSTEI 0
Martins

Martins

25/07/2008

Qual o erro q dá nesse código? Vc está usando IBExpert?

IF EXISTS(SELECT RDB$RELATION_NAME FROM RDB$RELATIONS
WHERE (RDB$RELATION_NAME = ´VENDA_ITENS´) and
(RDB$VIEW_BLR is NULL)) THEN

DROP TABLE VENDA_ITENS;



GOSTEI 0
Pestana_

Pestana_

25/07/2008

tente assim:

IF (EXISTS(SELECT RDB$RELATION_NAME
           FROM RDB$RELATIONS
           WHERE (RDB$RELATION_NAME = ´VENDA_ITENS´)
           AND   (RDB$VIEW_BLR IS NULL))) THEN
  EXECUTE STATEMENT ´DROP TABLE VENDA_ITENS´;


flw.


GOSTEI 0
Pestana_

Pestana_

25/07/2008

estou supondo que você esteja utilizando SP!


flw.


GOSTEI 0
POSTAR