Fórum Erro - Not in Edit mode? Pq esta ocorrendo este erro? #330281

28/09/2006

0

Pessoal a um tempo atraz herdei um programa para dar continuidade nos fontes e estou trabalhando com ele [b:7a997e7b68]ateh entao esse codigo que vou postar agora funcionava certo[/b:7a997e7b68], mais hoje ja nao funcionou mais.
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

Adriano_servitec

Responder

Posts

28/09/2006

Abdigadiga

cara parei por aqui ao ver seu código.


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


Responder

Gostei + 0

28/09/2006

Adriano_servitec

Olah amigo, mais eu nao quero que edita somente queria que mostrasse os saldos no campo saldo de um grid.

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


Responder

Gostei + 0

29/09/2006

Adriano_servitec

E se eu usar um listview como faço para mostrar os valores?

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]


Responder

Gostei + 0

02/10/2006

Adriano_servitec

Olah pessoal, estou usando um listwiew para colocar os valores que eu filtro cfe. a condiçao where do SQL
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
debito----------creidito---------saldo 100,00----------100,00---------100,00 0,00-------------200,00---------300,00 200,00----------0,00------------100,00

Ou seja eu nao estou conseguindo mostrar o resultado do saldo corretamente, pois precisa ir somando e acumulando o saldo.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar