Ir para conteúdo

Arquivado

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

wsilva7

table.dataset nor in edit or insert mode

Recommended Posts

Pessoal Bom dia.

Preciso de uma ajuda ae de vocês.

tenho um formujlario onde estou lancando despesas de veiculos

kilometragem, valor de combustivel gasto, pedagio estas coisas,

o problema ocorre quando tenho que fazer alguma alteração nesses lancamentos,

clico no botão editar, faço as alterações e depois calcular ai vem o erro abaixo.

 

tbconsumo dataset not in edit or insert mode.

 

Segue anbaixo o codigo que estou usando.

Estou usando o Delphi 7 e o firebird 2.0

 

procedure TFormLancamentos.Button1Click(Sender: TObject);
var vlr1,vlr2,vlr3,total1,total2:real;
VAR KMINI,KMFIM,TOTALKM:INTEGER;
begin
if (Tbconsumo.State=dsInsert) or (Tbconsumo.State=dsEdit) then

KMINI:=DBEDIT7.Field.AsInteger;
KMFIM:=DBEDIT8.Field.AsInteger;
TOTALKM:=(KMFIM-KMINI);
DBEDIT9.Field.AsInteger:=TOTALKM;

vlr1 := dbedit9.Field.AsInteger;
vlr2 := dbedit10.Field.AsCurrency;
total1:=(vlr1*vlr2);
dbEdit11.field.AsFloat:= total1;
vlr3 := dbedit13.Field.AsFloat;
total2:=(total1+vlr3);
dbedit14.Field.AsFloat:=total2;
tbconsumo.post;

valeu ae pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já debugou seu código para ver o se a tabela Tbconsumo está em modo de alteração antes de ativar o post? Lendo o código, me dá a entender que só poderia executar o bloco de comandos dessa procedure se a tabela estiver em modo de inserção ou edição, correto? Se sim, seu código devia ter um begin depois do then do if e um end após o post na tabela, para garantir que as operações só serão executadas quando a tabela realmente estiver em estado de inclusão/edição, senão vai viver tendo esta mensagem.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Chrnos,

Realmente não havi poercebidoesta falha nocodigo.

Mas ainda assim depois de corrigir persiste a mensagem e eu não consigo editar os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o código completo para análise da rotina em questão.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue o codigo da unit

 

unit Ulancamentos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, Mask, DB, DBTables, ComCtrls, Grids, DBGrids,
  Buttons, ExtCtrls, Menus, DBClient;

type
  TFormLancamentos = class(TForm)
    StatusBar1: TStatusBar;
    Query1: TQuery;
    TBCONSUMO: TTable;
    DSCONSUMO: TDataSource;
    DataSource2: TDataSource;
    TBCONSUMOCODIGOCONSUMO: TIntegerField;
    TBCONSUMONOMECLIENTE: TStringField;
    TBCONSUMODATA: TDateTimeField;
    TBCONSUMOTIPO: TStringField;
    TBCONSUMOOBJETIVOVOSITA: TStringField;
    TBCONSUMOOBSERVACAO: TStringField;
    TBCONSUMOKMINICIAL: TIntegerField;
    TBCONSUMOKMFINAL: TIntegerField;
    TBCONSUMOTOTALKM: TIntegerField;
    TBCONSUMOOUTRASDESPESAS: TStringField;
    Label1: TLabel;
    DBEdit1: TDBEdit;
    Label2: TLabel;
    DBEdit2: TDBEdit;
    Label3: TLabel;
    DBEdit3: TDBEdit;
    Label4: TLabel;
    DBEdit4: TDBEdit;
    Label5: TLabel;
    DBEdit5: TDBEdit;
    Label6: TLabel;
    Label7: TLabel;
    DBEdit7: TDBEdit;
    Label8: TLabel;
    DBEdit8: TDBEdit;
    Label9: TLabel;
    DBEdit9: TDBEdit;
    Label12: TLabel;
    DBEdit12: TDBEdit;
    DBMemo1: TDBMemo;
    DBGrid1: TDBGrid;
    Panel1: TPanel;
    Panel2: TPanel;
    Label15: TLabel;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    PopupMenu1: TPopupMenu;
    Detalhes1: TMenuItem;
    QRYCODCONSUMO: TQuery;
    QRYCODCONSUMOMAX: TIntegerField;
    SpeedButton7: TSpeedButton;
    ClientDataSet1: TClientDataSet;
    TBCONSUMOPLACA: TStringField;
    TBCONSUMOIDVEICULO: TIntegerField;
    Label16: TLabel;
    DBEdit6: TDBEdit;
    Label17: TLabel;
    DBEdit15: TDBEdit;
    DBNavigator1: TDBNavigator;
    TBCONSUMOPRCCOMBUSTIVEL: TFloatField;
    Label10: TLabel;
    DBEdit10: TDBEdit;
    TBCONSUMOVLRCOMBUSTIVELGASTO: TFloatField;
    TBCONSUMOVLROUTRASDESPESAS: TFloatField;
    TBCONSUMOTOTALDESPESAS: TFloatField;
    Label11: TLabel;
    DBEdit11: TDBEdit;
    Label13: TLabel;
    DBEdit13: TDBEdit;
    Label14: TLabel;
    DBEdit14: TDBEdit;
    Button1: TButton;
    procedure Detalhes1Click(Sender: TObject);
    procedure TBCONSUMONewRecord(DataSet: TDataSet);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure DBEdit10KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormLancamentos: TFormLancamentos;

