INSÔNIA, delphi , mysql e dbexpress
Galera, não sei mais o que fazer,se alguem enxergar onde o orelhudo aqui esta errando me ajudem, há quase 4 semanas estou batendo cabeça.
ESTOU RECEBENDO A SEGUINTE MESNAGEM DE ERRO:
THERE IS NO ACTIVE TRANSACTION = NÃO HÁ transação ativa
MAS NÃO ESTOU ENTENDENDO, ONDE ESTOU DEIXANDO DE ATIVAR A TRANSAÇÃO, ME AJUDEM POR FAVOR
******************* CODIGO *************
procedure TFormPEDIDOS.BitBtn1Click(Sender: TObject);
var proxNum:integer;
var TRANSACAO:TTransactionDesc;
begin
w_qtped:= strtoint(edit5.text);
while w_qtped <> 0 do
begin
TRY
TRANSACAO.IsolationLevel := xilREADCOMMITTED;
DMACI.CONEXAO.StartTransaction(TRANSACAO);
ProxNum :=0;
DMACI.CDSmovimento.IndexName:=;
DMACI.CDSmovimento.First;
DMACI.QR_maxped.CLOSE;
DMACI.QR_maxped.OPEN;
ProxNum :=DMACI.qr_maxpedMAXPEDIDO.ASINTEGER + 1;
DMACI.CDSmovimento.append;
DMACI.CDSmovimento.fieldbyname(pedido).asinteger:=Proxnum;
Editcodcli.Text:=inttostr(proxnum);
DMACI.CDSmovimento.fieldbyname(dt_ped).AsDatetime :=(date);
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
DMACI.CDSmovimento.fieldbyname(cod_cli).AsInteger := strtoint(EditCODCLI.Text);
DMACI.CDSmovimento.fieldbyname(cliente).AsString := label15.Caption;
DMACI.CDSmovimento.fieldbyname(litros).Asstring := Edit6.text;
DMACI.CDSmovimento.fieldbyname(preco).ASCURRENCY :=strtofloat(Editnum11.text);
DMACI.CDSmovimento.fieldbyname(descto).ASCURRENCY :=strtofloat(Editnum12.text);
DMACI.CDSmovimento.fieldbyname(liq).ASCURRENCY :=(strtofloat(Editnum11.text)-strtofloat(Editnum12.text));
DMACI.CDSmovimento.fieldbyname(contato).AsString := Edit3.text;
if w_prog =AGENDPEDthen
begin
DMACI.CDSmovimento.fieldbyname(sit).AsString := A;
end;
DMACI.CDSmovimento.fieldbyname(op_ped).AsInteger :=Formsenha.w_codusu;
DMACI.CDSmovimento.fieldbyname(dt_prev).AsDateTime:= DateTimePicker1.Date;
DMACI.CDSmovimento.fieldbyname(hr_prev).AsDateTime:= DateTimePicker1.Time;
DMACI.CDSmovimento.fieldbyname(cod_vend).AsInteger:= w_vend;
DMACI.CDSmovimento.fieldbyname(lembrete).asString := Edit4.Text;
DMACI.CDSmovimento.post;
DMACI.CONEXAO.Commit(TRANSACAO);
DMACI.CDSmovimento.Refresh;
w_qtped := (w_qtped - 1);
except
DMACI.CONEXAO.Rollback(TRANSACAO);
Atencao(Ocorreur algum ERRO durante a gravação do registro,Tente novamente! );
end;
end;
Groupbox4.Visible:=false;
tratabotoes;
end;
*************** FIM CODIGO *************
ESTOU RECEBENDO A SEGUINTE MESNAGEM DE ERRO:
THERE IS NO ACTIVE TRANSACTION = NÃO HÁ transação ativa
MAS NÃO ESTOU ENTENDENDO, ONDE ESTOU DEIXANDO DE ATIVAR A TRANSAÇÃO, ME AJUDEM POR FAVOR
******************* CODIGO *************
procedure TFormPEDIDOS.BitBtn1Click(Sender: TObject);
var proxNum:integer;
var TRANSACAO:TTransactionDesc;
begin
w_qtped:= strtoint(edit5.text);
while w_qtped <> 0 do
begin
TRY
TRANSACAO.IsolationLevel := xilREADCOMMITTED;
DMACI.CONEXAO.StartTransaction(TRANSACAO);
ProxNum :=0;
DMACI.CDSmovimento.IndexName:=;
DMACI.CDSmovimento.First;
DMACI.QR_maxped.CLOSE;
DMACI.QR_maxped.OPEN;
ProxNum :=DMACI.qr_maxpedMAXPEDIDO.ASINTEGER + 1;
DMACI.CDSmovimento.append;
DMACI.CDSmovimento.fieldbyname(pedido).asinteger:=Proxnum;
Editcodcli.Text:=inttostr(proxnum);
DMACI.CDSmovimento.fieldbyname(dt_ped).AsDatetime :=(date);
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
DMACI.CDSmovimento.fieldbyname(cod_cli).AsInteger := strtoint(EditCODCLI.Text);
DMACI.CDSmovimento.fieldbyname(cliente).AsString := label15.Caption;
DMACI.CDSmovimento.fieldbyname(litros).Asstring := Edit6.text;
DMACI.CDSmovimento.fieldbyname(preco).ASCURRENCY :=strtofloat(Editnum11.text);
DMACI.CDSmovimento.fieldbyname(descto).ASCURRENCY :=strtofloat(Editnum12.text);
DMACI.CDSmovimento.fieldbyname(liq).ASCURRENCY :=(strtofloat(Editnum11.text)-strtofloat(Editnum12.text));
DMACI.CDSmovimento.fieldbyname(contato).AsString := Edit3.text;
if w_prog =AGENDPEDthen
begin
DMACI.CDSmovimento.fieldbyname(sit).AsString := A;
end;
DMACI.CDSmovimento.fieldbyname(op_ped).AsInteger :=Formsenha.w_codusu;
DMACI.CDSmovimento.fieldbyname(dt_prev).AsDateTime:= DateTimePicker1.Date;
DMACI.CDSmovimento.fieldbyname(hr_prev).AsDateTime:= DateTimePicker1.Time;
DMACI.CDSmovimento.fieldbyname(cod_vend).AsInteger:= w_vend;
DMACI.CDSmovimento.fieldbyname(lembrete).asString := Edit4.Text;
DMACI.CDSmovimento.post;
DMACI.CONEXAO.Commit(TRANSACAO);
DMACI.CDSmovimento.Refresh;
w_qtped := (w_qtped - 1);
except
DMACI.CONEXAO.Rollback(TRANSACAO);
Atencao(Ocorreur algum ERRO durante a gravação do registro,Tente novamente! );
end;
end;
Groupbox4.Visible:=false;
tratabotoes;
end;
*************** FIM CODIGO *************
Luiz Junior
Curtidas 0
Respostas
Marco Salles
30/07/2012
GOSTEI 0
Luiz Junior
30/07/2012
Pois é amigo,valeu por seu retorno, porém eu uso delphi7 + mysql 5.037 + dbexpress, a estrutura citada , iria atender caso eu usa-se o delphi2010.
Mesmo assim, muitissimo obrigado, vou continuar devendo algumas horas de sono a mim mesmo, mas garanto que assim que resolver vou me pagar com juros e correção, kkkkkkkkkkkkkkkkkkk
GOSTEI 0
Bruno Leandro
30/07/2012
Ola Luiz em qual momento ele esta gerando esse erro, voce debugou?
GOSTEI 0
Luiz Junior
30/07/2012
Caro Bruno,
Pior que não da erro algum, apenas não atualiza a tabela no banco de dados, já debuguei,e não apresenta erro.
na tela do projeto eu tenho um dbgrid, e o mesmo apesenta os dados como se estivessem gravados, sem erro algum, porém no banco, não existe o registo, dá pra entender ?
GOSTEI 0
Marco Salles
30/07/2012
Caro Bruno,
Pior que não da erro algum, apenas não atualiza a tabela no banco de dados, já debuguei,e não apresenta erro.
na tela do projeto eu tenho um dbgrid, e o mesmo apesenta os dados como se estivessem gravados, sem erro algum, porém no banco, não existe o registo, dá pra entender ?
Luiz Emidio de Souza Junior Bom dia
Acredito que vc esteja utilizando Dbexpress
O Midas tem um exelente controloe transactional
A instrução DMACI.CDSmovimento.post não Aplica os Dados na Base De Dados
Para isto vc deve utilizar o ApplayUpdates
Como vc não esta utilizando Insert/Delete/Update no Braço , esta deixanso tudo nas constas do
Clientdataset , basta testar o Retorno do ApplayUpdate para saber se ouve ou não exceção
if DMACI.CDSmovimento.ApplyUpdate(0) 0 Then
Significa que houve erro
Vc também pode utilizar o evento onreconcileerror do clientdataset que ira disparar se algo ocorrer errado
quando tenta aplicar um regisytro ou um lote de registro na base de dados
entendeu ???
GOSTEI 0
Luiz Junior
30/07/2012
Galera, depois de algumas noites em branco pesquisando e relendo o código, achei o erro.
estava na linha abaixo:
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
no banco de dados eu defini o campo como tipo TIME, porém ela não estava aceitando a instrução acima.
redefini como tipo datetime e estou atualizando ele com a data e hora corrente.
AGORA VOU DORMIR UM POUCO, KKKKKKKKKKKKKKKK
MESMO ASSIM, MUITISSIMO OBRIGADO A TODOS OS QUE TENTARAM AJUDAR, E VAMOS PRA PRÓXIMA.
GOSTEI 0
Marco Salles
30/07/2012
Galera, depois de algumas noites em branco pesquisando e relendo o código, achei o erro.
estava na linha abaixo:
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
no banco de dados eu defini o campo como tipo TIME, porém ela não estava aceitando a instrução acima.
redefini como tipo datetime e estou atualizando ele com a data e hora corrente.
AGORA VOU DORMIR UM POUCO, KKKKKKKKKKKKKKKK
MESMO ASSIM, MUITISSIMO OBRIGADO A TODOS OS QUE TENTARAM AJUDAR, E VAMOS PRA PRÓXIMA.
Que bom , mas vc pode confiar no controle do delphi ... Transações são mais indicadas quando vc tem
Insert/Delete/Update na mão , ou várias estruturas aninhadas ou não de clientdataset que vc queira desfazer
caso algum erro ocorra em um deles ..
GOSTEI 0