Como calcular o saldo automaticamente a cada lanc. DBGrid
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.
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
Curtidas 0
Respostas
Cabelo
06/06/2005
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.
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.
GOSTEI 0
Gaucho.gilson
06/06/2005
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
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
GOSTEI 0