Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Solay

Transação (delphi+mysql+zeus) Erro

Recommended Posts

Olá a todosEu tenho um sistema q uso Delphi 7, mysql e zeos, só q ele esta dando o seguinte erro:SQL ERROR: Lock wait timeout exceeded; try restarting transaction.Acho q estou usando de maneira errada as transações, se vcs puderem me ajudar agradeço.Ps: Já verifique a rede e está tudo certo.Solay

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando é que o erro acontece??? é quando você Executa a SQL ou quando tenta conectar as Tabelas???Se for na execução da SQL, Posta a Instrução SQL pra darmos uma olhada...Se for na conexão veja de o Servidor do Banco esta estartado coretamente, e se as verções são compativeis...Aguardamos resposta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Abraao Ramiro

 

 

O erro ocorre quando executo um delete ou um insert......ele não ocorre quando eu faço um select.

Esse código é de um formulário de agenda para os médicos, então ele é executado a cada atualização da agenda e são 4 médicos consultando o dia todo e mais a recepção que marcas consultas e exames.

 

 

procedure TFrmPrincipal.ParametrosTabela(Codigo:string;CodVinculo:string;Data:string);

begin

try

if Dados.ZCnn.InTransaction = False then

Dados.ZCnn.StartTransaction;

with Dados.ZQry do begin

SQL.Clear;

SQL.Add('DELETE FROM TabParamRelatorios ');

ExecSQL;

end;

Dados.ZCnn.Commit;

except

on Exc:Exception do begin

ShowMessage('Ocorreu um erro na tentativa de inclusão do registro: ' + Exc.Message);

Dados.ZCnn.Rollback;

end;

end;

 

 

try

if Dados.ZCnn.InTransaction = False then

Dados.ZCnn.StartTransaction;

 

with Dados.ZQry do begin

SQL.Clear;

SQL.Add('INSERT INTO TabParamRelatorios ');

SQL.Add('(Codigo, DataInicial, CodVinculo)');

SQL.Add('VALUES(:Codigo, :DataInicial, :CodVinculo)');

ParamByName('codigo').Value := Codigo;

ParamByName('DataInicial').Value:= FormatDateTime('yyyy/mm/dd',StrToDate(Data));

ParamByName('CodVinculo').Value := CodVinculo;

ExecSQL;

end;

Dados.ZCnn.Commit;

except

on Exc:Exception do begin

ShowMessage('Ocorreu um erro na tentativa de inclusão do registro: ' + Exc.Message);

Dados.ZCnn.Rollback;

end;

end;

 

end;

 

 

procedure TFrmAgendaRecep.PopulaGridProced;

var

i,j,y: integer;

Value: Integer;

sql,Ordem,Medico:string;

begin

 

if LbDiaSemana.Caption ='domingo' then Ordem:= '1';

if LbDiaSemana.Caption ='segunda-feira' then Ordem:= '2';

if LbDiaSemana.Caption ='terça-feira' then Ordem:= '3';

if LbDiaSemana.Caption ='quarta-feira' then Ordem:= '4';

if LbDiaSemana.Caption ='quinta-feira' then Ordem:= '5';

if LbDiaSemana.Caption ='sexta-feira' then Ordem:= '6';

if LbDiaSemana.Caption ='sábado' then Ordem:= '7';

if LbDiaSemana.Caption ='Monday' then Ordem:= '2';

if LbDiaSemana.Caption ='Tuesday' then Ordem:= '3';

if LbDiaSemana.Caption ='Wednesday' then Ordem:= '4';

if LbDiaSemana.Caption ='Thursday' then Ordem:= '5';

if LbDiaSemana.Caption ='Friday' then Ordem:= '6';

if LbDiaSemana.Caption ='Saturday' then Ordem:= '7';

if LbDiaSemana.Caption ='Sunday' then Ordem:= '8';

 

Grid2.ColWidths[0]:=112;

Grid2.ColWidths[1]:=49;

Grid2.ColWidths[2]:=169;

Grid2.ColWidths[3]:=109;

Grid2.ColWidths[4]:=99;

Grid2.ColWidths[5]:=99;

Grid2.ColWidths[6]:=80;

Grid2.ColWidths[7]:=-1;

Grid2.ColWidths[8]:=-1;

Grid2.ColWidths[9]:=-1;

