Fórum DELPHI - SUSPENDER EXECUÇÃO DE QUERY -> THREAD ADO SQL 2008 #578029
16/03/2017
0
-----------------------------------------------
ATRAVÉS DE UMA THREAD EXECUTO UMA QUERY LISTANDO AS INFORMAÇÕES DE VENDAS EM UM PERIODO.
ISSO FUNCIONA PERFEITAMENTE.
O PROBLEMA É QUANDO O USUÁRIO PEGA UM PERÍODO MUITO
GRANDE E SEM PACIENCIA TENTA ENCERRAR A CONSULTA,
E O SISTEMA TRAVA, POIS A THREAD AINDA NÃO TERMINOU.
Pergunta:
COMO SUSPENDER A EXECUÇÃO DESSA QUERY,
QUE NA VERDADE ESTÁ SENDO EXECUTADA NO SERVIDOR SQL.
TENHO PROCURADO SEM EXITO UMA FORMA DE INTERROMPER
ESSE PROCESSO.
Alguém tem alguma luz.
Obrigado.
CMKAS
Clarice Cmkas
Curtir tópico
+ 0Post mais votado
16/03/2017
Não entendi.
Raylan Zibel
Gostei + 1
Mais Posts
16/03/2017
Clarice Cmkas
Gostei + 1
16/03/2017
Raylan Zibel
Gostei + 1
16/03/2017
Clarice Cmkas
Resumo da Thread
procedure TdatabaseThread.Execute;
var
wpdt1,wpdt2:Tdatetime;
wnat:string;
begin
if not dm1.ADOConnection1.Connected then
begin
CoInitialize(nil);
try
dm1.ADOConnection1.Connected:=true ;
Except
raise Exception.Create('Erro ao Conectar');
end;
end;
if not dm1.ADOConnection1.Connected then
Begin
MessageDlg('Erro de Conexão com o SQL, Informe ao Admistrador. ', mtInformation, [mbOK], 0);
exit;
end;
dm1.adoquery1.close;
dm1.adoquery1.SQL.clear;
dm1.adoquery1.sql.add(' SELECT A.EMP AS EMP,F2_DOC,F2_SERIE,F2_CLIENTE,F2_LOJA,F2_COND,F2_EMISSAO,F2_VALBRUT ');
dm1.adoquery1.sql.add(' ,F2_DESCONT,F2_TIPO,F2_FILIAL,E4_DESCRI,A1_GRPVEN,A1_CGC ');
dm1.adoquery1.sql.add(' ,C5_NUM,C5_XNOME,C5_YQUANT,C5_XQUANT,C5_DESCFI,C5_DESC1,C5_MENNOTA,C5_NAT ,C5_XVRTOT,C5_XCOMPL');
dm1.adoquery1.sql.add(' FROM Nfiscal NF ');
dm1.adoquery1.sql.add(' INNER JOIN Pedidonf A ON A.EMP=NF.EMP AND ');
dm1.adoquery1.sql.add(' F2_DOC=C5_YNOTA AND F2_SERIE=C5_XSERIE AND F2_FILIAL=C5_FILIAL ');
dm1.adoquery1.sql.add(' INNER JOIN Cond_pagto B ON A.EMP=B.EMP AND ');
dm1.adoquery1.sql.add(' E4_FILIAL = A.C5_FILIAL AND E4_CODIGO = F2_COND ');
dm1.adoquery1.sql.add(' LEFT JOIN Clientes D ON ');
dm1.adoquery1.sql.add(' A.EMP=D.EMP AND D.A1_COD=NF.F2_CLIENTE AND D.A1_FILIAL<> '+'''01'''+ ' AND '); //AND D.A1_FILIAL<>:w5 ') ;
dm1.adoquery1.sql.add(' (C5_TIPO <> '+'''B'''+ ' and C5_TIPO <> '+'''D'''+ ') ');
dm1.adoquery1.sql.add(' where ');
dm1.adoquery1.sql.add(' ( C5_NAT=:w1 OR C5_NAT=:w2 ) AND ');
dm1.adoquery1.sql.add(' F2_EMISSAO > = :w3 AND F2_EMISSAO < = :w4 ');
dm1.adoquery1.SQL.add(' AND F2_FILIAL<>:w5 ');
dm1.adoquery1.Parameters[0].Value:='1';
dm1.adoquery1.Parameters[1].value:='7';
dm1.adoquery1.Parameters[2].value:=dtos(wpdt1);
dm1.adoquery1.Parameters[3].value:=dtos(wpdt2);
dm1.adoquery1.Parameters[4].value:='01';
dm1.adoquery1.Prepared := true;
try
dm1.adoquery1.active:=true;
Except
begin
p_menu.StatusBar1.caption:='Erro de Conexão, ou limite de registros de retorno excedido, Reduza o período ';
exit;
end;
end;
while not dm1.adoquery1.Eof do
begin
..........inclui em um arquivo temporário
dm1.adoquery1.Next;
end;
dm1.adoquery1.close;
dm1.ADOConnection1.Connected:=false;
CoUninitialize;
end;
Constructor TdatabaseThread.create(dt1: TdateTime;dt2:Tdatetime);
begin
Fdt1:=dt1;
Fdt2:=dt2;
FreeOnTerminate:=true;
inherited create(false);
end;
Gostei + 0
17/03/2017
Raylan Zibel
try dm1.adoquery1.active:=true; Except begin p_menu.StatusBar1.caption:='Erro de Conexão, ou limite de registros de retorno excedido, Reduza o período '; exit; end;
É aqui que trava? Ou é em um while?
Gostei + 0
17/03/2017
Clarice Cmkas
Query não terminada.
Gostei + 0
17/03/2017
Raylan Zibel
Gostei + 0
17/03/2017
Gutemberg Silva
-----------------------------------------------
ATRAVÉS DE UMA THREAD EXECUTO UMA QUERY LISTANDO AS INFORMAÇÕES DE VENDAS EM UM PERIODO.
ISSO FUNCIONA PERFEITAMENTE.
O PROBLEMA É QUANDO O USUÁRIO PEGA UM PERÍODO MUITO
GRANDE E SEM PACIENCIA TENTA ENCERRAR A CONSULTA,
E O SISTEMA TRAVA, POIS A THREAD AINDA NÃO TERMINOU.
Pergunta:
COMO SUSPENDER A EXECUÇÃO DESSA QUERY,
QUE NA VERDADE ESTÁ SENDO EXECUTADA NO SERVIDOR SQL.
TENHO PROCURADO SEM EXITO UMA FORMA DE INTERROMPER
ESSE PROCESSO.
Alguém tem alguma luz.
Obrigado.
CMKAS
TALVEZ ISSO POSSA AJUDÁ-LO: https://msdn.microsoft.com/pt-br/library/aa833250(v=vs.90).aspx
Gostei + 0
17/03/2017
Raylan Zibel
É Delphi, não modo design do Visual Studio.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)