kania 0 Denunciar post Postado Setembro 5, 2008 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: 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
kania 0 Denunciar post Postado Setembro 5, 2008 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
davisvasconcellos 0 Denunciar post Postado Setembro 5, 2008 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
giesta 29 Denunciar post Postado Setembro 6, 2008 Bacalhais a parte... Set @SALDOATUAL:=0; select * , @SALDOATUAL:= @SALDOATUAL+(VALORCREDITO-VALORDEBITO) from tabela Compartilhar este post Link para o post Compartilhar em outros sites