Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kania

Pegando valor anterior selecionado

Recommended Posts

Olá pessoal, tem como conseguir ler a linha anterior de um select?

 

Assim dei um select na tabela MySql com loop nela, porem para fazer um cálculo de saldo atual preciso saber o valor que tem na linha anterior para que na linha atual eu possa fazer o calculo em mostrar o valor atual

 

SALDOATUAL = SALDOANTERIOR+(VALORCREDITO-VALORDEBITO)

Onde o SALDOANTERIOR é justamente o valor que se encotra na linha anterior da tabela, não se consegui explicar, hehehe vou colocar uma tabela do excel com um exemplo para ficar mais facil

 

o meu problema esta em que o SALDOANTERIOR ele deve se modificar a cada linha nova criada tendo em visata ques este novo saldo é um calculo do CREDITO - DÉBITO + SALDOANTERIOR

 

Inciiei o processo de montagem do EXTRATO porem somente o SALDO esta me atrapalhando a vida, vejam a imagem:

 

Imagem Postada

 

Esta tabela do excel exemplifica bem o que estou tentando fazer, é claro que no excel é muito mais simples de fazer as fórmulas

 

http://www.conquistta.com.br/MODELO%20DE%2...0CONQUISTTA.xls

 

Obs.: Anteriormente postei um post parecido no forum de ASP porem não consegui ajuda lá uma solução, pore isso estou colocando aqui, pode ser que de para fazer via consulta direta no BD mesmo, pelo que estou lendo na net, apesar de encontrar alguns artigos sobre recordset.MovePrevious não achei nada para esta aplicação que estou predcisando fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, depois de quebrar bastante a cabeça em tentar achar uma forma de fazer o que queria, acabei criando uma rotina muito simples e bota simples nisto que me resolveu todo o probela, estou colocando o código completo aqui caso alguém veha a precisar fazer algo parecido.

 

CÓDIGO COMPLETO, LEMBRANDO QUE ESTA PAGINA ESTA EM DEPENDENCIA DE OUTRA PAGINA QUE TEM O FORMULÁRIO COM 2 CAMPOS, DATA INICIAL E DATA FINAL, NO MEU CASO OPTEI EM FAZER A CHAMADA DO FROM EM AJAX PARA ATOMATIZAR A CONSULTA SEM PRECISAR FICAR RECARREGANDO A PAGINA ACADA MUDANÇA DE DATA, E ESTA É PAGINA QUE MOSTRA REALEMNTE TODO O PROCESSO.

 

<%Response.Charset = "ISO-8859-1" %>
<%
'IDASSOCIADOASSOCIADO = session("IDASSOCIADO")
LOGIN = session("logar")
ID = session("id")

DATAINICIAL = request.Form("DataInicio")
DATAFINAL = request.Form("DataFim")

if DATAINICIAL = "" OR DATAFINAL = "" THEN

response.Write(" VOCÊ DEVE PREENCHER UMA <b>DATA INICIAL</b> E <b>DATA FINAL</b> PARA REALIZAR SUA PESQUIZA")

else

Set RS = Server.CreateObject("adodb.recordset")
SQL = "select * from ASSOCIADOS3 where INSCRICAO='"&LOGIN&"'" 
RS.Open SQL,Conn,3,3

INSCRICAOASSOCIADO = RS("INSCRICAO")

'SELECT QUE MONTA O EXTRATO POR DATA
'FUNÇÃO PARA CONVERTER A DATA DO FORMATO 1/01/2008 PARA 20080101	
	Function Data_Br(Wdata )
Data_br = year(wdata) & "-" & mid((100+month(wdata)),2,2) & "-" & mid((100+day(wdata)),2,2)
end function
	
	Function NovaData(Wdata )
NovaData = mid((100+day(wdata)),2,2) & "/" & mid((100+month(wdata)),2,2) & "/" & year(wdata)
end function




DIA = day(DATAINICIAL)
MES = month(DATAINICIAL)
ANO = year(DATAINICIAL)
DIA2 = day(DATAFINAL)
MES2 = month(DATAFINAL)
ANO2 = year(DATAFINAL)

DATAINICIALCONV = Data_Br(DATAINICIAL)
DATAFINALCONV = Data_Br(DATAFINAL)

dim Cor

if DATAINICIAL <> "" and DATAFINAL <> "" then

'VERIFICO O TOTAL DO PERIODO
Set RSSALDOANTD = Server.CreateObject("adodb.recordset")
SALDOANTD = "SELECT COALESCE(SUM(CASE sinal WHEN 'C' THEN valor ELSE - valor END), 0) saldo  from CONTACORRENTE3 where INSCRICAO='"&INSCRICAOASSOCIADO&"' and datamovimento < '"&DATAINICIALCONV&"'" 
RSSALDOANTD.Open SALDOANTD,Conn,3,3

SALDOANTERIOR = RSSALDOANTD("saldo")




Set RSEXTDATA = Server.CreateObject("adodb.recordset")
EXTDATA = "select date_format(datamovimento, '%d/%m/%Y') as datamov, historico, sinal, valor  from CONTACORRENTE3 where INSCRICAO='"&INSCRICAOASSOCIADO&"' and datamovimento >= '"&DATAINICIALCONV&"' and datamovimento < '"&DATAFINALCONV&"' order by datamovimento asc" 
RSEXTDATA.Open EXTDATA,Conn,3,3
if RSEXTDATA.eof then
%>
<link href="../css/estilo_painel.css" rel="stylesheet" type="text/css" />


<table width="100%" border="0" cellspacing="5" cellpadding="0">
  <tr>
	<td class="fonte_atencao"><span class="fonte_vermelha">NENHUM MOVIMENTO CONSTA EM NOSSO BANCO DE DADOS ENTRE AS DATAS</span><span class="fonte_verde"> <%=DATAINICIAL%></span> <span class="fonte_vermelha">E</span><span class="fonte_verde"> <%=DATAFINAL%></span></td>
  </tr>
</table>

<%
else
%>

<table width="100%" border="0" cellspacing="0" cellpadding="5">
							  <tr>
								<td colspan="7" align="center"><table width="100%" border="0" cellspacing="5" cellpadding="0">
								  <tr>
									<td width="95" class="fonte_atencao">Legenda:</td>
									<td width="25"><span class="fonte_global_preta"><img src="imagens/cred.png" alt="" /></span></td>
									<td width="173" align="left" class="fonte_global_preta">Créditos na conta</td>
									<td width="25"><span class="fonte_global_preta"><img src="imagens/deb.png" alt="" /></span></td>
									<td width="873" align="left" class="fonte_global_preta">Débitos na conta</td>
								  </tr>
								</table></td>
							  </tr>
							  <tr>
								<td height="5" colspan="7" align="center"></td>
							  </tr>
							  <tr>
								<td colspan="7" class="style1"><table width="100%" border="0" cellspacing="0" cellpadding="0">
								  <tr>
									<td width="12"><img src="imagens/canto_esq_barra_total.gif" width="12" height="40" /></td>
									<td width="1007" align="right" background="imagens/barra_fundo_total.gif" class="fontBarraTotal">Saldo Anterior </td>
									<td width="30"><img src="imagens/seta_barra_total.gif" width="30" height="40" /></td>
									<td width="179" align="right" background="imagens/barra_fundo_total.gif" class="fontBarraTotal"><%=FormatCurrency(SALDOANTERIOR)%></td>
									<td width="13"><img src="imagens/canto_dir_barra-total.gif" width="13" height="40" /></td>
								  </tr>
								</table></td>
							  </tr>
							  
							  <tr>
								<td height="5" colspan="7" align="center"></td>
							  </tr>
							  <tr>
								<td width="150" height="30" align="center" background="imagens/fundo_titulos_extrato.gif" class="fontBarraExtrato"><span class="style9">Data</span></td>
								<td width="538" align="center" background="imagens/fundo_titulos_extrato.gif" class="fontBarraExtrato"><span class="style9">Histórico</span></td>
								<td colspan="2" align="center" background="imagens/fundo_titulos_extrato.gif" class="fontBarraExtrato">Débito</td>
								<td colspan="2" align="center" background="imagens/fundo_titulos_extrato.gif" class="fontBarraExtrato"><span class="style9">Crédito</span></td>
								<td width="163" align="center" background="imagens/fundo_titulos_extrato.gif" class="fontBarraExtrato"><span class="style9">Saldo</span></td>
  </tr>
							  
<%
Cvalor = 0
Do until RSEXTDATA.EOF

Cor = not Cor
if Cor = True then %><tr bgcolor="#e1e2e3" height="30">
<%
end if

DATAMOVIMENTO = RSEXTDATA("datamov")
HISTORICO = RSEXTDATA("historico")
CREDDEB = RSEXTDATA("sinal")
SALDO = RSEXTDATA("valor")



If Cvalor = "0"  AND CREDDEB = "C" then
SALDONOVO = SALDOANTERIOR + SALDO

ELSEIF Cvalor = "0"  AND CREDDEB = "D" then
SALDONOVO = SALDOANTERIOR - SALDO

ELSEIF Cvalor > "0"  AND CREDDEB = "C" then
SALDONOVO = SALDONOVO + SALDO

