SOMAR VALORES/SUBTRAIR VALORES
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..
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..
Tenta a quey abaixo
tente ai não fiz nehum teste mas creio que funcione
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
Citação:nao deu certo nao amigaoo.. aqui, estou usando mais ou menos assim o negocio.. veja o que pode estar errado na sintaxeMARCELO-TREZE escreveu:
Tenta a quey abaixoSQL = [Ô]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
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.
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[Ô]
Citação:amigo.. run time error 3075 - Operador faltando.. veja ..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[Ô]
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[Ô] [ô][Ô]
Amigo,
O melhor é criar uma STORED PROCEDURE conforma abaixo
E no VB você acessa assim (cn = Conexão com o BD):
O retorno do Recordset será a tabela CADCLIENTES
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
Citação: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 escreveu:
Amigo,
O melhor é criar uma STORED PROCEDURE conforma abaixoCREATE 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
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
A seguir, cola o código SQL que enviei e aperta F5 para executar.
Após isso, pode voltar para o VB
Citação:Amigo, esse banco de dados é acess.. rs rs.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
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
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
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
Tópico encerrado , respostas não são mais permitidas