wsilva7 0 Denunciar post Postado Outubro 23, 2009 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
Chrnos 30 Denunciar post Postado Outubro 23, 2009 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
wsilva7 0 Denunciar post Postado Outubro 23, 2009 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
Chrnos 30 Denunciar post Postado Outubro 23, 2009 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
wsilva7 0 Denunciar post Postado Outubro 23, 2009 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
Chrnos 30 Denunciar post Postado Outubro 23, 2009 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
wsilva7 0 Denunciar post Postado Outubro 23, 2009 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
Chrnos 30 Denunciar post Postado Outubro 23, 2009 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