Grid2.ColWidths[10]:=-1;

 

Grid2.Cells[0,0]:='';

Grid2.Cells[1,0]:='';

Grid2.Cells[2,0]:='';

Grid2.Cells[3,0]:='';

Grid2.Cells[4,0]:='';

Grid2.Cells[5,0]:='';

Grid2.Cells[6,0]:='';

Grid2.Cells[7,0]:='';

Grid2.Cells[8,0]:='';

Grid2.Cells[9,0]:='0';

Grid2.Cells[10,0]:='';

 

Grid2.Cells[0,1]:='';

Grid2.Cells[1,1]:='';

Grid2.Cells[2,1]:='';

Grid2.Cells[3,1]:='';

Grid2.Cells[4,1]:='';

Grid2.Cells[5,1]:='';

Grid2.Cells[6,1]:='';

Grid2.Cells[7,1]:='';

Grid2.Cells[8,1]:='';

Grid2.Cells[9,1]:='0';

Grid2.Cells[10,1]:='';

 

SelecionaMedico;

 

if ((EdtCodmedico.Text ='') or (EdtCodmedico.text=null) or (EdtCodmedico.text='0') ) then begin

Application.MessageBox('O campo Especialista é obrigatório, selecione um na lista.', 'Aviso do Sistema', MB_ICONSTOP + MB_OK);

cbxmedico.SetFocus;

exit;

end;

 

 

FrmPrincipal.ParametrosTabela('1', EdtCodMedico.text,LbData.text);

 

Sql:='SELECT TabAgenda.Codigo, TabAgenda.Medico, TabAgenda.Data, TabAgenda.Hora, TabAgenda.Paciente, TabAgenda.CodPaciente, ';

sql:=sql+' TabAgenda.Status, TabAgenda.Obs, TabAgenda.Convenio,TabAgenda.Exame,TabAgenda.Modalidade ';

sql:=sql+' FROM TabParamRelatorios INNER JOIN TabAgenda on TabParamRelatorios.DataInicial = TabAgenda.Data ';

sql:=sql+' ORDER BY TabAgenda.Medico,hora ';

Dados.ZQryGeral.Active := False;

Dados.ZQryGeral.SQL.Clear;

Dados.ZQryGeral.SQL.Add(sql);

Dados.ZQryGeral.Active:=true;

 

if Feriado=false then begin

if Dados.ZQryGeral.RecordCount<>0 then begin

FrmPrincipal.ParametrosTabela('1', EdtCodMedico.text,LbData.text);

 

Sql:='delete FROM tabtempagenda ';

 

 

Dados.ZQry.SQL.Clear;

Dados.ZQry.SQL.Clear;

Dados.ZQry.SQL.Add(sql);

Dados.ZQry.ExecSQL;

try

if Dados.ZCnn.InTransaction = False then

Dados.ZCnn.StartTransaction;

 

Sql:='INSERT INTO tabtempagenda (Codigo,CodMedico,Data,Hora,Paciente,CodPaciente,Telefone,Status,CodigoFunc, ';

sql:=sql+' DataStatus,NomeFunc,CodModalidade,Obs,Modalidade,Convenio,CodConvenio,Exame,CodE

xame,Medico) ';

sql:=sql+' Select tabagenda.Codigo,tabagenda.CodMedico,tabagenda.Data,tabagenda.Hora,tabagenda.Pac

iente, ';

sql:=sql+' tabagenda.CodPaciente,tabagenda.Telefone,tabagenda.Status,tabagenda.CodigoFunc,t

abagenda.DataStatus, ';

sql:=sql+' tabagenda.NomeFunc,tabagenda.CodModalidade,tabagenda.Obs,tabagenda.Modalidade,ta

bagenda.Convenio, ';

sql:=sql+' tabagenda.CodConvenio,tabagenda.Exame,tabagenda.CodExame,tabagenda.Medico from tabagenda INNER JOIN ';

sql:=sql+' TabParamRelatorios ON TabAgenda.Data=TabParamRelatorios.DataInicial ';

Dados.ZQry.SQL.Clear;

Dados.ZQry.SQL.Clear;

Dados.ZQry.SQL.Add(sql);

Dados.ZQry.ExecSQL;

Dados.ZCnn.Commit;

except

on Exc:Exception do begin

