Ir para conteúdo

POWERED BY:

Arquivado

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

baladaclick

problema com operação subtração

Recommended Posts

Bom dia moçada!!! preciso de ajuda novamente, seguinte...estou tentando fazer um estoque simples. eu tenho na minha tabela os campo "quantidade", "tipo_mov"(refere-se a E e S - Entrada e Saída) e "id_produto"eu tenho em um RecordSet o seguinte codigo

SELECT DISTINCT nome, SUM(qtde) AS soma  FROM tb_movimento, tb_produto WHERE tb_movimento.id_produto = tb_produto.id_produto   AND tipo_mov = 'e' GROUP BY nome

este rs é a soma dos produtos com o tipo de movimento = e (entrada). até ai tudo bem, funciona belezinhaagora neste mesmo RS eu quero fazer esta soma de produtos com o tipo de movimento = e subtrair a soma de produtos com o tipo de movimento = s (saída)por exemplo: EstoqueAtual = QtdeEntrada - QtdeSaidaeu tentei criar 2 recordsets, uma para tipo de movimentos = "e" e outro "s". dá certo mas depois na paginação eu não sei qual recordset colocar.enfim, quero fazer a subtração de entrada - saidalembrando que o tipo_mov fica numa tabela só que é a tb_movimentos.quem puder me ajudar fico grato....abraço valewwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

não sou muito bom em Access, não sei se o que fiz funciona no Access faça um teste e vê se resolve:

SELECT DISTINCT prd.nome,
                Sum(e.qtde) AS soma_entrada,
                Sum(s.qtde) AS soma_saida,
                ( Sum(e.qtde)-Sum(e.qtde) ) AS balanco

  FROM tb_produto prd

 INNER JOIN tb_movimento e
    ON e.id_produto = prd.id_produto
   AND e.tipo_mov = 'e'

 INNER JOIN tb_movimento s
    ON s.id_produto = prd.id_produto
   AND s.tipo_mov = 's'

 ORDER BY prd.nome 
--GROUP BY nome

[]tz e boa sorte! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque?

Qual foi o erro?

 

O Access não aceita Inner Join, o resultado veio errado, deu erro mesmo ou o que foi?

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo de erro:Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta ''./estoque/contagem_estoque.asp, line 13só nao entendi pq você colocou e.qtde / s.qtde / prd nome sendo que no bnco eu nao tenho estes campos . eu tenho um campo geral chamado qtdeesse e.qtde não teria que declarar ele e mostrar que o select dele são registros com o campo tipo_mov = e?to meio confuso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou usando o recurso Inner Join apelidando as tabelas (no caso a mesma tabela duas vezes) justamente para isso.

 

Repare que eu faço uma junção (join) com a tabela tb_movimento duas vezes.

Porque?

Em uma eu busco só as ENTRADAS (tp='e') e apelido a tabela de 'e'.

E na outra eu busco só as SAIDAS (tp='s') e apelido a tabela de 's'.

 

Ou seja, eu agora tenho dois conjuntos com os dados da tabela tb_movimento da forma que queriamos.

O conjunto 'e' traz só as entradas e o conjunto 's' traz só as saídas.

 

 

Sempre que você apelida uma tablea (define um alias a ela) é conveniente que passemos a trabalhar com os campos preseguidos do alias da tabela (apelido.campo) conforme você viu na query que eu montei.

 

 

Já esse erro que deu to achando estranho pois deve ser uma besteirinha.

Cole aqui as linhas do seu código todo indicando por favor qual é a linha 13.

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ASP
<%

Dim count_estoque

Dim count_estoque_cmd

Dim count_estoque_numRows

 

Set count_estoque_cmd = Server.CreateObject ("ADODB.Command")

count_estoque_cmd.ActiveConnection = MM_Conn_STRING

count_estoque_cmd.CommandText = SELECT DISTINCT prd.nome,

 

                                Sum(e.qtde) AS soma_entrada,

                                Sum(s.qtde) AS soma_saida,

                                ( Sum(e.qtde)-Sum(e.qtde) ) AS balanco

 

  FROM tb_produto prd

 

 INNER JOIN tb_movimento e

        ON e.id_produto = prd.id_produto

   AND e.tipo_mov = 'e'

 

 INNER JOIN tb_movimento s

        ON s.id_produto = prd.id_produto

   AND s.tipo_mov = 's'

 

 ORDER BY prd.nome

 

