Trabalho com Firebird 1.5 com IBX e Delphi7. Utilizo componentes da palheta IBX e estou com problemas na hora de gravar os dados.
Aconteceu que temos um sistema num notebook. Lá tem o botão gravar, cancelar, sair etc ... Quando clico no gravar ele tem a rotina para fazer o commit no banco e mostrar mensagem de sucesso. Porém depois de vários pedidos feitos e gravados, o cliente desligou o note com a tela do sistema aberta e para minha supresa nada foi realmente gravado. Em um outro teste fiz a mesma coisa e fechei o sistema, aí sim os dados forem efetivamente gravados. Qual o problema entre fechar o sistema ou não? Eu acreditava que o Commit era essencial para a gravação dos dados mas não foi isso que observei.
Realizando o teste na mão, observei que enquanto gravo uma venda, sem fechar o sistema, vou no IBX e abro a tabela de Vendas e o pedido não está lá.
O que acontece nesse caso? Como resolver?
Abaixo o codigo do gravar
procedure TfrmPedido.btnGravarClick(Sender: TObject);
begin
if (edtCodCliente.Text <> '') and (cmbPrazoPgto.Text <> '') and (rdgCondPgto.ItemIndex <> -1) and (rdgTipoEnt.ItemIndex <> -1) then
begin
IBTransMobili.StartTransaction;
qryAltPedido.ParamByName('P_COD').AsInteger := StrToInt(lblCodVenda.Caption);
qryAltPedido.ParamByName('P_TOTAL').AsFloat := qryTotal.FieldByName('TOTAL').AsFloat;
qryAltPedido.ParamByName('P_CLI_COD').AsInteger := StrToInt(edtCodCliente.Text);
qryAltPedido.ParamByName('P_OBS').AsString := memObs.Text;
qryAltPedido.ParamByName('P_PAR_CP_CODIGO').AsInteger := cmbPrazoPgto.KeyValue;
qryAltPedido.ParamByName('P_TOTAL').AsFloat := qryTotal.FieldByName('TOTAL').AsFloat;
qryAltBackupPed.ParamByName('P_COD').AsInteger := StrToInt(lblCodVenda.Caption);
qryAltBackupPed.ParamByName('P_TOTAL').AsFloat := qryTotal.FieldByName('TOTAL').AsFloat;
qryAltBackupPed.ParamByName('P_CLI_COD').AsInteger := StrToInt(edtCodCliente.Text);
qryAltBackupPed.ParamByName('P_OBS').AsString := memObs.Text;
qryAltBackupPed.ParamByName('P_PAR_CP_CODIGO').AsInteger := cmbPrazoPgto.KeyValue;
qryAltBackupPed.ParamByName('P_TOTAL').AsFloat := qryTotal.FieldByName('TOTAL').AsFloat;
if rdgSit.ItemIndex = 0 then
begin
qryAltPedido.ParamByName('P_SIT').AsString := 'V';
qryAltBackupPed.ParamByName('P_SIT').AsString := 'V';
end
else if rdgSit.ItemIndex = 1 then
begin
qryAltPedido.ParamByName('P_SIT').AsString := 'T';
qryAltBackupPed.ParamByName('P_SIT').AsString := 'T';
end
else if rdgSit.ItemIndex = 2 then
begin
qryAltPedido.ParamByName('P_SIT').AsString := 'B';
qryAltBackupPed.ParamByName('P_SIT').AsString := 'B';
end;
if rdgTipoEnt.ItemIndex = 0 then
begin
qryAltPedido.ParamByName('P_TIPO').AsString := 'URGENTE';
qryAltBackupPed.ParamByName('P_TIPO').AsString := 'URGENTE';
end
else if rdgTipoEnt.ItemIndex = 1 then
begin
qryAltPedido.ParamByName('P_TIPO').AsString := 'NORMAL';
qryAltBackupPed.ParamByName('P_TIPO').AsString := 'NORMAL';
end
else if rdgTipoEnt.ItemIndex = 2 then
begin
qryAltPedido.ParamByName('P_TIPO').AsString := 'PROGRAMADA';
qryAltBackupPed.ParamByName('P_TIPO').AsString := 'PROGRAMADA';
end
else if rdgTipoEnt.ItemIndex = 3 then
begin
qryAltPedido.ParamByName('P_TIPO').AsString := 'TROCA/BONIF';
qryAltBackupPed.ParamByName('P_TIPO').AsString := 'TROCA/BONIF';
end;
if rdgCondPgto.ItemIndex = 0 then
begin
qryAltPedido.ParamByName('P_CONDICOES').AsString := 'DINHEIRO';
qryAltBackupPed.ParamByName('P_CONDICOES').AsString := 'DINHEIRO';
end
else if rdgCondPgto.ItemIndex = 1 then
begin
qryAltPedido.ParamByName('P_CONDICOES').AsString := 'CHEQUE';
qryAltBackupPed.ParamByName('P_CONDICOES').AsString := 'CHEQUE';
end
else if rdgCondPgto.ItemIndex = 2 then
begin
qryAltPedido.ParamByName('P_CONDICOES').AsString := 'BOLETO';
qryAltBackupPed.ParamByName('P_CONDICOES').AsString := 'BOLETO';
end
else if rdgCondPgto.ItemIndex = 3 then
begin
qryAltPedido.ParamByName('P_CONDICOES').AsString := 'OUTRO';
qryAltBackupPed.ParamByName('P_CONDICOES').AsString := 'OUTRO';
end
else if rdgCondPgto.ItemIndex = 4 then
begin
qryAltPedido.ParamByName('P_CONDICOES').AsString := 'TROCA/BONIF';
qryAltBackupPed.ParamByName('P_CONDICOES').AsString := 'TROCA/BONIF';
end;
qryAltPedido.ExecSQL;
qryAltBackupPed.ExecSQL;
IBTransMobili.Commit;
Limpar(Sender as TObject);
qryPrazoPgto.Close;
mensagem := 'Pedido Gravado com Sucesso!';
Application.MessageBox(Pchar(mensagem), 'Informação', MB_OK+MB_ICONINFORMATION);
pn_geral.Enabled := False;
btnNovo.SetFocus;
*Aqui eu gravo em duas tabelas ao mesmo tempo por causa de uma outra rotina no sistema que exige isso.
Pergunta
DiabloX3
Nada com "commit" encontrado no pesquisar.
Problema é o seguinte agora moçada.
Trabalho com Firebird 1.5 com IBX e Delphi7. Utilizo componentes da palheta IBX e estou com problemas na hora de gravar os dados.
Aconteceu que temos um sistema num notebook. Lá tem o botão gravar, cancelar, sair etc ... Quando clico no gravar ele tem a rotina para fazer o commit no banco e mostrar mensagem de sucesso. Porém depois de vários pedidos feitos e gravados, o cliente desligou o note com a tela do sistema aberta e para minha supresa nada foi realmente gravado. Em um outro teste fiz a mesma coisa e fechei o sistema, aí sim os dados forem efetivamente gravados. Qual o problema entre fechar o sistema ou não? Eu acreditava que o Commit era essencial para a gravação dos dados mas não foi isso que observei.
Realizando o teste na mão, observei que enquanto gravo uma venda, sem fechar o sistema, vou no IBX e abro a tabela de Vendas e o pedido não está lá.
O que acontece nesse caso? Como resolver?
Abaixo o codigo do gravar
*Aqui eu gravo em duas tabelas ao mesmo tempo por causa de uma outra rotina no sistema que exige isso.
Link para o comentário
Compartilhar em outros sites
15 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.