ELSEIF Cvalor > "0"  AND CREDDEB = "D" then
SALDONOVO = SALDONOVO - SALDO
END IF
%>
							 
							  
	<td align="center" valign="middle" class="fonte_global_preta"><%=DATAMOVIMENTO%></td>
	<td align="left" valign="middle" class="fonte_global_preta"><%=HISTORICO%></td>
	<td width="157" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "D" then%><span class="fonte_vermelha"><%=formatcurrency(SALDO)%></span><%end if%></td>
	<td width="24" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "D" then%><img src="imagens/deb.png"><%end if%></td>
	<td width="118" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "C" then%><span class="fonte_verde"><%=formatcurrency(SALDO)%></span><%end if%></td>
	<td width="31" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "C" then%><img src="imagens/cred.png"><%end if%></td> 
	<td width="163" align="right" valign="middle" class="fontSaldoAzul"><%=FormatCurrency(SALDONOVO)%></td>
</tr>
							 
<%
Cvalor = Cvalor+1
RSEXTDATA.movenext
loop
end if
RSEXTDATA.Close
Set RSEXTDATA = Nothing
%>
<%

'EFETUO A SOMA DOS VALORES DO PERIODO PARA MPRIMIR NO EXTRATO
Set RSTOTALPERIODO = Server.CreateObject("adodb.recordset")
TOTALPERIODO = "Select coalesce(sum(valor),0) as TOTALPERIODO from CONTACORRENTE3 where INSCRICAO='"&INSCRICAOASSOCIADO&"' and datamovimento >= '"&DATAINICIALCONV&"' and datamovimento < '"&DATAFINALCONV&"' and sinal='C'"
RSTOTALPERIODO.Open TOTALPERIODO,Conn,3,3

Set RSTOTALDESC = Server.CreateObject("adodb.recordset")
TOTALDESC = "Select coalesce(sum(valor),0) as TOTALDESCPERIODO from CONTACORRENTE3 where INSCRICAO='"&INSCRICAOASSOCIADO&"' and datamovimento >= '"&DATAINICIALCONV&"' and datamovimento < '"&DATAFINALCONV&"' and sinal='D'"
RSTOTALDESC.Open TOTALDESC,Conn,3,3

CONVBRUTO = formatnumber(RSTOTALPERIODO("TOTALPERIODO"),2)
CONVDESC = formatnumber( RSTOTALDESC("TOTALDESCPERIODO"),2)

TOTALLIQUIDO = (CONVBRUTO - CONVDESC)
TOTALLIQUIDO1 = (CONVBRUTO - CONVDESC)+SALDOANTERIOR

%>
							 <tr>
								<td align="right" class="fonte_atencao" colspan="7" height="10"></td>
							  </tr>
							   <tr>
								<td height="10" colspan="7" align="right" class="fonte_atencao"></td>
							  </tr>
							  
							  <tr>
								<td align="right" class="fonte_atencao" colspan="7"><table width="100%" border="0" cellspacing="0" cellpadding="0">
								  <tr>
									<td width="12"><img src="imagens/canto_esq_barra_total.gif" alt="" width="12" height="40" /></td>
									<td width="986" background="imagens/barra_fundo_total.gif" class="fontBarraTotal"><div align="right">Saldo do Período: </div></td>
									<td width="30" align="right"><img src="imagens/seta_barra_total.gif" alt="" width="30" height="40" /></td>
									<td width="183" background="imagens/barra_fundo_total.gif" class="fontBarraTotal"><%=formatcurrency(TOTALLIQUIDO)%></td>
									<td width="13"><img src="imagens/canto_dir_barra-total.gif" alt="" width="13" height="40" /></td>
								  </tr>
								</table></td>
							  </tr>
							  <tr>
								<td align="right" class="fonte_atencao" colspan="7"><table width="100%" border="0" cellspacing="0" cellpadding="0">
								  <tr>
									<td width="12"><img src="imagens/canto_esq_barra_total.gif" alt="" width="12" height="40" /></td>
									<td width="986" background="imagens/barra_fundo_total.gif" class="fontBarraTotal"><div align="right">Saldo Acumulado: </div></td>
									<td width="30"><img src="imagens/seta_barra_total.gif" alt="" width="30" height="40" /></td>
									<td width="183" background="imagens/barra_fundo_total.gif" class="fontBarraTotal"><%=formatcurrency(TOTALLIQUIDO1)%></td>
									<td width="13"><img src="imagens/canto_dir_barra-total.gif" alt="" width="13" height="40" /></td>
								  </tr>
								</table></td>
							  </tr>
							  
							  <tr>
								<td height="10" colspan="7" align="left" class="fonte_vermelha"><span class="fonte_atencao">Entendendo seu Extrato Detalhado:</span><br /><br />
								O Saldo do Período corresponde ao Total gerado entre as datas </span><span class="fonte_verde"> <%=DATAINICIAL%></span>e<span class="fonte_verde"> <%=DATAFINAL%></span><br />O Saldo Acumulado corresponde ao seu Saldo Anterior mais o Saldo do Período, lembrando que sempre estes valores estaram realcionados a DATA INICIAL e DATA FINAL digitadas acima.</td>
							  </tr>
							  
							  <tr>
								<td align="right" class="fonte_global_preta" colspan="7" height="10"></td>
							  </tr>
							  <tr>
								<td align="right" class="fonte_global_preta" colspan="7">Valores atualizados em <%=Now()%></td>
							  </tr>
