Fórum Erro - Not in Edit mode? Pq esta ocorrendo este erro? #330281
28/09/2006
0
var vsaldo : double; begin vsaldo:= 0; //-------------------------calculos soma de saldos----------------------------------- aguardedadoson; with dm.calculos do begin close; sql.clear; sql.add(´select mes, ano, dataextenso, conta, numconta, nomeconta, coalesce(sum(valord),0)as debito, coalesce(sum(valorc),0)as credito, (coalesce(sum(valord),0) - coalesce(sum(valorc),0))as saldo from tbconta´); sql.add(´WHERE (cast(conta as Integer) between ´+ QuotedStr(Edit1.Text) +´ and ´+ QuotedStr(combobox2.Text) +´) and (ano <= ´ + quotedStr(ComboBox1.Text) + ´)´); sql.add(´group by mes, ano, dataextenso, conta, numconta, nomeconta´); sql.add(´order by mes, ano´); open; dm.calculos.First; while not dm.calculos.Eof do begin vsaldo:=dm.calculos.fieldbyname(´saldo´).asFloat+vsaldo; dm.calculos.FieldByName(´mes´).asString:=dm.calculos.fieldbyname(´mes´).asString; [b]dm.calculos.FieldByName(´ano´).asString:=dm.calculos.fieldbyname(´ano´).asString;[/b] dm.calculos.FieldByName(´debito´).asFloat:=dm.calculos.FieldByName(´debito´).AsFloat; dm.calculos.FieldByName(´credito´).asFloat:=dm.calculos.FieldByName(´credito´).AsFloat; dm.calculos.FieldByName(´saldo´).asFloat:=vsaldo; dm.calculos.Next; end; end; //-----------------------------------final codigo soma de calculo------------------------------- //------------soma totaldebitos--------------- with dm.somad do begin close; sql.clear; sql.add(´select coalesce(sum(valord),0)as totdebito from tbconta´); sql.add(´WHERE (cast(conta as Integer) between ´+ quotedstr(Edit1.Text) +´ and ´+ quotedstr(combobox2.Text) +´) and (ano = ´ + quotedStr(ComboBox1.Text) + ´)´); open; end; //---------------------final soma debito------------ //------------soma totalcredito--------------- with dm.somac do begin close; sql.clear; sql.add(´select coalesce(sum(valorc),0)as totcredito from tbconta´); sql.add(´WHERE (cast(conta as Integer) between ´+ quotedstr(Edit1.Text) +´ and ´+ quotedstr(combobox2.Text) +´) and (ano = ´ + quotedStr(ComboBox1.Text) + ´)´); open; end; //---------------------final soma credito------------ if DM.calculos.isempty then showmessage(´Nao há registro neste numero de conta. Por favor tente novamente´); aguardedadosoff; ---------------------------------------------
Ocorre o erro e aponta para a linha em negrito no codigo acima, e nao estou conseguindo entender o motivo, pois eu nao estou editando nada simplesmente estou fazendo uma pesquisa filtrando alguns edits e combobox.
Bom primeiro estava danto esse erro:
[b:7a997e7b68]Size mismatch for fields ´Debito´ expecting O actual 2[/b:7a997e7b68] percebi que era erro nos fields ai resolvi mudar e colocar no data module aonde guardo os componentes ibQuery do mesmo jeito que esta o codigo acima, menos alguns itens, ai parou de dar esse erro mais agora insiste neste erro [b:7a997e7b68]Not in Edit mode[/b:7a997e7b68].
No Ibquery esta assim a propriedade SQL
select mes, ano, dataextenso, conta, numconta, nomeconta, coalesce(sum(valord),0)as debito, coalesce(sum(valorc),0)as credito, (coalesce(sum(valord),0) - coalesce(sum(valorc),0))as saldo from tbconta
group by mes, ano, dataextenso, conta, numconta, nomeconta
order by mes, ano
deixei assim na query para carregar os campo no fields, e a propriedade do mesmo active=false, pois soh carrego dentro do form cfe. o codigo acima.
Nao sei o motivo, e se algum souber e puder me ajudar ficarei grato.
[color=red:7a997e7b68]Obs: Essa query eh somente pra consulta com filtros, nao podendo editar nada nela, ou seja soh serve para navegação nao inserir nem editar[/color:7a997e7b68]
Adriano.
Adriano_servitec
Curtir tópico
+ 0Posts
28/09/2006
Abdigadiga
dm.calculos.First;
while not dm.calculos.Eof do
begin
vsaldo:=dm.calculos.fieldbyname(´saldo´).asFloat+vsaldo;
dm.calculos.FieldByName(´mes´).asString:=dm.calculos.fieldbyname(´mes´).asString;
esta última linha está sim editando sua query!
depois do dm.calculos.first;
coloca
depois do dm.calculos.edit;
ve se era só isso
espero ter ajudado
Gostei + 0
28/09/2006
Adriano_servitec
Tem outra maneira de fazer isso? pq se eu fizer assim:
[b:6e51283408]while not dm.calculos.Eof do
begin
vsaldo:=dm.calculos.fieldbyname(´saldo´).asFloat+vsaldo;
dm.calculos.Next;
end;
end; [/b:6e51283408]
Nao soma os saldos acumulados cfe.o mes e sim somente o debito e o credito = saldo (mais por linha) e preciso que vai acumulando o saldo ateh aonde eu pedir.
tipo assim:
debito----------creidito---------saldo
100,00----------100,00---------100,00
0,00-------------200,00---------300,00
200,00----------0,00------------100,00
Ou seja ir puxando o saldo
Gostei + 0
29/09/2006
Adriano_servitec
Nunca usei o listview, fiz um codigo baseado no que eu encontrei na net, mais nao mostra nada assim. :(
procedure TForm3.Button2Click(Sender: TObject); var vsaldo, saldoanterior, saldofinal : double; ListItem : TListItem; begin saldoanterior:=0; vsaldo:=0; saldofinal:=0; //-------------------------calculos soma de saldos----------------------------------- with dm.tcalculos do begin close; sql.clear; sql.add(´select mes, ano, dataextenso, dc, conta, numconta, nomeconta, coalesce(sum(valord),0)as debito, coalesce(sum(valorc),0)as credito, (coalesce(sum(valord),0) - coalesce(sum(valorc),0))as saldo from tbconta´); sql.add(´WHERE (cast(conta as Integer) between ´+ QuotedStr(Edit1.Text) +´ and ´+ QuotedStr(combobox2.Text) +´) and (ano <= ´ + quotedStr(ComboBox1.Text) + ´)´); sql.add(´group by mes, ano, dataextenso, dc, conta, numconta, nomeconta´); sql.add(´order by mes, ano´); open; dm.tcalculos.First; end; while not dm.tcalculos.Eof do begin with ListView1 do vsaldo:=dm.tcalculos.fieldbyname(´saldo´).asFloat+vsaldo; ListItem:= ListView1.Items.Add; ListItem.Caption:=(´Listagem´); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´mes´).asString); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´ano´).asString); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´debito´).VALUE); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´credito´).VALUE); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´saldo´).VALUE); dm.tcalculos.Next; end;
dessa forma eh como mostrava no dbgrid, mais com o listview nao compila.. :(
dm.calculos.FieldByName(´mes´).asString:=dm.calculos.fieldbyname(´mes´). asS tring; dm.calculos.FieldByName(´ano´).asString:=dm.calculos.fieldbyname(´ano´).asS tring; dm.calculos.FieldByName(´debito´).asFloat:=dm.calculos.FieldByName(´debito´ ).AsFloat; dm.calculos.FieldByName(´credito´).asFloat:=dm.calculos.FieldByName(´credit o´).AsFloat; dm.calculos.FieldByName(´saldo´).asFloat:=vsaldo;
[color=blue:601692cfd9]O pior eh que testei o mesmo programa no meu PC em casa e funciona certinho como tinha postado acima no primeiro post, soh nao funciona aqui mesmo no meu trabalho...Muito estranho, mais gostaria de saber se da para mostrar os dados atravez de um listview, pois pra mim o importante eh mostrar o resultado na tela[/color:601692cfd9]
Gostei + 0
02/10/2006
Adriano_servitec
procedure TForm3.Button2Click(Sender: TObject); var vsaldo, saldoanterior, saldofinal : double; ListItem : TListItem; begin saldoanterior:=0; vsaldo:=0; saldofinal:=0; //-------------------------calculos soma de saldos----------------------------------- with dm.tcalculos do begin close; sql.clear; // sql.add(´select mes, ano, dataextenso, dc, conta, numconta, historico, nomeconta, coalesce(sum(valord),0)as debito, coalesce(sum(valorc),0)as credito, (coalesce(sum(valord),0) - coalesce(sum(valorc),0))as saldo from tbconta´); sql.add(´WHERE (cast(conta as Integer) between ´+ QuotedStr(ComboBox1.Text) +´ and ´+ QuotedStr(combobox2.Text) +´) and (ano = ´ + quotedStr(ComboBox3.Text) + ´)´); sql.add(´group by mes, ano, dataextenso, dc, conta, numconta, historico, nomeconta´); sql.add(´order by mes, ano´); open; end; // Limpa o Conteudo Existente no ListView ListView1.Items.Clear; // Posicionamos no Primeiro Registro dm.tcalculos.First; while not dm.tcalculos.Eof do begin vsaldo:=dm.tcalculos.fieldbyname(´saldo´).asFloat+vsaldo; ListItem:= ListView1.Items.Add; // Adiciona dados a Coluna // Verifica qual o Icone deve ser apresentado if Dm.TcalculosNomeConta.Value = ´CAIXA´ then ListItem.ImageIndex := 0 else ListItem.ImageIndex := 1; ListItem.Caption :=Dm.tCalculosNomeConta.Value; ListItem.SubItems.Add(dm.tcalculos.FieldByName(´historico´).asString); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´mes´).Value); ListItem.SubItems.Add(dm.tcalculos.FieldByName(´ano´).asString); ListItem.SubItems.Add(format(´¬15.2n´,[dm.tcalculos.FieldByName(´debito´).asfloat])); ListItem.SubItems.Add(format(´¬15.2n´,[dm.tcalculos.FieldByName(´credito´).asfloat])); ListItem.SubItems.Add(formatfloat(´,,0.00´,dm.tcalculos.FieldByName(´saldo´).VALUE)); dm.tcalculos.Next; end;
Esta funcionando, mais o que eu gostaria eh que no campo SALDO fosse somando os valores e nao estou conseguindo tipo assim
Ou seja eu nao estou conseguindo mostrar o resultado do saldo corretamente, pois precisa ir somando e acumulando o saldo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)