SOMAR VALORES/SUBTRAIR VALORES

XXXANGELSXXX 04/12/2009 23:09:19
#329201
Amigos, eu aqui de novo.. vich, tantas duvidas e confusoes nas coisas que necessito fazer para terminar meu software, rs.. aqui seguinte, dessa vez acontece o seguinte.. tenho duas tres tabelas, CADCLIENTES, CLIAUXILIAR, CLIVALORAUXILIAR, todas tres tabelas tenho o campo CODIGO como indice, uma delas a CADCLIENTES nao pode repetir o codigo do cliente, mas nas outras duas sim, entao uso a tabela CLIAUXILIAR para gravar informações financeiras dos clientes por uma nomeclatura interna da empresa.. entao ela funciona mais ou menos assim

CADCLIENTES CLIAUXILIAR

CODIGO = VARCHAR(10) CODIGO = VARCHAR(10)

EXEMPLO


CODIGO NOME VALORTOTAL CODIGO VALOR SERIAL
10200 FERNANDO 10200 100,00 1
10200 200,00 2
10200 175,00 3


Entao Queria fazer o seguinte.. gravar na tabela cadclientes o total do contrato do cara.. ou seja, o valor da tabela cliauxiliar somando por cliente, esse cliente acima entao.. no campo valortotal teria que gravar 475,00, ele soma a tabela auxiliar e grava o resultado na tabela cadclientes. entenderam?? desde ja obrigado..

















MARCELO.TREZE 05/12/2009 16:06:16
#329221
Tenta a quey abaixo


SQL = [Ô]INSERT INTO cadclientes (codigo,valortotal) SELECT codigo, SUM(valor) FROM cliauxiliar WHERE codigo = [ô][Ô] & txtCodigo.Text & [Ô][ô][Ô]


tente ai não fiz nehum teste mas creio que funcione
XXXANGELSXXX 06/12/2009 14:00:13
#329249
Citação:

MARCELO-TREZE escreveu:
Tenta a quey abaixo


SQL = [Ô]INSERT INTO cadclientes (codigo,valortotal) SELECT codigo, SUM(valor) FROM cliauxiliar WHERE codigo = [ô][Ô] & txtCodigo.Text & [Ô][ô][Ô]


tente ai não fiz nehum teste mas creio que funcione

nao deu certo nao amigaoo.. aqui, estou usando mais ou menos assim o negocio.. veja o que pode estar errado na sintaxe

Do While Not rs.EOF
SQL = [Ô]UPDATE cadclientes AS CLI SET (CLI.clicodigo,CLI.valortotal) SELECT CLI.CodCliente, SUM(ValorManut) FROM AuxClientes WHERE CLI.CodCliente = [ô][Ô] & rs!codigo & [Ô][ô][Ô]
Loop
db.Execute SQL
rs.MoveNext

lembrando que nao é inserir dados nao.. pois eu ja tenho os dados na tabela de clientes, eu quero é so somar os valores que ele tem na tabela 2, mas somar lembrando que ele tem varios sistemas, entao soma e joga o valor total no cadastro de cliente com valor somado.
RCMRO 06/12/2009 18:34:34
#329253


SQL = [Ô]UPDATE ccli SET ValorTotal = csoma.Valor FROM cadclientes ccli INNER JOIN (SELECT caux.codigo, SUM(caux.valor) as Valor FROM cliauxiliar as caux WHERE caux.codigo = ccli.codigo GROUP BY caux.codigo) csoma[Ô]
XXXANGELSXXX 06/12/2009 20:24:58
#329256
Citação:

RCMRO escreveu:


SQL = [Ô]UPDATE ccli SET ValorTotal = csoma.Valor FROM cadclientes ccli INNER JOIN (SELECT caux.codigo, SUM(caux.valor) as Valor FROM cliauxiliar as caux WHERE caux.codigo = ccli.codigo GROUP BY caux.codigo) csoma[Ô]

amigo.. run time error 3075 - Operador faltando.. veja ..

strsql = [Ô]UPDATE CCLI SET CLICADVALOR = CSOMA.VALOR FROM CADCLIENTES CCLI INNER JOIN(SELECT CAUX.CODCLIENTE, SUM(CAUX.VALORMANUT) AS VALOR FROM AUXCLIENTES AS CAUX WHERE CAUX.CODCLIENTE= CCLI.CLICODIGO GROUP BY CAUX.CODCLIENTE) CSOMA[Ô] [ô][Ô]
RCMRO 07/12/2009 08:26:00
#329263
Resposta escolhida
Amigo,

O melhor é criar uma STORED PROCEDURE conforma abaixo

CREATE PROCEDURE spAcumulaValoresClientes AS
SELECT CODCLIENTE, SUM(VALORMANUT) AS VALOR
INTO #ACUMULADO
FROM AUXCLIENTES
GROUP BY CODCLIENTE

