GARANTIR DESCONTO

Fórum Problemas com ZSQLProcessor Zeos Lib 6.5.1 Alpha... #356020

27/03/2008

0

Meu nome á Marcio Andre F Moraes, resido em Americana/SP.
Sou programador e desenvolvo a +/- 4 Anos ´Delphi + Zeos 6.5.1 + Firebird´.

RESUMO.:
Detectei que ZSQLProcessor executou um script com varios statements tipo (Update / Insert / Delete) e em varias tabelas. Posso dizer que cerca de 500 registros no total. O problema que ocorreu, foi que em um determinado periodo, e em um determinado ´lote/script´, ele comitou o script até um determinado ponto, e apartir dali, ele não gravou o restante. Isso sem retornar erro, e locado por transação. Depois fiz um backup da base, deletei os inserts que ele ja havia efetuado e executei novamente o script, exatamente o mesmo e ele gravou totalmente.

DETALHAMENTO.:

Propriedades do ZSQLProcessor.:
CleanupStatement = False;
Delimeter = ;
DelimeterType = dtDefault
Name = SQLProc
ParamCheck = True

Propriedades da Conexão.:
TransactIsolationLevel = tiReadCommitted
AutoCommit = False
SQLHourglass = True
Protocol = Firebird-1.5

Eventos do SQLProc
OnError =
procedure TDm.SQLProcError(Processor: TZSQLProcessor; StatementIndex: Integer; E: Exception;
var ErrorHandleAction: TZErrorHandleAction);
begin
ErrorHandleAction := eaFail;
FormRepli.Ret_Erro := 1;
end;

Rotina onde o Problema Ocorre.:
[color=blue:31533c4226]// Esta é uma rotina aonde o sistema extrai um arquivo *.rar de um blob no Firebird, descompacta o arquivo, importa o mesmo no SQLProcessor e Executa //[/color:31533c4226]
procedure TFormRepli.Receber;
Var
Ls : TStringList;
PathArq, ErrMsg : String;
Tabpacotes, Q : TZQuery;
begin
try
Ls := TStringList.Create;
try
// Efetuar as operações c/ a senha do replicador //

Dm.Connsource.Disconnect;
Dm.Connsource.User := MemDatabasesUsuarioDestino.Value;
Dm.Connsource.Password := MemDatabasesSenhaDestino.Value;
Dm.Connsource.Connect;

Tabpacotes := TZQuery.Create(FormRepli);
Tabpacotes.Connection := Dm.Connsource;

Q := TZQuery.Create(FormRepli);
Q.Connection := Dm.Conndestination;
// Verificar se existe algum registro no tabpacotes //
Tabpacotes.Close;
Tabpacotes.SQL.Clear;
Tabpacotes.SQL.Add(´select codigo, data, hora, nome_pacote, usuario_repl, cod_emp_origem, cod_emp_destino, conferido, ret_erros, enviado,´+#13+
´concluido from tabpacotes where coalesce(concluido,0) = 0 and cod_emp_origem <> (select cod_emp from tabemp)´);
Tabpacotes.SortedFields := ´Codigo´;
Tabpacotes.Open;
Tabpacotes.First;
While not Tabpacotes.Eof Do
begin
Ret_Erro := 0;
if IntToStr(MemDatabasesCod_Emp.AsInteger) = IntToStr(Tabpacotes.FieldByName(´cod_emp_destino´).AsInteger) then
begin
// Extrair o Pacote Para a pasta Recebidos //
if GetPacote(Tabpacotes.FieldByName(´Codigo´).AsString, Tabpacotes.FieldByName(´Nome_pacote´).AsString,
ExtractShortPathName(ExtractFilePath(Application.ExeName)+´\recebido\´),
Dm.Connsource, ErrMsg) Then
begin
PathArq := ExtractShortPathName(ExtractFilePath(Application.ExeName)+´\recebido\´);

// Exportar o Arquivo SQL de dentro do *.Rar //
Executa(´UnRar.exe e ´+ PathArq + Tabpacotes.FieldByName(´Nome_Pacote´).AsString+´.rar -o+ ´+
PathArq, SW_NORMAL);
Sleep(2000);

[color=blue:31533c4226]// Neste ponto já temos o arquivo *.SQL salvo no micro e pronto pra ser executado // [/color:31533c4226]
[color=blue:31533c4226]// Importar o arquivo de texto SQL p/ Execução //[/color:31533c4226]
Dm.SQLProc.Clear;
[color=blue:31533c4226]// Aqui eu importo o arquiv SQL p/ o SQLProcessor e Executo //[/color:31533c4226]
[color=blue:31533c4226]// Se alguma coisa desse errado na rotina ele cairia na execeção e o rollback seria executado //[/color:31533c4226]
Dm.SQLProc.LoadFromFile(PathArq + Tabpacotes.FieldByName(´Nome_Pacote´).AsString+´.sql´);
Dm.SQLProc.Execute;

[color=blue:31533c4226]// Informar que o pacote foi entregue //[/color:31533c4226]
Q.Close;
Q.Connection := Dm.Connsource;
Q.SQL.Clear;
Q.SQL.Add(´update tabpacotes set conferido = 1, ret_erros = ´+IntToStr(Ret_Erro));
if Ret_Erro = 0 Then
Q.SQL.Add(´, concluido = 1´);
Q.SQL.Add(´Where Codigo = ´+Tabpacotes.FieldByName(´Codigo´).AsString);
Q.ExecSQL;

[color=blue:31533c4226]// Informo na base da matriz que o pacote foi gravado com sucesso aqui no local // [/color:31533c4226]
Q.Close;
Q.Connection := Dm.Conndestination;
Q.ExecSQL;

[color=blue:31533c4226]// Aqui eu commito tanto a conexao local quanto a remota //[/color:31533c4226]
Dm.Connsource.Commit;
Dm.Conndestination.Commit;
end;
end;
Tabpacotes.Next;
end;
except on e: exception do
begin
if Dm.Connsource.Connected then
Dm.Connsource.Rollback;
if Dm.Conndestination.Connected then
Dm.Conndestination.Rollback;
memoErrors.Lines.Add(´Rollback !!!´);
end;
end;
finally
Ls.Free;
Q.Free;
end;
end;


O ARQUIVO *.SQL.:

UPDATE TABCLI SET NOME_CLI = ´LUCINEI DE SOUSA´, END_CLI = ´RUA ADILIO FEOLA, N º 159´, CID_CLI = ´AMERICANA´, BAIR_CLI = ´CATARINA ZANAGA´, UF_CLI = ´AM´, CEP_CLI = ´13465000´, FONE1_CLI = ´3408-0683´, FONE2_CLI = ´(0019) -´, NASC_CLI = ´26.1.1967´, ORG_CLI = ´0000000´, CPF_CLI = ´00000000000´, CONTATO_CLI = ´PROPRIO´, END_ENTREGA = ´RUA ADILIO FEOLA, N º 159´, BAIRRO_ENTREGA = ´CATARINA ZANAGA´, CIDADE_ENTREGA = ´AMERICANA´, CEP_ENTREGA = ´13465000´, CGC_ENTREGA = ´06239230847´, INS_ENTREGA = ´18092690´, END_COBRANCA = ´RUA ADILIO FEOLA, N º 159´, BAIRRO_COBRANCA = ´CATARINA ZANAGA´, CIDADE_COBRANCA = ´AMERICANA´, CEP_COBRANCA = ´13465000´, CGC_COBRANCA = ´06239230847´, INSC_COBRANCA = ´18092690´, OBSGER_CLI = ´{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\lang1046\f0\fs16 18/08/07 - CONSULTEI SPC/CH INT E NADA CONSTOU N\´´ba 0053327918 - T\´´c3NIA 01 CONSULTA CAVICHIOLLI - T\´´c2NIA \f1\par
}
´, CADASTRO_CLI = ´18/8/2007´, SEXO_CLI = ´Masculino´, PESSOA = ´F´, TABELA = ´0´, LIMITE_CREDITO = 1000, DT_CONSULTA_SPC = ´18.8.2007´, AUTORIZACAO_SPC = ´0053327918´, ORG_EMISSOR = ´SSP´, NATURALIDADE = ´AURIFLAMA - SP´, NACIONALIDADE = ´BRASILEIRO´, NOME_PAI = ´SEBASTIAO DE SOUZA´, NOME_MAE = ´LUIZA SATTIN DE SOUSA´, ESTADO_CIVIL = ´CASADO´, FILIAL = 0, DATACADASTRO = ´18.3.2008´, INCOMPLETO = 0, COD_EMP = 1 Where CODIGO = 59867;

[b:31533c4226]DAQUI PRA BAIXO ELE NÃO GRAVOU NO BANCO.[/b:31533c4226]
INSERT INTO TABCREC ( CODIGO, FAVORECIDO, GRUPO, CATEGORIA, EMISSAO, VENCIMENTO, VALOR_ENT, VALOR_SAI, DOC, PARCELA, SITUACAO, CPF, PEDIDONR, BAIXADO, TIPO, NR_CLIENTE, JUROS, NR_CONTACORRENTE, REL_MOVCRED, OPERADOR, DATA_EDICAO, HORA_EDICAO, RELFCONTA, VENDEDOR, COD_EMP) VALUES ( 54121, ´VANDERLEI DE SOUSA´, ´RECEITAS´, ´Vendas Faturadas´, ´26.3.2008´, ´27.3.2008´, 583.05, 583.05, ´97531´, ´1´, ´TITULOS EM CARTEIRA´, ´00000000000´, 97531, ´Can´, ´DP´, 59867, 0, 24, 24, ´MONICA´, ´26.3.2008´, ´10:17:46´, 8311, ´PATRICIA ´, 1);
UPDATE TABITEMS SET RELGRUPOS = 1, COD = ´R 353´, P_TABELA = 12.51, VALORV = 12.6, VALORP = 13.263, CAT = 8.4, P_UNIT = 8.4, UNID = ´PT´, SALDO = -1, DESCRICAO = ´RODAPE UNIVERSAL 8 X 34CM´, BARRAS = ´R 353´, MARGEM_VENDA = 50, TEMPO_REPOSICAO = 7, PESO_PRODUTO = 1, MARCA = ´LINEART´, ST = ´000´, DEPARTAMENTO = 2, DIVISAO = 2, EMB_VENDA = 1, DESC_MAX = 0, PERC_COMISSAO = 1.5, INATIVO = ´N´, CFOP = ´5.102´, ENCOMENDA = ´N´, COD_EMP = 1 Where CODIGO = 104708;
UPDATE TABITEMS SET RELGRUPOS = 1, COD = ´14.0124BRCO´, P_TABELA = 554.51, VALORV = 528.701, VALORP = 556.527, DESC_1 = 9.3, DESC_2 = 10, DESC_3 = 10, DESC_4 = 10, CAT = 377.643, P_UNIT = 366.644, UNID = ´PC´, IPI = 3, SALDO = 5, DESCRICAO = ´GABINETE CLASSIC 1.74´, FAMILIA = 188, NOME_FAMILIA = ´FIMAP´, BARRAS = ´14.0124BRCO´, MARGEM_VENDA = 40, TEMPO_REPOSICAO = 7, PESO_PRODUTO = 1, MARCA = ´FIMAP´, ST = ´000´, DEPARTAMENTO = 2, DIVISAO = 2, EMB_VENDA = 1, DESC_MAX = 0, PERC_COMISSAO = 1.5, INATIVO = ´N´, CFOP = ´5.102´, ENCOMENDA = ´N´, COD_EMP = 1 Where CODIGO = 94540;

MINHA CONCLUSÃO.:
Só chego a conclusão de que seja um bug desse componente ZSQLProcessor. Será que existe algo que não poderia ter feito, ou que fiz e poderia provocar este erro.


Desde já, agradeço pela ajuda...

Sds,


Marcio A F Moraes
mafblessed@hotmail.com
Cevisa Soluções Empresariais.


Mafblessed

Mafblessed

Responder

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

Aceitar