Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
Poste o código completo para análise da rotina em questão.
[]'s
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);QRYCODCONSUMO.CLOSE;
QRYCODCONSUMO.OPEN;
TBCONSUMOCODIGOCONSUMO.VALUE:=1 + QRYCODCONSUMOMAX.VALUE;
end;
procedure TFormLancamentos.SpeedButton2Click(Sender: TObject);TBCONSUMO.APPEND;
DBEDIT2.SetFocus;
end;
procedure TFormLancamentos.SpeedButton3Click(Sender: TObject);begin
TBCONSUMO.POST;
TBCONSUMO.CLOSE;
TBCONSUMO.OPEN;
end;
end;
procedure TFormLancamentos.SpeedButton4Click(Sender: TObject);TBCONSUMO.edit;
TBCONSUMO.CLOSE;
TBCONSUMO.OPEN;
end;
procedure TFormLancamentos.SpeedButton5Click(Sender: TObject);TBCONSUMO.CANCEL;
end;
procedure TFormLancamentos.SpeedButton6Click(Sender: TObject); mb_iconquestion+mb_yesno)=id_no then abort;
TBCONSUMO.DELETE;
TBCONSUMO.Close;
TBCONSUMO.Open;
end;
procedure TFormLancamentos.SpeedButton7Click(Sender: TObject);close;
end;
procedure TFormLancamentos.DBEdit10KeyPress(Sender: TObject;
var Key: Char);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
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.
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.
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;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
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