ShowMessage('Ocorreu um erro na tentativa de inclusão do registro: ' + Exc.Message);

Dados.ZCnn.Rollback;

end;

end;

 

try

if Dados.ZCnn.InTransaction = False then

Dados.ZCnn.StartTransaction;

 

sql:='INSERT INTO tabtempagenda (CodMedico,Hora,Medico,Modalidade,CodExame,Exame) ';

sql:=sql+' SELECT tabhorariosmed.codmedico, tabhorariosmed.horarios,TabMedicos.nome,tabhorariosmed.Tipo,tabhorariosmed.CodEx

ame,Tabexames.Exame ';

sql:=sql+' FROM tabhorariosmed INNER JOIN TabMedicos ON tabhorariosmed.CodMedico=TabMedicos.codigo LEFT OUTER JOIN tabtempagenda ON ';

sql:=sql+'tabhorariosmed.CodMedico=Tabtempagenda.CodMedico and tabhorariosmed.horarios=Tabtempagenda.hora LEFT OUTER JOIN Tabexames ON tabhorariosmed.Codexame = Tabexames.Codigo';

Sql:=Sql+' Where tabhorariosmed.Ordem='+ Ordem +' and Tabtempagenda.hora is null';

Dados.ZQry.SQL.Clear;

Dados.ZQry.SQL.Clear;

Dados.ZQry.SQL.Add(sql);

Dados.ZQry.ExecSQL;

Dados.ZCnn.Commit;

except

on Exc:Exception do begin

ShowMessage('Ocorreu um erro na tentativa de inclusão do registro: ' + Exc.Message);

Dados.ZCnn.Rollback;

end;

end;

 

 

Sql:='SELECT tabtempagenda.Codigo, tabtempagenda.Medico, tabtempagenda.Data, tabtempagenda.Hora, tabtempagenda.Paciente, tabtempagenda.CodPaciente, ';

sql:=sql+' tabtempagenda.Status, tabtempagenda.Obs, tabtempagenda.Convenio,tabtempagenda.Exame,tabtempagenda.Modalidade,tabtempagend

a.codmedico ';

sql:=sql+' FROM tabtempagenda ';

sql:=sql+' ORDER BY tabtempagenda.Medico,hora ';

Dados.ZQryGeral2.Active := False;

Dados.ZQryGeral2.SQL.Clear;

Dados.ZQryGeral2.SQL.Add(sql);

Dados.ZQryGeral2.Active:=true;

 

Grid2.RowCount :=Dados.ZQryGeral2.RecordCount;

Medico:=Dados.ZQryGeral2.Fields[11].AsString;

Grid2.Cells [0,0]:= Dados.ZQryGeral2.Fields[01].AsString;

Grid2.Cells [9,0]:='0';

y:=0;

for i:=0 to Dados.ZQryGeral2.RecordCount-1 do begin

Grid2.RowHeights:=16;

if ((Medico=Dados.ZQryGeral2.Fields[11].AsString) and (i<>0)) then begin

Grid2.Cells [0,i]:='';

Grid2.Cells [9,i]:= IntToStr(y);

end

else begin

Grid2.Cells [0,i]:= Dados.ZQryGeral2.Fields[01].AsString;

Medico:=Dados.ZQryGeral2.Fields[11].AsString;

y:=y+1;

Grid2.Cells [9,i]:= IntToStr(y);

end;

 

Grid2.Cells [1,i]:= FormatDateTime('hh:mm',Dados.ZQryGeral2.Fields[03].Asdatetime);

Grid2.Cells [2,i]:= Dados.ZQryGeral2.Fields[04].AsString;

if Dados.ZQryGeral2.Fields[10].AsString<>'EXAME' then

Grid2.Cells [3,i]:= Dados.ZQryGeral2.Fields[10].AsString

else

Grid2.Cells [3,i]:= Dados.ZQryGeral2.Fields[09].AsString;

 

Grid2.Cells [4,i]:= Dados.ZQryGeral2.Fields[08].asstring;

Grid2.Cells [5,i]:= Dados.ZQryGeral2.Fields[07].asstring;

Grid2.Cells [6,i]:= Dados.ZQryGeral2.Fields[06].AsString;

Grid2.Cells [7,i]:= Dados.ZQryGeral2.Fields[00].AsString;