implementation

uses UcadVeiculos, udetalhes;

{$R *.dfm}

procedure TFormLancamentos.Detalhes1Click(Sender: TObject);
begin
formdetalhes.show;
end;

procedure TFormLancamentos.TBCONSUMONewRecord(DataSet: TDataSet);
begin
QRYCODCONSUMO.CLOSE;
QRYCODCONSUMO.OPEN;
TBCONSUMOCODIGOCONSUMO.VALUE:=1 + QRYCODCONSUMOMAX.VALUE;
end;

procedure TFormLancamentos.SpeedButton2Click(Sender: TObject);
begin
TBCONSUMO.APPEND;
DBEDIT2.SetFocus;
end;

procedure TFormLancamentos.SpeedButton3Click(Sender: TObject);
begin
IF APPLICATION.MESSAGEBOX('Salvar Este Registro?','Confirma',
        mb_iconquestion+mb_yesno)=id_no then abort;

begin
TBCONSUMO.POST;
TBCONSUMO.CLOSE;
TBCONSUMO.OPEN;
end;
end;

procedure TFormLancamentos.SpeedButton4Click(Sender: TObject);
begin
TBCONSUMO.edit;
TBCONSUMO.CLOSE;
TBCONSUMO.OPEN;
end;

procedure TFormLancamentos.SpeedButton5Click(Sender: TObject);
begin
TBCONSUMO.CANCEL;
end;

procedure TFormLancamentos.SpeedButton6Click(Sender: TObject);
begin
IF APPLICATION.MESSAGEBOX('Excluir Este Registro?','Confirma',
        mb_iconquestion+mb_yesno)=id_no then abort;
TBCONSUMO.DELETE;
TBCONSUMO.Close;
TBCONSUMO.Open;
end;

procedure TFormLancamentos.SpeedButton7Click(Sender: TObject);
begin
close;
end;

procedure TFormLancamentos.DBEdit10KeyPress(Sender: TObject;
  var Key: Char);
begin
if Key in [',','.'] then Key := DecimalSeparator;
end;

procedure TFormLancamentos.Button1Click(Sender: TObject);
var vlr1,vlr2,vlr3,total1,total2:real;
VAR KMINI,KMFIM,TOTALKM:INTEGER;
begin
if (Tbconsumo.State=dsInsert) or (Tbconsumo.State=dsEdit) then

begin
KMINI:=DBEDIT7.Field.AsInteger;
KMFIM:=DBEDIT8.Field.AsInteger;
TOTALKM:=(KMFIM-KMINI);
DBEDIT9.Field.AsInteger:=TOTALKM;
       vlr1 := dbedit9.Field.AsInteger;
                vlr2 := dbedit10.Field.AsCurrency;
                         total1:=(vlr1*vlr2);
dbEdit11.field.AsFloat:= total1;
vlr3 := dbedit13.Field.AsFloat;
total2:=(total1+vlr3);
dbedit14.Field.AsFloat:=total2;
tbconsumo.post;
end;

end;

end.

obrigsdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Suspeito que seja este aqui seu botão para editar os dados, estou correto?

 

procedure TFormLancamentos.SpeedButton4Click(Sender: TObject); 
begin 
TBCONSUMO.edit; 
TBCONSUMO.CLOSE; 
TBCONSUMO.OPEN; 
end; 

Se for, o problema está aqui mesmo... veja o que você mandou fazer aqui:

 

1°) Coloque a tabela em modo de edição

2°) Feche a tabela (cancelando junto o modo de edição com o close)

3°) Reabra a tabela (que não vai estar mais nem em modo de edição ou de inserção).

 

Ou seja... seu código vai dar erro se tentar atualizar qualquer coisa... se o seu SpeedButton4 é o seu botão para edição, deixe nele só o comando TBCONSUMO.Edit.

 

[]'s

 

Ps.: É uma boa prática nomear os botões de modo que eles o ajudem a lembrar o que cada um faz sem ter que olhar no form para isso... uma sugestão de nome seria por algo do tipo: spbtnIncluir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra fiz o que você falou e continuou dando erro, mas acabei descobrindo uma coisa aqui.

 

na verdade como você pode ver no codigo abaixo eu eliminei parte do calculo

e funcionou. so não entendo o pq de eu colocar a essa primeira parte do calculo ele da erro.

 

var vlr1,vlr2,vlr3,total1,total2:real;
VAR KMINI,KMFIM,TOTALKM:INTEGER;
begin
if (Tbconsumo.State=dsInsert) or (Tbconsumo.State=dsEdit) then

begin
//kmini:=dbedit7.field.asinteger;
//kmfim:=dbedit8.field.asinteger;
//totalkm:=(kmfim-kmini);
//dbedit9.field.asinteger:=totalkm;
       vlr1 := dbedit9.field.asinteger;
                vlr2 := dbedit10.field.ascurrency;
                         total1:=(vlr1*vlr2);
dbedit11.field.asfloat:= total1;
vlr3 := dbedit13.field.asfloat;
total2:=(total1+vlr3);
dbedit14.field.asfloat:=total2;
end; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro que ocorre ainda é o mesmo que o anterior quando este trecho do código não está comentado ou é outra coisa?

 

Já debugou o código deste botão para ver em que momento está gerando a mensagem de erro?

 

[]'s

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.