CONTAGEM DE DIAS VB6 - 30 DIAS

LUISLPC 25/12/2013 12:56:15
#432445
Boa tarde Amigos... Feliz natal...

estou tentando bolar uma funcao em vb6 para contagem de dias, o que preciso na verdade é que uma funcao seja executada a cada 30 dias ou a cada virada de mes...indiferente se fechar o software, ele precisara continuar contando apos ser aberto novamente.....

para que nao possa voltar a data do micro to usando o nslock, ate iria usar seu contador de userdays...mas nao sei como zera-lo...pois a cada 30 dias a contagem precisa recomecar...

alguem teria alguma ideia?

obrigado!
CRIQUIO 25/12/2013 17:45:59
#432446
Quando preciso usar um número de dias para autorizar o uso do sistema, eu costumo utilizar uma página php na Internet para fazer essa validação. Dessa forma, não há como essa data ser alterada no computador aonde o sistema está. Veja um pequeno artigo que escrevi sobre isso no meu blog criquio.wordpress.com. O exemplo do artigo está em Access/VBA mas pode ser facilmente convertido para qualquer outra linguagem E para a contagem de dias você pode guardar a data da última contagem e fazer algo como DataAtual - UltimaData ou então utilizar o DateAdd para fazer o cálculo:

Em VBA: DateAdd([Ô]d[Ô], 30, Date)
Em VB: Mid(DateAdd(DateInterval.Day, 30, Now), 1, 10)
LUISLPC 25/12/2013 19:01:16
#432447
Pois eh amigo...ideia interessante, o problema eh que isso que to fazendo é para protecao de um sistema, entao se o cara ficar sem internet nao tenho como validar...

se tivesse como zerar o contador do nslock seria ideal...

MARCELO.TREZE 26/12/2013 10:09:58
#432452
Resposta escolhida
Bom vamos lá para uma duvida em VB6

basta você inserir uma data inicial para se saber se passaram 30 dias veja

Public Funciton ContagemTempo(dataInicial As Date) 
Dim T As Integer
T = Datediff([Ô]d[Ô],datainicial, date) Mod 30
If T = 0 Then
msgbox [Ô]se passaram 30 dias[Ô] [ô]depois é só colocar o que deseja no lugar desta mensagem
End If
End Function


a função acima pode ser usada em um timer ou no load do form principal para verificar o tempo

ContagemTempo([Ô]01/01/2013[Ô])


uma data inicial fixa deverá existir, a partir dela todos demais trinta dias serão calculados

mas veja bem os 30 dias nunca serão no ultimo ou primeiro dia do mes, levando em consideração que temos meses com 28, 30 e 31 dias.

se você deseja fazer a verificação a cada virada de mês é mais fácil ainda.

basta coolocar no timer ou load do form o seguinte

If Day(Date) = 1 Then
faz o que você deseja
End If

o exemplo acima vai zerar o contador a cada dia primeiro







LUISLPC 26/12/2013 12:42:38
#432454
bom dia amigo MARCELO-TREZE....

Cara ta quase...as funcoes acima funcionam, porem encontrei alguns impecilios...na primeira delas o problema eh o seguinte, o cliente abriu o sistema agora, depois so vai abrir daqui 40 dias... se passaram os 30 mais 10, e assim ele nao ira acionar a funcao....

sobre a outra funcao, tb, so funcionaria se abrir no dia 1 de cada mes...to tentando pensa algo em cima das 2 funcoes que sugerisse...


LUISLPC 26/12/2013 13:02:10
#432455
OLA AMIGO...

deixei da seguinte forma:


Citação:

Public Function ContagemTempo(dataInicial As Date)
Dim T As Integer
T = DateDiff([Ô]d[Ô], dataInicial, Date) < 30
If T = 0 Then
Debug.Print [Ô]foi [Ô] & Time
Else
Debug.Print [Ô] NAO foi [Ô] & Time
End If
End Function



agora sempre que passam 30 dias ou mais ele avisa...so tava tentando entende como a funcao funciona...que calculo ela esta fazendo?

MARCELO.TREZE 26/12/2013 14:04:55
#432460
é o seguinte

Datediff retorna a diferença entre duas datas,

Escreve-se a função desta forma

DateDiff(tipo,datainicial, datafinal)

tipo = [Ô]h[Ô] hora, [Ô]n[Ô] minutos, [Ô]s[Ô] segundos, [Ô]d[Ô] dia, [Ô]m[Ô] mes, [Ô]y[Ô] ano.
datainicial = como o próprio nome ja diz uma data inicial
datafinal = tambem como o nome diz uma data final

exemplo

Datediff([Ô]d[Ô],[Ô]01/01/2013[Ô], [Ô]10/01/2013[Ô]) = 10

ou

Datediff([Ô]h[Ô],[Ô]12:00:00[Ô],[Ô]18:00:00[Ô]) = 8

na sua função acima você terá a data inicial (datainicial) e a data do sistema(date), para se tirar os dias


para que tudo funcione como você deseja, o ideal é gravar a primeira data no registro do windows e sempre que o sistema abrir você recupera-la

veja como é fácil

para salvar a data no registro

SaveSetting [Ô]Nome_do_seu_programa[Ô], [Ô]tempo[Ô], [Ô]datainicial[Ô], Text1.Text

para recuperar

Registro = GetSetting ([Ô]nome_do_seu_programa[Ô], [Ô]tempo[Ô], [Ô]datainicial[Ô])


aplicadas ao que você precisa

Private Sub Command1_Click()
Dim Registro As String, T As Integer
[ô] primeiro verificamos se a data inicial existe no registro do windows
Registro = GetSetting([Ô]nome_do_seu_programa[Ô], [Ô]tempo[Ô], [Ô]datainicial[Ô])
If Registro = [Ô][Ô] Then
SaveSetting [Ô]Nome_do_seu_programa[Ô], [Ô]tempo[Ô], [Ô]datainicial[Ô], Date
Else
T = DateDiff([Ô]d[Ô], CDate(Registro), Date)
If T <= 30 Then
Debug.Print [Ô]foi [Ô] & Time
Else
Debug.Print [Ô] NAO foi [Ô] & Time
End If

End If
End Sub


bom o código acima vai gravar a data inicial no registro do windows e sempre verificará a se a diferença entre a data inicial e a data atual, sendo menor ou iguala a 30 faz X caso contrario faz Y





Tópico encerrado , respostas não são mais permitidas