count_estoque_cmd.Prepared = true

 

Set count_estoque = count_estoque_cmd.Execute '------------linha 13

count_estoque_numRows = 0

%>

 

Daw brigadao pelo help que você está me dando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta aí...

 

ASP
<%

Dim sSQL

Dim count_estoque

Dim count_estoque_cmd

Dim count_estoque_numRows

 

sSQL = "SELECT DISTINCT prd.nome, " &_

       "                Sum(e.qtde) AS soma_entrada, " &_

       "                Sum(s.qtde) AS soma_saida, " &_

       "                ( Sum(e.qtde)-Sum(e.qtde) ) AS balanco " &_

       "  FROM tb_produto prd " &_

       " INNER JOIN tb_movimento e " &_

       "    ON e.id_produto = prd.id_produto " &_

       "   AND e.tipo_mov = 'e' " &_

       " INNER JOIN tb_movimento s " &_

       "    ON s.id_produto = prd.id_produto " &_

       "   AND s.tipo_mov = 's' " &_

       " ORDER BY prd.nome "

 

Set count_estoque_cmd = Server.CreateObject ("ADODB.Command")

count_estoque_cmd.ActiveConnection = MM_Conn_STRING

count_estoque_cmd.CommandText = sSQL

 

count_estoque_cmd.Prepared = true

 

Set count_estoque = count_estoque_cmd.Execute

count_estoque_numRows = 0

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

daw, continua dando erro na mesma linha"Set count_estoque = count_estoque_cmd.Execute"to tentando aqui tb. ta f*** issu.se iluminar alguma coisa ai posta ai. valew browTipo de erro:Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta ''./estoque/contagem_estoque.asp, line 29

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para vermos uma coisa, tente sem a subtração pra ver se vai.

Põe assim e posta o que deu:

 

ASP
<%

Dim sSQL

Dim count_estoque

Dim count_estoque_cmd

Dim count_estoque_numRows

 

sSQL = "SELECT DISTINCT prd.nome, " &_

       "                Sum(e.qtde) AS soma_entrada, " &_

       "                Sum(s.qtde) AS soma_saida " &_

       "  FROM tb_produto prd " &_

       " INNER JOIN tb_movimento e " &_

       "    ON e.id_produto = prd.id_produto " &_

       "   AND e.tipo_mov = 'e' " &_

       " INNER JOIN tb_movimento s " &_

       "    ON s.id_produto = prd.id_produto " &_

       "   AND s.tipo_mov = 's' " &_

       " ORDER BY prd.nome "

 

Set count_estoque_cmd = Server.CreateObject ("ADODB.Command")

count_estoque_cmd.ActiveConnection = MM_Conn_STRING

count_estoque_cmd.CommandText = sSQL

 

count_estoque_cmd.Prepared = true

 

Set count_estoque = count_estoque_cmd.Execute

count_estoque_numRows = 0

%>

 

Tenho certeza que é só um detalhezinho, talvez por conta de eu não saber os detalhes do Access.

Compartilhar este post


Link para o post
Compartilhar em outros sites

daw desculpe a demora, mas continua com o mesmo erro na mesma linhaTipo de erro:Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta ''./estoque/contagem_estoque.asp, line 27

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daw, consegui um progresso, mas ainda não está correto. seguinte. fiz o código com dois recordsets, depois fiz uma expressão que subtrai o rs1 - rs2. deu certo ele subtraiu. mas o problema é: na paginação do restante dos produtos está errado. teria como fazer uma paginação para 2 rs? to tentando achar uma solução mesmo com gambiarras ehehhe

 

abraço irmão

 

ta ai o código

 

<%Dim count_estoqueDim count_estoque_cmdDim count_estoque_numRowsSet count_estoque_cmd = Server.CreateObject ("ADODB.Command")count_estoque_cmd.ActiveConnection = MM_Conn_STRINGcount_estoque_cmd.CommandText = "SELECT distinct nome, SUM(qtde) as soma FROM tb_movimento, tb_produto WHERE tb_movimento.id_produto = tb_produto.id_produto and tipo_mov = 'e' group by nome" count_estoque_cmd.Prepared = trueSet count_estoque = count_estoque_cmd.Executecount_estoque_numRows = 0%><%Dim saida_estoqueDim saida_estoque_cmdDim saida_estoque_numRowsSet saida_estoque_cmd = Server.CreateObject ("ADODB.Command")saida_estoque_cmd.ActiveConnection = MM_Conn_STRINGsaida_estoque_cmd.CommandText = "SELECT distinct nome, SUM(qtde) as subtrai FROM tb_movimento, tb_produto WHERE tb_movimento.id_produto = tb_produto.id_produto and tipo_mov = 's' group by nome" saida_estoque_cmd.Prepared = trueSet saida_estoque = saida_estoque_cmd.Executesaida_estoque_numRows = 0%>

