Fórum Como calcular o saldo automaticamente a cada lanc. DBGrid #283942

06/06/2005

0

Amigos,
tenho uma tabela

[b:c47107dd13]CONTACORRENTE[/b:c47107dd13]
CodCc integer (auto inc)
CodCliente integer
Data date
Tipo varchar(1) //Se for credito C se for débito D
Valor decimal(9,2)

o q eu quero é listar os lançamentos de um período e q o sistema calcule os saldos após cada lançamento no DBGrid.

[b:c47107dd13]DBGrid[/b:c47107dd13]
DATA - TIPO - VALOR - SALDO

01/06/2005 - C - 10,00 - 10,00
01/06/2005 - C - 5,00 - 15,00
02/06/2005 - D - 6,00 - 9,00
03/06/2005 - D - 5,00 - 4,00
03/06/2005 - C - 2,00 - 6,00

espero q tenha sido claro. mas qualquer coisa me perguntem para eu esclarecer melhor a minha dúvida.

obrigado a todos q puderem e não puderem me ajudar.


Orlando Frade

Orlando Frade

Responder

Posts

06/06/2005

Cabelo

Utilize um campo calculado no DBGrid, para executar esta operação.

Para isso, entre no fields editor do seu dataset e clique com o botõ direito do mouse sobre e ele e dê um New Field, depois disso selecione as opções adequadas do seu campo, selecione o type como calculated.

Depois disse dê um nome a este campo. Você deve selecionar via banco o saldo até o último lançamento do início do período, depois disso no evento OnCalcFields use assim :

Campo calculado := Saldo Inicial + Lançamento;

Assim deve funcionar.


Responder

Gostei + 0

13/11/2011

Gaucho.gilson

Avalie a situação, no Form PESQCAIXA possuo um DBGRID, ligado a uma ZQuery, q entre outros campos mostra o R$ LANÇ, R$ SALDO e TIPO (Despesa ou Receita), a ideia é q funcione como extrato de banco, onde a cada novo lançamento a coluna SALDO receba o valor do Saldo Anterior somando ou diminuindo o R$ LANÇ de acordo ao TIPO (Despesa ou Receita), qdo eu gero uma consulta GERAL com todos os lançamentos, tudo OK, o problema é qdo eu filtro por um periodo (data) ou tipo (despesa ou receita), nao estou conseguindo atualiza-la a cada lançamento, ou seja, é necessario pegar o saldo da linha anterior efetuar o calculo conforme tipo. A atraves de sql nao fui bem sucedido, após consultas em fóruns li sobre TRIGGERS ou STORED PROCEDURE, gostaria c possivel contar com tua ajuda, pois estou começando a desesperar (hehe), haja vista q nao consigo uma solução para esta situação, verifique as situações possiveis (SQL, TRIGGER ou STORED PROCEDURE) e veja como consegue me ajudar. Segue abaixo e em ANEXO algumas informações para facilitar o entendimento da extrutura...

Delphi 7 / Mysql / Zeos


Tabela CAIXA...

CREATE TABLE `caixa` (
`CX_cd` int(10) NOT NULL auto_increment,
`CX_dtAtual` date NOT NULL,
`CX_desc` varchar(50) NOT NULL,
`CX_valLan` float(8,2) NOT NULL,
`CX_saldo` float(8,2) NOT NULL,
`CX_tipo` varchar(10) NOT NULL,
`CX_obs` text,
`COR_cd` int(10) default NULL,
`USU_cd` int(10) default NULL,
`MOT_cd` int(10) default NULL,
PRIMARY KEY (`CX_cd`),
UNIQUE KEY `CX_cd` (`CX_cd`),
KEY `COR_cd` (`COR_cd`),
KEY `USU_cd` (`USU_cd`),
KEY `MOT_cd` (`MOT_cd`),
CONSTRAINT `caixa_fk` FOREIGN KEY (`COR_cd`) REFERENCES `corridas` (`COR_cd`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `caixa_fk1` FOREIGN KEY (`USU_cd`) REFERENCES `usuarios` (`USU_cd`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `caixa_fk2` FOREIGN KEY (`MOT_cd`) REFERENCES `motocicletas` (`MOT_cd`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 AVG_ROW_LENGTH=16384 COMMENT=’InnoDB free: 3072 kB; (`COR_cd`) REFER `me/corridas`(`COR_cd’;




SQL (query) Pesquisa Form PESQCAIXA...

procedure TFormPesqCaixa.EditCX_pesquisaChange(Sender: TObject);
begin
if (RG_PesqCaixa.ItemIndex = 1) then
begin
with dm.ZQ_caixa do
begin
Close;
with sql do
begin
Clear;
add ( select * from caixa);
add ( where CX_dtAtual >= :data1 and CX_dtAtual = :data1 and CX_dtAtual = :data1 and CX_dtAtual = :data1 and CX_dtAtual = :data1 and CX_dtAtual = :data1 and CX_dtAtual
Responder

Gostei + 0

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

Aceitar