UPDATE CLI
SET CLICADVALOR = ACU.VALOR
FROM CADCLIENTES CLI
INNER JOIN #ACUMULADO ACU
ON ACU.CODCLIENTE = CLI.CLICODIGO

DROP TABLE #ACUMULADO

SELECT * FROM CADCLIENTES ORDER BY CLICODIGO


E no VB você acessa assim (cn = Conexão com o BD):

Dim rs As Recordset
Set rs = cn.Execute([Ô]spAcumulaValoresClientes[Ô])


O retorno do Recordset será a tabela CADCLIENTES
XXXANGELSXXX 07/12/2009 13:50:33
#329282
Citação:

RCMRO escreveu:
Amigo,

O melhor é criar uma STORED PROCEDURE conforma abaixo

CREATE PROCEDURE spAcumulaValoresClientes AS
SELECT CODCLIENTE, SUM(VALORMANUT) AS VALOR
INTO #ACUMULADO
FROM AUXCLIENTES
GROUP BY CODCLIENTE

UPDATE CLI
SET CLICADVALOR = ACU.VALOR
FROM CADCLIENTES CLI
INNER JOIN #ACUMULADO ACU
ON ACU.CODCLIENTE = CLI.CLICODIGO

DROP TABLE #ACUMULADO

SELECT * FROM CADCLIENTES ORDER BY CLICODIGO


E no VB você acessa assim (cn = Conexão com o BD):

Dim rs As Recordset
Set rs = cn.Execute([Ô]spAcumulaValoresClientes[Ô])


O retorno do Recordset será a tabela CADCLIENTES

Hum amigo.. ta falando meio grego comigo.. rs rs rs.. onde crio stored procedures? é que sou meio novato no vb6, rs.. da uma forcinha a mais por favor. rs valeu..
RCMRO 07/12/2009 16:31:33
#329296
Entra no SQLServer, conecta e clica em [Ô]NEW QUERY[Ô].
A seguir, cola o código SQL que enviei e aperta F5 para executar.
Após isso, pode voltar para o VB
XXXANGELSXXX 07/12/2009 17:44:57
#329308
Citação:

RCMRO escreveu:
Entra no SQLServer, conecta e clica em [Ô]NEW QUERY[Ô].
A seguir, cola o código SQL que enviei e aperta F5 para executar.
Após isso, pode voltar para o VB

Amigo, esse banco de dados é acess.. rs rs.
RCMRO 08/12/2009 08:11:44
#329321
Então faz tudo via VB mesmo...

Dim dtTemp as String
dtTemp = format(Now,[Ô]yyyymmddhhmmssms[Ô]
cn.execute [Ô]CREATE TABLE Tmp[Ô] & dtTemp & [Ô](CliCodigo TEXT(10), Valor CURRENCY)
cn.execute [Ô]INSERT INTO Tmp[Ô] & dtTemp & [Ô] (CliCodigo, Valor) SELECT CODCLIENTE, SUM(VALORMANUT) FROM AUXCLIENTES GROUP BY CODCLIENTE)[Ô]
cn.execute [Ô]UPDATE CLI SET CLICADVALOR = ACU.VALOR FROM CADCLIENTES CLI INNER JOIN Tmp[Ô] & dtTemp & [Ô] ACU ON ACU.CliCodigo = CLI.CliCodigo[Ô]
cn.execute [Ô]DROP TABLE Tmp[Ô] & dtTemp
XXXANGELSXXX 09/12/2009 18:56:16
#329428
Amigo, ta muito complicado o negocio.. rs rs.. aqui, estou quase conseguindo fazer o que estou precisando da seguinte forma.. so que esta dando o erro 3061, eu to somando os valores da tabela auxiliar e dando o update na tabela TabAuxiliarComissao com o valor somado vejam se pode dar uma forcinha por favor.. brigadaoooo


Sub SeAgoraNaoForToFudido()
Dim db As Database, rs As Recordset
Dim StrSql As String
caminho = ReadINI([Ô]Geral[Ô], [Ô]Caminho[Ô], App.Path & [Ô]\Config.ini[Ô])
Set db = DBEngine(0).OpenDatabase(caminho)
Set rs = db.OpenRecordset([Ô]TabAuxiliarComissao[Ô], dbOpenTable)

While Not rs.EOF
StrSql = [Ô]select CliCodigo from TabauxiliarComissao[Ô]
StrSql = [Ô]update TabAuxiliarComissao set TabAuxiliarComissao.ValorPago = (select sum(AuxClientes.ValorManut) from AuxClientes where AuxClientes.CodCliente = [Ô] & rs!CliCodigo & [Ô]) Where AuxClientes.CodCliente = [Ô] & rs!CliCodigo
db.Execute StrSql
rs.MoveNext

Wend
end sub
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas