ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problemas ao executar Script utilizando FDScript

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
tsarturi
Novato
Novato


Registrado: Quinta-Feira, 27 de Setembro de 2018
Mensagens: 1

MensagemEnviada: Qui Set 27, 2018 11:16 pm    Assunto: Problemas ao executar Script utilizando FDScript Responder com Citação

Olá,

Estou tendo dificuldades em utilizar o TFDScript, com Firebird. Preciso criar uma tabela e em seguida incluir alguns registros. Porém quando executo o script para a criação e os respetivos insert, me retorna um erro dizendo que a tabela não é conhecida.

O código-fonte de exemplo é este:

Código:

FDConnection1.StartTransaction;
FDScript.SQLScripts.Clear;
With FDScript.SQLScripts do
begin
   with Add do
   begin
     SQL.Add('CREATE TABLE TB_TESTEO ( ');
     SQL.Add('  ID INT PRIMARY KEY, ');
     SQL.Add('  NOME VARCHAR(255) NOT NULL ');
     SQL.Add(' ); ');
     SQL.Add('INSERT INTO TB_TESTEO (ID, NOME) VALUES (1, ''TESTE''); ');
     SQL.Add('INSERT INTO TB_TESTEO (ID, NOME) VALUES (2, ''TESTE''); ');
     SQL.Add('INSERT INTO TB_TESTEO (ID, NOME) VALUES (3, ''TESTE''); ');
   end;
end;

if FDScript.ExecuteAll then
   ShowMessage('Executado')
else
   ShowMessage('Não executado!');
FDConnection1.Rollback;


O erro que me é exibido: "SQL error code = -204 Table unknown TBTESTEO At line 1, column 13"

Se eu separar o script em dois, um para o CREATE e outro para o INSERT o erro permanece o mesmo. A única solução que encontrei é criar a tabela e realizar o COMMIT. Mas gostaria de só realizar o COMMIT se o script inteiro for executado com sucesso.

Alguém já passou por este problema?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11308

MensagemEnviada: Ter Out 02, 2018 2:48 pm    Assunto: Responder com Citação

Boa tarde,

Nunca utilizei o TFDScript mas a impressão que tive ao fazer uns testes pelo IBExpert é de que essa é uma característica do Firebird, pois ao executar um script similar ao seu percebi que estava sendo executado um Commit automático após o Create Table pois a tabela já era exibida na árvore de objetos do banco, e com isso o Insert era executado com sucesso.
Depois, quando desabilitei o Commit automático (SET AUTODDL OFF) passou a ocorrer o mesmo erro que você mencionou, então me parece (mas não é certeza) que o Firebird exige o Commit para poder utilizar a tabela.

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-apartamento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17335

MensagemEnviada: Ter Out 02, 2018 5:30 pm    Assunto: Responder com Citação

Eu uso o FDScript do Firedac assim

Olha o exemplo e veja se te ajuda
Código:
with DMConnection.FDScript1 do
    begin
      try       
        SQLScripts.Clear;
        SQLScripts.Add;
        with SQLScripts[0].SQL do
        begin
          Add(///sua instruição sql aqui);
        end;
        ValidateAll;
        ExecuteAll;
      except
        on E: Exception do
          GerarLog('C:\MeuSistema\ERRO_Script ' + TB_CADASTRO +
            '.wcerro', E.Message, E.ClassName);
      end;
    end;

_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10432
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qua Out 10, 2018 11:57 pm    Assunto: Responder com Citação

Eu não sei como você está executando, mas verifique seu código sql:


Código:
CREATE TABLE TB_TESTEO (
     ID INTEGER NOT NULL,
     NOME VARCHAR(255) NOT NULL);

commit work;

alter table TB_TESTEO
add constraint PK_TB_TESTEO
primary key (ID);

commit work;

INSERT INTO TB_TESTEO (ID, NOME) VALUES (1, 'TESTE');
INSERT INTO TB_TESTEO (ID, NOME) VALUES (2, 'TESTE');
INSERT INTO TB_TESTEO (ID, NOME) VALUES (3, 'TESTE');

commit work;




bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
guimas
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 30 de Mai de 2007
Mensagens: 329

MensagemEnviada: Qua Set 25, 2019 6:04 pm    Assunto: Responder com Citação

Funciona legal, testei aqui, mas e se der pau em uma linha ... no meu caso, teria de dar um roolback em tudo q já fez e sair ... tem como com esse objeto ??
testei isso

if ValidateAll then
ExecuteAll;

mas o ValidateAll não retornou erro sim e não parou tudo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 2896
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Set 26, 2019 10:41 am    Assunto: Responder com Citação

Não uso este componente, mas faça um teste dando um Rollback na conexão no evento OnError.

Código:
procedure TForm1.FDScript1Error(ASender: TObject; const AInitiator: IFDStanObject; var AException: Exception);
begin
  FdConnection1.Rollback;
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10432
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sex Set 27, 2019 10:43 am    Assunto: Responder com Citação

Dê uma olhada nesta instrução do firebird, talvez te ajude:


https://firebirdsql.org/refdocs/langrefupd20-execblock.html



BYE
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB