Ir para conteúdo
Fórum Script Brasil
  • 0

Subtrair Valores Em Campo Do Bd


maxwell2

Pergunta

Olá Amigos, Admiro muito o fórum e por isso que sempre busco auxilio para implementar meus codigos com vocês.

O que eu preciso é aprender a logica de subtração e soma de um valor em tabelas de bd, seria o seguinte:

Tenho um codigo que exibe varios usuarios e seus respectivos creditos (numeros), gostarias de poder subtrair ou somar uma quantidade de creditos, porem só sei fazer alterações do tipo: No campo CREDITOS do access tinha um valor 2 e é substituido por 5, sendo que eu queria o valor 7 (2+5).

Ou seja o que eu quero é que digitado em um campo input possa ser somado ou subtraido no valor já gravado no bd access, não quero fazer a alteração e sim a soma ou subtração.

O código que eu uso para leitura é:

<% Response.Buffer = True %>
<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
set rs=conn.execute("select*from codigos where codigo = '1' ")

%>
<table width=100% border=0><tr><td align=75% valign=top>

<table width=100% border=0>
<tr>
<td width=20% align=center bgcolor=cccccc><font size=1 face=verdana><B>USUARIO</td>
<td width=20% align=center bgcolor=cccccc><font size=1 face=verdana><B>CREDITOS</td>
<td width=20% align=center bgcolor=cccccc><font size=1 face=verdana><B>CÓDIGO</td>
<td width=20%></td>
</tr>
</table>

<%do until rs.eof%>
<table width=100%>
<form action="retira_creditos.asp" method="post">
<input type="hidden" name="id" value="<%=rs("id")%>">
<tr>
<td width=20% align=center><font size=2 face=verdana><%=rs("usuario")%></td>
<td width=20% align=center><font size=2 face=verdana><%=rs("creditos")%></td>
<td width=20% align=center><input type="text" size=18 name="creditos" value=""></td> ' Aqui vou digitar uma quantidade X para subtarir do campo CREDITOS do access<td width=20%><input type="submit" value="Salvar" name="B1"></td>
</tr>
</form>
</table>
<% rs.movenext
loop
conn.close
%>

Agradeço a quem me puder ajudar.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Não sei se entendi sua dúvida, mas seria algo como:

conexao.execute("Update tabela set creditos=creditos+2")
Ou seja, soma dois ao campo "credito" todos os registros !
Obrigado, Pois percebi que sua dica eu teria que incluir o nº que quero somar/subtrair mas como faço para enviar esse valor de um formulario Eu tenho o codigo de alteração, como eu faço essa sua modificação para ele aceitar uma subtração?
<%@ Language=VBScript %>
<%response.buffer=true%>

<%
cnpath="DBQ=" & Server.MapPath(".BANCO.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
conn.Execute("update DADOS set id='"&Request.Form("id")&"', credito='"&Request.Form("credito")&"' where id="&Request.Form("id")&"")
Response.Redirect"index.asp"
%>

Editado por Rafael Spilki
tags code
Link para o comentário
Compartilhar em outros sites

  • 0

Olá, tente assim

Crie primeiro uma variavel que vai pegar o valor do capo:

Valor1 = Request.form("Nome_do_campo_do_formulario")
NO seu Update você vai fazer a utlização desta variavel assim
conexao.execute("Update tabela set creditos=creditos+'"&valor'&"'")
Eu em alguns casos gosto de pegar o valor que já tem no banco antes, fazer o calculo separado e depois dar o update, assim evita erros, seria algo assim
Valor1 = Request.form("Nome_do_campo_do_formulario")

aqui eu faço o Selet e pego o valor que já tenho no campo com o valor antigo

ValorNovo = ValorAntigo + Valor1

Dou update na tabela agora com o novo valor

conexao.execute("Update tabela set creditos=creditos+'"&ValorNovo'&"'")

Editado por kania
Link para o comentário
Compartilhar em outros sites

  • 0
Olá, tente assim

Crie primeiro uma variavel que vai pegar o valor do capo:

Valor1 = Request.form("Nome_do_campo_do_formulario")
NO seu Update você vai fazer a utlização desta variavel assim
conexao.execute("Update tabela set creditos=creditos+'"&valor'&"'")
Eu em alguns casos gosto de pegar o valor que já tem no banco antes, fazer o calculo separado e depois dar o update, assim evita erros, seria algo assim
Valor1 = Request.form("Nome_do_campo_do_formulario")

aqui eu faço o Selet e pego o valor que já tenho no campo com o valor antigo

ValorNovo = ValorAntigo + Valor1

Dou update na tabela agora com o novo valor

conexao.execute("Update tabela set creditos=creditos+'"&ValorNovo'&"'")
Olá fiz o que você me passou mas ai acontece o seguinte: Ele não faz a soma "matermatica" e sim acrecenta no campo, ficou assim: Tinha 10 no campo Creditos Coloquei + 20 Ai ficou 1020 e não 30 O codigo ficou assim: Codigo Lista.asp:
<% Response.Buffer = True %>
<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
set rs=conn.execute("select*from users")
%>

<%do until rs.eof%>

<table width="100%" border="0" cellspacing="5" cellpadding="0" align="center">
    <tr>
    <td BGCOLOR=CCCCCC><%=rs("user")%></td>
    <td width="80%" BGCOLOR=CCCCCC><%=rs("creditos")%></td>
    <td width="20%" BGCOLOR=#D0D0D0> <a href="formulario.asp?id=<%=rs("id")%>">Editar</a>]</td>
    </tr><TR><TD BGCOLOR=000000 COLSPAN=3></TD></TR>
</table>

<% rs.movenext
loop
conn.close
%>
Codigo Formulario.asp Alteração:
<% Response.Buffer = True %>

<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
set rs=conn.execute("select*from users where id="&request.querystring("id")&"")
%>

<form action="altera.asp" method="post">
   <input type="text" name="creditos" size="40" value="<%=rs("creditos")%>">
   <input type="hidden" name="id" value="<%=rs("id")%>">
   <input type="submit" value="Somar" name="B1">
</form>
Codigo Altera.asp:
<%@ Language=VBScript %>
<%response.buffer=true%>


<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
conn.Execute("update users set creditos=creditos+'"&Request.Form("creditos")&"' where id="&Request.Form("id")&"")
Response.Redirect"lista.asp"
%>

Link para o comentário
Compartilhar em outros sites

  • 0

O campo do banco de dados é tipo numérico ??

Se for string irá acontecer isso mesmo !

No caso de o campo do banco de dados ser numérico faça o seguinte:

conexao.execute("update tabela set credito=val(credito)+"valor)
Verifique também se sua variável é uma string Se for, faça isso:
conexao.execute("update tabela set credito=credito+"val(valor))

Qualquer dúvida posta aí !

Link para o comentário
Compartilhar em outros sites

  • 0
O campo do banco de dados é tipo numérico ??

Se for string irá acontecer isso mesmo !

No caso de o campo do banco de dados ser numérico faça o seguinte:

conexao.execute("update tabela set credito=val(credito)+"valor)
Verifique também se sua variável é uma string Se for, faça isso:
conexao.execute("update tabela set credito=credito+"val(valor))
Qualquer dúvida posta aí !
OK, funcionou beleza, só que para numeros com virgulas os calculos ficam errados, vejam o codigo que cheguei:
<%@ Language=VBScript %>
<%response.buffer=true%>
<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
conn.Execute("update users set creditos=val(creditos)+'"&Request.Form("creditos")&"' where id="&Request.Form("id_user")&"")
Response.Redirect"admin_codigos.asp"
%>

Por exemplo seu eu tiver um valor no bd access 10 e incluir com o código acima o valor 1,5 o total será 11,5 (até ai tudo bem) mas se incluir novamente 1,5 ele muda para 12,5 e não 13 que seria o calculo correto, alguém sabe se devo mudar algo interno na configuração do banco access?

Link para o comentário
Compartilhar em outros sites

  • 0
Tente trocar a vírgula (,) pelo ponto (.) !

Não funcionou... o codigo entede como se não houvesse o ponto. Se o valor no bd é 5 e eu incluir 1.5 ele fica com 20 (ou seja ele entende como 5 + 15, ignorando o ponto)

Se eu coloco virgula o primeiro calculo é correto mas os demais ficam errado: Tenho 5 no bd e incluo 1,5 ele fica com 6,5 se eu incluir + 1,5 ele fica com 7,5 (ou seja da a entender que ele ignora o 0,5 e soma apenas 1)

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, incialmente peço para que você poste sempre seus códigos dentro das tags code, veja:

  • Quando precisar postar algum código, utilize as tags específicas, como [html] [/html] para códigos em HTML ou [code] [/code] para outros códigos.

    Existe também o [codebox] [/codebox] para códigos muito extensos, mas muitas vezes ele acaba atrapalhando a interpretação do mesmo em vez de ajudar.

    Se precisar postar o código de mais de um arquivo, escreva o nome do mesmo em negrito, logo antes da caixa de código, assim eles poderão ser identificados pelos outros usuários.

    Este simples recurso facilita incrivelmente na hora de ler ou analisar um código.

Leia mais em: http://scriptbrasil.com.br/forum/index.php?showtopic=131728

Quanto a sua dúvida:

Mostre como ficou o seu replace da virgula por ponto!

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0
Olá, incialmente peço para que você poste sempre seus códigos dentro das tags code, veja:
  • Quando precisar postar algum código, utilize as tags específicas, como [html] [/html] para códigos em HTML ou [code] [/code] para outros códigos.

    Existe também o [codebox] [/codebox] para códigos muito extensos, mas muitas vezes ele acaba atrapalhando a interpretação do mesmo em vez de ajudar.

    Se precisar postar o código de mais de um arquivo, escreva o nome do mesmo em negrito, logo antes da caixa de código, assim eles poderão ser identificados pelos outros usuários.

    Este simples recurso facilita incrivelmente na hora de ler ou analisar um código.

Leia mais em: http://scriptbrasil.com.br/forum/index.php?showtopic=131728

Quanto a sua dúvida:

Mostre como ficou o seu replace da virgula por ponto!

[]'s

Lembrado que uso uma pagina de formulario para enviar os dados.

Olá Rafael o que fiz foi ao digiatr no campo do input o valor de 1.5 ao invés de 1,5, mas como relatei o codigo interpletou como o numero 15 e não como 1.5, já o 1,5 ele ignora o 0,5 e pega apenas o 1 para a soma: o codigo foi:

<%@ Language=VBScript %>
<%response.buffer=true%>
<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
conn.Execute("update users set creditos=val(creditos)+'"&Request.Form("creditos")&"' where id="&Request.Form("id_user")&"")
Response.Redirect"admin_codigos.asp"
%>

Link para o comentário
Compartilhar em outros sites

  • 0
Uhm... não entendi o porque interpretou como 15!

Tem alguma função (JS) ou algum replace envolvendo esse INPUT?

Poste o form que envia esse dado, especificando o trecho do INPUT com problema e poste o trecho do codigo que recebe esse dado!

[]'s Rafael Spilki

Rafael utilizo um formulario comum, veja:

Pagina admin_creditos.asp

<form action="retira_creditos.asp" method="post">
<br>
<input type="text" name="creditos" value="">
<input type="text" name="id_user" value="">
<input type="submit" value="Somar Créditos">
</form>
Pagina soma_creditos.asp
<%@ Language=VBScript %>
<%response.buffer=true%>
<%
cnpath="DBQ=" & Server.MapPath("users.mdb")
DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DataSource
conn.Execute("update users set creditos=val(creditos)+'"&Request.Form("creditos")&"' where id="&Request.Form("id_user")&"")
Response.Redirect"admin_creditos.asp"
%>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...