agora é a minha paginção

 

<% While ((Repeat1__numRows <> 0) AND (NOT count_estoque.EOF)) %>				<tr>				  <td height="23" colspan="2" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"><div align="center"><%=count_estoque("soma")-saida_estoque("subtrai")%></div></td>				  <td width="26%" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"><div align="left"><%=(count_estoque.Fields.Item("nome").Value)%></div></td>				  <td width="43%" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"><div align="center"><%=(count_estoque.Fields.Item("soma").Value)%> - <%=(saida_estoque.Fields.Item("subtrai").Value)%></div></td>				  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"> </td>				</tr>				<%   Repeat1__index=Repeat1__index+1  Repeat1__numRows=Repeat1__numRows-1  count_estoque.MoveNext()Wend%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daw, consegui um progresso, mas ainda não está correto. seguinte. fiz o código com dois recordsets, depois fiz uma expressão que subtrai o rs1 - rs2. deu certo ele subtraiu. mas o problema é: na paginação do restante dos produtos está errado. teria como fazer uma paginação para 2 rs? to tentando achar uma solução mesmo com gambiarras ehehhe

 

abraço irmão

 

ta ai o código

 

<%Dim count_estoqueDim count_estoque_cmdDim count_estoque_numRowsSet count_estoque_cmd = Server.CreateObject ("ADODB.Command")count_estoque_cmd.ActiveConnection = MM_Conn_STRINGcount_estoque_cmd.CommandText = "SELECT distinct nome, SUM(qtde) as soma FROM tb_movimento, tb_produto WHERE tb_movimento.id_produto = tb_produto.id_produto and tipo_mov = 'e' group by nome" count_estoque_cmd.Prepared = trueSet count_estoque = count_estoque_cmd.Executecount_estoque_numRows = 0%><%Dim saida_estoqueDim saida_estoque_cmdDim saida_estoque_numRowsSet saida_estoque_cmd = Server.CreateObject ("ADODB.Command")saida_estoque_cmd.ActiveConnection = MM_Conn_STRINGsaida_estoque_cmd.CommandText = "SELECT distinct nome, SUM(qtde) as subtrai FROM tb_movimento, tb_produto WHERE tb_movimento.id_produto = tb_produto.id_produto and tipo_mov = 's' group by nome" saida_estoque_cmd.Prepared = trueSet saida_estoque = saida_estoque_cmd.Executesaida_estoque_numRows = 0%>

agora é a minha paginção

 

<% While ((Repeat1__numRows <> 0) AND (NOT count_estoque.EOF)) %>				<tr>				  <td height="23" colspan="2" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"><div align="center"><%=count_estoque("soma")-saida_estoque("subtrai")%></div></td>				  <td width="26%" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"><div align="left"><%=(count_estoque.Fields.Item("nome").Value)%></div></td>				  <td width="43%" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"><div align="center"><%=(count_estoque.Fields.Item("soma").Value)%> - <%=(saida_estoque.Fields.Item("subtrai").Value)%></div></td>				  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="style23"> </td>				</tr>				<%   Repeat1__index=Repeat1__index+1  Repeat1__numRows=Repeat1__numRows-1  count_estoque.MoveNext()Wend%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae daw. consegui uma gambiarra aqui. mudei o SELECT e deu certo vou postar o code caso alguém passe por isso ta pronto!

 

SELECT DISTINCT nome, (SELECT SUM(qtde) from tb_movimento where tipo_mov = 'e' and tb_movimento.id_produto = tb_produto.id_produto) as E, (SELECT SUM(qtde)FROM tb_movimentoWHERE tipo_mov = 's' and tb_movimento.id_produto = tb_produto.id_produto) as s, (E-S) as total from tb_movimento, tb_produto

valew Daw pela ajuda sua ae!!! me ajuda agora num outro tópico sobre como conveter o valor NULL para 0

 

abraço!!

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.