Grid2.Cells [8,i]:= Dados.ZQryGeral2.Fields[11].AsString;

Grid2.Cells [10,i]:= Dados.ZQryGeral2.Fields[05].AsString;

if Length(Grid2.Cells [0,i])>17 then

Grid2.RowHeights:=30;

 

if Length(Grid2.Cells [2,i])>26 then

Grid2.RowHeights:=30;

 

if Length(Grid2.Cells [3,i])>15 then begin

if Length(Grid2.Cells [3,i])>30 then

Grid2.RowHeights:=40

else

Grid2.RowHeights:=30;

 

end;

 

if Length(Grid2.Cells [5,i])>26 then

Grid2.RowHeights:=30;

 

if Length(Grid2.Cells [6,i])>14 then

Grid2.RowHeights:=30;

 

dados.ZQryGeral2.Next;

end;

Dados.ZQryGeral2.Active:=false;

end

else begin

Sql:='SELECT tabhorariosmed.Codigo, tabhorariosmed.codmedico, tabhorariosmed.diasemana, tabhorariosmed.ordem,tabhorariosmed.horarios,';

Sql:=Sql+' TabMedicos.nome,tabhorariosmed.Tipo,Tabexames.Exame FROM tabhorariosmed INNER JOIN TabMedicos ON tabhorariosmed.CodMedico=TabMedicos.codigo LEFT OUTER JOIN Tabexames ON tabhorariosmed.Codexame = Tabexames.Codigo';

Sql:=Sql+' Where Ordem='+ Ordem +' ORDER BY TabMedicos.nome, Horarios';

Dados.ZQryGeral2.Active := False;

Dados.ZQryGeral2.SQL.Clear;

Dados.ZQryGeral2.SQL.Add(sql);

Dados.ZQryGeral2.Active:=true;

Grid2.RowCount :=Dados.ZQryGeral2.RecordCount;

Medico:=Dados.ZQryGeral2.Fields[01].AsString;

Grid2.Cells [0,0]:= Dados.ZQryGeral2.Fields[05].AsString;

Grid2.Cells [9,0]:='0';

y:=0;

for i:=0 to Dados.ZQryGeral2.RecordCount -1 do begin

Grid2.RowHeights:=16;

Grid2.Cells [0,i]:= Dados.ZQryGeral2.Fields[05].Asstring;

Grid2.Cells [1,i]:= FormatDateTime('hh:mm',Dados.ZQryGeral2.Fields[04].Asdatetime);

Grid2.Cells [2,i]:= '';

if Dados.ZQryGeral2.Fields[06].AsString<>'EXAME' then

Grid2.Cells [3,i]:= Dados.ZQryGeral2.Fields[06].AsString

else

Grid2.Cells [3,i]:= Dados.ZQryGeral2.Fields[07].AsString;

 

Grid2.Cells [4,i]:= '';

Grid2.Cells [5,i]:= '';

Grid2.Cells [6,i]:= '';

Grid2.Cells [7,i]:= '';

Grid2.Cells [8,i]:= Dados.ZQryGeral2.Fields[01].AsString;

if ((Medico=Dados.ZQryGeral2.Fields[01].AsString) and (i<>0)) then begin

Grid2.Cells [0,i]:='';

Grid2.Cells [9,i]:= IntToStr(y);

end

else begin

Grid2.Cells [0,i]:= Dados.ZQryGeral2.Fields[05].AsString;

Medico:=Dados.ZQryGeral2.Fields[01].AsString;

y:=y+1;

Grid2.Cells [9,i]:= IntToStr(y);

end;

if Length(Grid2.Cells [0,i])>17 then

Grid2.RowHeights:=30;

 

if Length(Grid2.Cells [3,i])>15 then begin

if Length(Grid2.Cells [3,i])>30 then

Grid2.RowHeights:=40

else

Grid2.RowHeights:=30;

 

end;

dados.ZQryGeral2.Next;

end;

Dados.ZQryGeral2.Active:=false;

end;

end

else begin

Grid2.RowCount :=1;

end;

 

Dados.ZQryGeral.Active:=false;

end;

 

 

Obrigada pela ajuda.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai aqui um conselho, já que não detectei qual o seu problema: eu sai do Zeus e fui para o ADO. Estou feliz da vida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.