MENINOS, PRECISO DE AJUDA COM ESSE UPDATE

 Tópico anterior Próximo tópico Novo tópico

MENINOS, PRECISO DE AJUDA COM ESSE UPDATE

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#489985 - 14/08/2019 11:03:22

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


Última edição em 14/08/2019 11:05:17 por AMELINHACODE

bom dia meninos, criei até um post recente, mais nao fui muito objetiva

uso VB6 e SQL Server

Preciso atualizar toda minha tabela de clientes baseado numa where

A ideia é a seguinte.... todos meus clientes possui o campo STATUS = 1, ou seja, ativos

Preciso mudar todos os clientes que possui alguma parcela vencida com mais de 15 dias para STATUS = 0 (inativo)

Entao fiz uma consulta para ver as a data da vencimento (campo DATA) e ver a data de hoje e fazer o calculo, mais não está dando certo.

Se alguem puder ajudar ai

Dim LerIniQuantDiasBloqueio As Integer

LerIniQuantDiasBloqueio = 15

Dim varDataVenc As Date
Dim var_SomaDatas As Long
Dim varQuantDiasBloqueio As Integer

varQuantDiasBloqueio = LerIniQuantDiasBloqueio

var_SomaDatas = 0

sSQL = "SELECT TOP 1 parcelas.data, parcelas.cod_pedido, pedidos.cod_pedido, cliente.codigo, pedidos.cod_cliente, parcelas.status " & _
   "FROM cliente INNER JOIN pedidos ON cliente.codigo = pedidos.cod_cliente INNER JOIN parcelas ON parcelas.cod_pedido = pedidos.cod_pedido " & _
   "WHERE (parcelas.status = 0) ORDER BY parcelas.data;"

Set r = dbData.OpenRecordset(sSQL)

Do While Not r.EOF
   varDataVenc = r("data")
   var_SomaDatas = DateDiff("d", varDataVenc, Date)
   r.MoveNext
Loop

If r.State <> 0 Then r.Close
Set r = Nothing

If var_SomaDatas >= varQuantDiasBloqueio Then

        sSQL = "UPDATE cliente SET status = 0 " & _
       "FROM cliente INNER JOIN pedidos ON cliente.codigo = pedidos.cod_cliente INNER JOIN parcelas ON parcelas.cod_pedido = pedidos.cod_pedido " & _
       "WHERE  parcelas.data > DiasAposVenc ;"
       dbData.Execute sSQL

Else
        'nao faz nada
end if


preciso verificar quais clientes estao com mais de 15 dias vencidos e inativá-los




#489986 - 14/08/2019 11:28:27

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Vc precisa apenas adicionar na sua sql a Clausula HAVING associada a função DATADIFF.

HAVING DATEDIFF(day, data_vencimento, data_pagamento) > 15





Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#489987 - 14/08/2019 11:33:00

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


Citação:
:
Vc precisa apenas adicionar na sua sql a Clausula HAVING associada a função DATADIFF.

HAVING DATEDIFF(day, data_vencimento, data_pagamento) > 15




Seria isso?
Dim LerIniQuantDiasBloqueio As Integer

LerIniQuantDiasBloqueio = 15

Dim varDataVenc As Date
Dim var_SomaDatas As Long
Dim varQuantDiasBloqueio As Integer

varQuantDiasBloqueio = LerIniQuantDiasBloqueio

var_SomaDatas = 0

sSQL = "SELECT TOP 1 parcelas.data, parcelas.cod_pedido, pedidos.cod_pedido, cliente.codigo, pedidos.cod_cliente, parcelas.status " & _
   "FROM cliente INNER JOIN pedidos ON cliente.codigo = pedidos.cod_cliente INNER JOIN parcelas ON parcelas.cod_pedido = pedidos.cod_pedido " & _
   "WHERE (parcelas.status = 0) ORDER BY parcelas.data;"

Set r = dbData.OpenRecordset(sSQL)

Do While Not r.EOF
   varDataVenc = r("data")
   var_SomaDatas = DateDiff("d", varDataVenc, Date)
   r.MoveNext
Loop

If r.State <> 0 Then r.Close
Set r = Nothing

If var_SomaDatas >= varQuantDiasBloqueio Then

        sSQL = "UPDATE cliente SET status = 0 " & _
       "FROM cliente INNER JOIN pedidos ON cliente.codigo = pedidos.cod_cliente INNER JOIN parcelas ON parcelas.cod_pedido = pedidos.cod_pedido " & _
       "HAVING DATEDIFF(day, data, date) > 15 ;"
       dbData.Execute sSQL

Else
        'nao faz nada
end if