</table>
</td>
		  </tr>
		  <tr>
			<td></td>
		  </tr>
		</table>
		
		</td>
	  </tr>
	 
	</table></td>
  </tr>
</table>
<%
RSSALDOANTD.Close
Set RSSALDOANTD = Nothing
end if
end if
%>

O SEGREDO TODO ESTA NESTA PARTE AQUI DO CÓDIGO

 

<%
Cvalor = 0
Do until RSEXTDATA.EOF

Cor = not Cor
if Cor = True then %><tr bgcolor="#e1e2e3" height="30">
<%
end if

DATAMOVIMENTO = RSEXTDATA("datamov")
HISTORICO = RSEXTDATA("historico")
CREDDEB = RSEXTDATA("sinal")
SALDO = RSEXTDATA("valor")



If Cvalor = "0"  AND CREDDEB = "C" then
SALDONOVO = SALDOANTERIOR + SALDO

ELSEIF Cvalor = "0"  AND CREDDEB = "D" then
SALDONOVO = SALDOANTERIOR - SALDO

ELSEIF Cvalor > "0"  AND CREDDEB = "C" then
SALDONOVO = SALDONOVO + SALDO

ELSEIF Cvalor > "0"  AND CREDDEB = "D" then
SALDONOVO = SALDONOVO - SALDO
END IF
%>
							 
							  
	<td align="center" valign="middle" class="fonte_global_preta"><%=DATAMOVIMENTO%></td>
	<td align="left" valign="middle" class="fonte_global_preta"><%=HISTORICO%></td>
	<td width="157" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "D" then%><span class="fonte_vermelha"><%=formatcurrency(SALDO)%></span><%end if%></td>
	<td width="24" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "D" then%><img src="imagens/deb.png"><%end if%></td>
	<td width="118" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "C" then%><span class="fonte_verde"><%=formatcurrency(SALDO)%></span><%end if%></td>
	<td width="31" align="right" valign="middle" class="fonte_global_preta"><%if CREDDEB = "C" then%><img src="imagens/cred.png"><%end if%></td> 
	<td width="163" align="right" valign="middle" class="fontSaldoAzul"><%=FormatCurrency(SALDONOVO)%></td>
</tr>
							 
<%
Cvalor = Cvalor+1
RSEXTDATA.movenext
loop
end if
RSEXTDATA.Close
Set RSEXTDATA = Nothing
%>

AQUI É ONDE OCORRE OS CÁLCULOS QUE APARECEM NA LISTAGEM

 

CREDDEB = RSEXTDATA("sinal")
SALDO = RSEXTDATA("valor")



If Cvalor = "0"  AND CREDDEB = "C" then
SALDONOVO = SALDOANTERIOR + SALDO

ELSEIF Cvalor = "0"  AND CREDDEB = "D" then
SALDONOVO = SALDOANTERIOR - SALDO

ELSEIF Cvalor > "0"  AND CREDDEB = "C" then
SALDONOVO = SALDONOVO + SALDO

ELSEIF Cvalor > "0"  AND CREDDEB = "D" then
SALDONOVO = SALDONOVO - SALDO
END IF

SE PERCEBERM UTILIZEI UMA VARIAVEL CHAMADA Cvalor QUE É RESPONSÁVEL POR VERIFICAR QUL O INDICE DA LINHA E ASSIM PEGAR O TAL DO SALDO ANTERIOR ATUALIZADO, ESTE FOI O MACETE QUE CONSEGUI VAZER

 

Bom esta ai, se servir para alguém fiquem a vontade para utuilizar e caso alguém faça melhorias por favor postar aqui para que possamos estar aprendendo cada dia mais.

 

Abraços a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for em ASP é fácil.

só você colocar o valor do rs atual para uma variavel e somar com ela mesma.

 

tipo

select * from conta_do_banco

saldo=0

while not rs.eof

deposito_dia=rs("deposito")

debito_dia =rs("debito")

saldo=saldo+deposito

saldo=saldo-debito

deposito=0

debito=0

rs.movenext

wend

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacalhais a parte...

 

 

Set @SALDOATUAL:=0;

select * , @SALDOATUAL:= @SALDOATUAL+(VALORCREDITO-VALORDEBITO) from tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.