Fórum Laço para executar linha por linha do Memo na Query #465375
30/12/2013
0
Já sou usuário DevMedia à muito tempo mas é a primeira vez que uso o forum. Estou desenvolvendo uma aplicação para executar comandos sql em tabelas paradox para uso na empresa onde trabalho e estou com uma dúvida em relação ao uso de laço para leitura do Memo. O problema é que ele sempre executa com êxito o script mas ainda sim sai do "try" e executa o "Except", mesmo quando o try é executado sem erros.
Abaixo segue o código do evento do botão:
procedure TFrm_UCT.Bt_ExecutaAtuaPdxClick(Sender: TObject);
var
I, Linha_memo: Integer;
begin
if not Assigned(Frm_Processando) then
begin
Frm_Processando := TFrm_Processando.Create(Self);
Frm_Processando.Lb_Aguardando.Caption :=
'Efetuando comparação estrutural de tabelas.';
Frm_Processando.Show;
end;
Linha_memo := 1;
while Linha_memo <= Memo_AtuaPdx.Lines.Count do
// for I := 0 to Memo_AtuaPdx.Lines.Count do
try
begin
screen.cursor := crSQLWait;
Qry_AtuaPdox.Close;
Qry_AtuaPdox.DatabaseName := Edt_Base.Text;
Qry_AtuaPdox.SQL.Clear;
Qry_AtuaPdox.SQL.Text := (Memo_AtuaPdx.Lines.Strings[Linha_memo]);
Qry_AtuaPdox.ExecSQL;
Linha_memo := Linha_memo + 1;
screen.cursor := crDefault;
end;
Except
begin
TaskMessageDlg('Atenção!',
'Ocorreu um erro ao executar o script, verifique a sintaxe SQL do Arquivo AtuaPdx.',
mtError, [MbOk], 0);
Frm_UCT.Qry_TbDest.Free;
screen.cursor := crDefault;
Break;
Frm_Processando.Close;
end;
end;
Frm_UCT.Qry_TbDest.Free;
screen.cursor := crDefault;
Frm_Processando.Close;
End;Desde já agradeço.
Att.
Tiago Gomes
Curtir tópico
+ 0Post mais votado
02/01/2014
Consegui resolver o problema, o código ficou da seguinte forma:
procedure TFrm_UCT.Bt_ExecutaAtuaPdxClick(Sender: TObject);
var
I, Linha_memo: integer;
begin
if not Assigned(Frm_Processando) then
begin
Frm_Processando := TFrm_Processando.Create(nil);
Frm_Processando.Lb_Aguardando.Caption :=
'Atualizando estrutura da base de dados.';
Frm_Processando.Show;
Application.ProcessMessages
end;
Linha_memo := 0;
while Linha_memo <= Memo_AtuaPdx.Lines.Count - 1 do
begin
try
try
begin
Application.ProcessMessages;
screen.cursor := crSQLWait;
Qry_AtuaPdox.Close;
Qry_AtuaPdox.DatabaseName := Edt_Base.Text;
Qry_AtuaPdox.SQL.Clear;
Qry_AtuaPdox.SQL.Add(Trim(Memo_AtuaPdx.Lines.Strings[Linha_memo]));
Qry_AtuaPdox.ExecSQL;
inc(Linha_memo);
screen.cursor := crDefault
end;
Except
begin
TaskMessageDlg('Atenção!',
'Ocorreu um erro ao executar o script, verifique a sintaxe SQL do Arquivo AtuaPdx.',
mtError, [MbOk], 0);
Break
end;
end;
Finally
screen.cursor := crDefault;
// Frm_UCT.Qry_TbDest.Free;
FreeAndNil(Frm_Processando)
end;
end
End;
O fato era que o Tmemo começa com índice " 0", portanto ao usar o laço assim:
while Linha_memo <= Memo_AtuaPdx.Lines.Count - 1 do
Aproveitando o momento, queri perguntar: Para fazer a gravação de campos vocês preferem um TQuery ou um TTable, porque?
Agora vou iniciar o desenvolvimento de um bloco para analisar a sintaxe sql - paradox.
Agradeço e bom 2014!
Tiago Gomes
Gostei + 1
Mais Posts
31/12/2013
Marcos Saffran
verifique o que é apresentado com o comando:
ShowMessage(Memo_AtuaPdx.Lines.Strings[Memo_AtuaPdx.Lines.Count]);
assim você verificará a última linha do memo.
Gostei + 0
31/12/2013
Leandro Chiodini
pois quando uma Etrutura try esta dentro de outra,
o try estoura somente no ultimo try...
justamente para isso que serve o try...
da uma verificada pra ver se não ta vindo o erro, mesmo não parando a execução.
Gostei + 0
31/12/2013
Tiago Gomes
verifique o que é apresentado com o comando:
ShowMessage(Memo_AtuaPdx.Lines.Strings[Memo_AtuaPdx.Lines.Count]);
assim você verificará a última linha do memo.
Boa noite Marcos Alfredo Saffran!
Fiz o teste no laço e também no evento onclick de um botão após carregar o TMemo com as linhas, me surpreendi pois não retorna nenhuma mensagem. Não está contatando a quantidade de itens. Como calcular a quantidades de linhas?
Gostei + 0
31/12/2013
Tiago Gomes
pois quando uma Etrutura try esta dentro de outra,
o try estoura somente no ultimo try...
justamente para isso que serve o try...
da uma verificada pra ver se não ta vindo o erro, mesmo não parando a execução.
Boa noite Leandro Chiodini!
Só existe este um try - except mesmo. Efetuei o teste, coloquei direto e apareceu o erro da imagem anexada.[img:descricao=Erro ao executar o script sem o Try - Except]http://arquivo.devmedia.com.br/forum/imagem/263493-20131231-205701.jpg[/img]
Desde já agradeço!
Gostei + 0
31/12/2013
Tiago Gomes
pois quando uma Etrutura try esta dentro de outra,
o try estoura somente no ultimo try...
justamente para isso que serve o try...
da uma verificada pra ver se não ta vindo o erro, mesmo não parando a execução.
Boa noite Leandro Chiodini!
Só existe este um try - except mesmo. Efetuei o teste, coloquei direto e apareceu o erro da imagem anexada.[img:descricao=Erro ao executar o script sem o Try - Except]http://arquivo.devmedia.com.br/forum/imagem/263493-20131231-205701.jpg[/img]
Desde já agradeço!
Gostei + 0
02/01/2014
Leandro Chiodini
Amigo, da uma olhada se no teu TXT, nao esta executando a ultima linha com algum erro,
espaço em branco, alguma coluna que esteja com valores errados.
este erro é de banco de dados,
geralmente quando a estrutura esta errada, ou dos comandos,
ou do (insert, update etc..)
Gostei + 0
02/01/2014
Marcos Saffran
verifique o que é apresentado com o comando:
ShowMessage(Memo_AtuaPdx.Lines.Strings[Memo_AtuaPdx.Lines.Count]);
assim você verificará a última linha do memo.
Boa noite Marcos Alfredo Saffran!
Fiz o teste no laço e também no evento onclick de um botão após carregar o TMemo com as linhas, me surpreendi pois não retorna nenhuma mensagem. Não está contatando a quantidade de itens. Como calcular a quantidades de linhas?
Olá Tiago,
se não retorna nenhuma mensagem é porque a última linha contém espaços, tente ignorar essa última linha.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)