#489992 - 14/08/2019 14:09:17

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Quase isso...
Talvez vc nem precise de tudo isso.
Apenas saber a quantidade de dias de atrazo que irá bloquear já serviria(desde que a data atual seja um dos parametros)

Seria algo como :

Dim LerIniQuantDiasBloqueio As Integer

LerIniQuantDiasBloqueio = 15

Dim varDataVenc As Date
Dim var_SomaDatas As Long
Dim varQuantDiasBloqueio As Integer

varQuantDiasBloqueio = LerIniQuantDiasBloqueio

UPDATE clientes set status = 0
INNER JOIN pedidos ON cliente.codigo = pedidos.cod_cliente
INNER JOIN parcelas ON parcelas.cod_pedido = pedidos.cod_pedido  
WHERE (parcelas.status = 0)
GROUP BY parcelas.id
HAVING DATEDIFF(day, parcelas.data, date) > varQuantDiasBloqueio


Mas poderia ser de outras formas.....

UPDATE clientes set status = 0
where clientes.id = (
select codigo from clientes
inner join pedidos on(cliente.codigo = pedidos.cod_cliente)
inner join parcelas on(parecelas.cod_pedido = pedidos.cod_pedido)
group by cliente.codigo
HAVING DATEDIFF(day, parcelas.data, date) > varQuantDiasBloqueio );


Algo assim..... precisa ir testando com SELECT para saber se os resultados são satisfaórios....



Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490016 - 15/08/2019 11:02:42

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


Fiz assim:

Dim sSQL As String

Dim LerIniQuantDiasBloqueio As Integer

LerIniQuantDiasBloqueio = 15

Dim varDataVenc As Date
Dim var_SomaDatas As Long
Dim varQuantDiasBloqueio As Integer

varQuantDiasBloqueio = LerIniQuantDiasBloqueio

sSQL = " UPDATE clientes set status = 0 " & _
        "INNER JOIN pedidos ON cliente.codigo = pedidos.cod_cliente " & _
        "INNER JOIN parcelas ON parcelas.cod_pedido = pedidos.cod_pedido " & _
        "Where (Parcelas.Status = 0) " & _
        "GROUP BY parcelas.id " & _
        "Having DateDiff(Day, Parcelas.Data, Date) > varQuantDiasBloqueio"
dbData.Execute sSQL


e deu o seguinte erro: Sintaxe incorreta próxima à palavra-chave 'INNER'

fiz assim:
sSQL = " UPDATE cliente set status = 0 " & _
        "where cliente.codigo = ( " & _
        "select codigo from cliente " & _
        "inner join pedidos on(cliente.codigo = pedidos.cod_cliente) " & _
        "inner join parcelas on(parcelas.cod_pedido = pedidos.cod_pedido) " & _
        "group by cliente.codigo " & _
        "HAVING DATEDIFF(day, parcelas.data, date) > varQuantDiasBloqueio ); "


deu seguinte erro: Nome de coluna 'date' inválido





Resposta escolhida #490017 - 15/08/2019 12:43:55

OMAR2007
MONTES CLAROS
Cadast. em:Maio/2019


Maria Antonieta de AMELINHACODE,faça um teste assim.
Declare  as Dt com Date

HAVING DATEDIFF(day, parcelas.data, date) > varQuantDiasBloqueio
Substitua para Date para Dt
"HAVING DATEDIFF(day, parcelas.data, Dt) > varQuantDiasBloqueio
E execute, não tenho certeza mas tente.
Valeu.



#490021 - 15/08/2019 14:23:13

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


Citação:
:
Maria Antonieta de AMELINHACODE,faça um teste assim.
Declare  as Dt com Date

HAVING DATEDIFF(day, parcelas.data, date) > varQuantDiasBloqueio
Substitua para Date para Dt
"HAVING DATEDIFF(day, parcelas.data, Dt) > varQuantDiasBloqueio
E execute, não tenho certeza mas tente.
Valeu.


deu o mesmo erro
Nome de coluna 'Dt' inválido



#490039 - 16/08/2019 08:54:50

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


alguem?



#490066 - 19/08/2019 10:44:09

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


alguem pode me ajudar?



#490074 - 19/08/2019 14:43:35

OMAR2007
MONTES CLAROS
Cadast. em:Maio/2019


Tenta isto ai  AMELINHACODE.
      
  sSQL = "UPDATE cliente SET status = 0 " & _
       "FROM cliente INNER JOIN pedidos ON cliente.cli_id = pedidos.cli_id INNER JOIN parcelas ON parcelas.cod_ped = pedidos.ped_id " & _
       "WHERE  datediff(day ,parcelas.data1,getdate() ) > 2 ;"



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por AMELINHACODE em 29/08/2019 22:50:00