Erro em Form de Atualização Firebird e Delphi 10.2

19/09/2017

0

Olá amigos da DevMedia, é minha primeira pergunta no fórum, então e perdoem se eu errar algo!
Seguinte,
Tenho um form de atualização em meu sistema desenvolvido em Delphi 10.2 com banco de dados FDB "Firebird" 2.5, a rotina em si consiste em carregar um Memo com os códigos de adição "ALTER TABLE INK ADD NOME VARCHAR (30);" e a Query do formulário executar!
Essa atualização é exclusivamente para adicionar campos novos em tabelas existentes ou criar tabelas novas!

Vou postar abaixo o código completo e gostaria que alguém me desse uma luz de onde estou errando!

O Erro ocorre ao passar pela linha: "QuerUpdate.ExecSQL;"

Código:

procedure TFrmAtualizacao.BtnProsseguirClick(Sender: TObject);
var
i, progress, ProximaVersao : integer;
begin
QuerUpdate.Close;
QuerUpdate.SQL.Text := 'select * from INK';
QuerUpdate.Open;
//O "ProximaVersao" recebe o número do banco da tabela INK + 1;
//O Update só finaliza totalmente quando o EdtUpdate é Igual o Número do Update Mais Recente!
ProximaVersao := QuerUpdate.FieldByName('UPDATE').Value + 1;

MemoSQL.Lines.LoadFromFile('D:\\INK Sistemas\\Dados\\UPDATE\\INKUPDATE_'+IntToStr(ProximaVersao)+'.txt');

QuerUpdate.Close;

begin
progress := MemoSQL.Lines.Count - 1;
BarraDeProgresso.Max := Progress; //Barra de Progresso da tela de Update
BarraDeProgresso.Position := 0;
BtnProsseguir.Enabled := False;

for i := 0 to MemoSQL.Lines.Count - 1 do
begin
QuerUpdate.SQL.Clear;
QuerUpdate.SQL.Add(MemoSQL.Lines[i]);
QuerUpdate.Open;
try
QuerUpdate.ExecSQL;

BarraDeProgresso.Position := BarraDeProgresso.Position + 1; //Barra de progresso avança 1 Linha do MemoSQL
LblDescricao.Caption := 'Atualizando banco de dados para a versão: '+IntToStr(ProximaVersao);
except
On E: Exception do
ShowMessage('Erro ao executar a instrução: ' + MemoSQL.Lines[i] + sLineBreak +
'Erro: ' + E.Message);
end;
end;
FrmPrincipal.BancoBD.StartTransaction;
try
FrmPrincipal.BancoBD.Commit;

QuerUpdate.Close;
QuerUpdate.SQL.Text := 'select * from INK';
QuerUpdate.Open;
QuerUpdate.FieldByName('UPDATE').Value := QuerUpdate.FieldByName('UPDATE').Value + 1;

FrmPrincipal.BancoBD.Commit;
except
FrmPrincipal.BancoBD.Rollback;
end;
QuerUpdate.Close;
BtnProsseguir.Enabled := True;

//aqui vai a instrução para carregar uma quer em tempo de execução para abrir a tabela INK do banco e alterar
// o número da versão do UPDATE do banco para a que foi atualizada!
end;
end;

Desde já agradeço a ajuda!!
Lucas Kalbusch

Lucas Kalbusch

Responder

Posts

19/09/2017

Rafael Bosco


QuerUpdate.Open;
try
QuerUpdate.ExecSQL;


Amigo, você deu um OPEN e depois um EXECSQL na query, sugiro verificar qual a SQL que está na query, se for SELECT utiliza o OPEN, se for UPDATE ou INSERT usa o EXECSQL, no caso, acho que depois de dar o Open, você tem que dar o CLOSE e depois adicionar novamente uma SQL para posteriormente chamar o método EXECSQL.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar