[firebase-br] RES: Criar/Consultar tabela dentro de uma transação

Carlos H. Cantu listas em warmboot.com.br
Segunda Setembro 8 11:41:16 -03 2025


O problema é que os objetos que vc cria via DDL só são efetivamente "criados" 
quando você commita a transação. Como o autocommit está desligado e vc não deu um 
commit explicito, o select ainda não vai "ver" a tabela.

Segundo a documentação do FB:

"Chapter 5. Data Definition (DDL) Statements DDL is the data definition language
subset of Firebird’s SQL language. DDL statements are used to create, modify and
delete database objects that have been created by users. When a DDL statement is
committed, the metadata for the object are created, changed or deleted."


[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 5 - www.firebase.com.br/guiafb5.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

hgc> Bom dia, Carlos!

hgc> Tudo bem?

hgc> Na mensagem inicial preferi não citar o cenário (Firebird 5, Delphi 12.3,
hgc> Firedac)

hgc> FDConnection.Options.AutoCommit := False;
hgc> FDQuery.Connection := FDConnection;
hgc> if not FDQuery.Connection.InTransaction then
hgc>     FDQuery.Connection.StarTrasaction;
hgc> try
hgc>     FDQuery.Close;
hgc>     FDQuery.SQL.Text := 'Create table MINHATABELA ....';
hgc>     FDQuery.ExecSQL;

hgc>     FDQuery.close;
hgc>     FDQuery.SQL.Text := 'Select * from MINHATABELA';
hgc>     FDQuery.open;

hgc>     If FDQuery.FieldByName('coluna').value = valor then -> aqui diz que a
hgc> tabela MINHATABELA não existe
hgc>     begin
hgc>          Executa o bloco de comandos
hgc>     End; 
hgc>     FDQuery.Connection.Commit;
hgc> Except
hgc>   On e : exception do
hgc>   Begin
hgc>       FDQuery.Connection.Rollback;
hgc>       Raise exception.....
hgc>   End;
hgc> End;

hgc> [ ]'s,
hgc> Hélio Oliveira


hgc> -----Mensagem original-----
hgc> De: lista <lista-bounces em firebase.com.br> Em nome de Carlos H. Cantu via
hgc> lista
hgc> Enviada em: segunda-feira, 8 de setembro de 2025 09:03
hgc> Para: FireBase <lista em firebase.com.br>
hgc> Cc: Carlos H. Cantu <listas em warmboot.com.br>
hgc> Assunto: Re: [firebase-br] Criar/Consultar tabela dentro de uma transação

hgc> Poste a sequencia de comandos que vc está executando...

hgc> PS: Não se deve misturar comandos de DDL e DML na mesma transação.

hgc> []s
hgc> Carlos H. Cantu
hgc> eBook Guia de Migração para o FB 5 - www.firebase.com.br/guiafb5.php
hgc> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

hvl>> Boa noite, Colegas!

hvl>>  

hvl>> Tenho o seguinte cenário... preciso iniciar uma transação, logo 
hvl>> após criar uma tabela (dentro de um método qualquer) e depois 
hvl>> consultar a tabela criada anteriormente. Isto tudo dentro da mesma 
hvl>> transação (StartTransaction/commit ou rollback).

hvl>> Ao tentar fazer o descrito acima, após criar a tabela, na sequência 
hvl>> consultar a mesma dentro de outro método recebo uma exceção de que 
hvl>> a tabela não existe.

hvl>>  

hvl>> Não sei estou equivocado, mais até onde sei eu só não poderia 
hvl>> consultar os dados desta tabela caso fosse em outra transação, isto 
hvl>> até ser feito o commit da transação anterior que desta forma 
hvl>> ficaria disponível para as demais transações.

hvl>>  

hvl>> [ ]’s.

hvl>> Hélio Oliveira

hvl>> ______________________________________________
hvl>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
hvl>> Para saber como gerenciar/excluir seu cadastro na lista, use:
hvl>> http://www.firebase.com.br/fb/artigo.php?id=1107
hvl>> Para consultar mensagens antigas: 
hvl>> http://www.firebase.com.br/pesquisa_lista.html


hgc> ______________________________________________
hgc> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
hgc> saber como gerenciar/excluir seu cadastro na lista, use:
hgc> http://www.firebase.com.br/fb/artigo.php?id=1107
hgc> Para consultar mensagens antigas:
hgc> http://www.firebase.com.br/pesquisa_lista.html




Mais detalhes sobre a lista de discussão lista