CALCULO ENTRE DATAS

SACOFRITO 31/03/2010 08:50:06
#338307
Olá, preciso colocar uma coisa até fácil mas nao to sabendo direito como fazer...
Na minha tela de caixa, existe uma trava nos clientes, onde é selecionado um cliente devedor e a seguinte Msgbox é exibida [Ô]Este cliente está com uma conta em aberto[Ô]
eu queria puxar de uma tabela onde grava o dia em q o cliente foi cadastrado como devedor, e fazer o cálculo com o dia atual para a msg box ficar [Ô]Este cliente está com uma conta em aberto a N dias[Ô]
STRANDOW 31/03/2010 09:12:39
#338309
ola meu caro SACOFRITO.

Oque vc pode fazer é usar a função

DATEDIFF

De uma pesquisada no help pra vc ter uma idéia.

exemplo em dias:

d = retorna o valor em dias
dtInicial = data do seu sistema (o dia em q o cliente foi cadastrado como devedor)
dtNow = date (data de hoje)

DATEDIFF(d, dtInicial , dtNow)

neste caso o sistema retorna a diferença em dias entre a data inicial e a final informada.



Caso não encontre nada no help, to postando abaixo





DATEDIFF
Returns the number of date and time boundaries crossed between two specified dates.

Syntax
DATEDIFF ( datepart , startdate , enddate )

Arguments
datepart

Is the parameter that specifies on which part of the date to calculate the difference. The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.

Datepart Abbreviations
Year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms


startdate

Is the beginning date for the calculation. startdate is an expression that returns a datetime or smalldatetime value, or a character string in a date format.

Because smalldatetime is accurate only to the minute, when a smalldatetime value is used, seconds and milliseconds are always 0.

If you specify only the last two digits of the year, values less than or equal to the last two digits of the value of the two digit year cutoff configuration option are in the same century as the cutoff year. Values greater than the last two digits of the value of this option are in the century that precedes the cutoff year. For example, if the two digit year cutoff is 2049 (default), 49 is interpreted as 2049 and 2050 is interpreted as 1950. To avoid ambiguity, use four-digit years.

For more information about specifying time values, see Time Formats. For more information about specifying dates, see datetime and smalldatetime.

enddate

Is the ending date for the calculation. enddate is an expression that returns a datetime or smalldatetime value, or a character string in a date format.

Return Types
integer

Remarks
startdate is subtracted from enddate. If startdate is later than enddate, a negative value is returned.

DATEDIFF produces an error if the result is out of range for integer values. For milliseconds, the maximum number is 24 days, 20 hours, 31 minutes and 23.647 seconds. For seconds, the maximum number is 68 years.

The method of counting crossed boundaries such as minutes, seconds, and milliseconds makes the result given by DATEDIFF consistent across all data types. The result is a signed integer value equal to the number of datepart boundaries crossed between the first and second date. For example, the number of weeks between Sunday, January 4, and Sunday, January 11, is 1.

Examples
This example determines the difference in days between the current date and the publication date for titles in the pubs database.

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO

SACOFRITO 31/03/2010 13:55:27
#338328
sim entendi a funçao
mas como eu faria o select pra buscar a data do vencimento ?
meu amigo aqui da empresa falou por cima como faz mas ainda nao consegui
ta assim minha funçao


Function pf_verificadias()
Set DSCAIXA = db.OpenRecordset([Ô]select * from caixa where vencimento[Ô], dbOpenDynaset)
X = DateDiff(dias, VENCIMENTO, Date)


tenho q buscar na tabela do caixa e acredito q tb no cadastro de clientes..
ai na msg box vo so [ô]enfiar[ô] o x la
algm me ajuda
LROSSI 31/03/2010 16:45:05
#338337
select * from caixa where vencimento>=datainicial and vencimento<=datafinal
SACOFRITO 31/03/2010 17:11:22
#338339
nao funcionou l rossi :(
SACOFRITO 01/04/2010 10:17:20
#338360
bom galera to tentando de outro jeito agr
acredito q tenha tb a opçao de editar no cadastro de clientes
e a função esta assim


Function pf_verificadias()
Set SNCLIENTES = db.OpenRecordset([Ô]select * from clientes[Ô], dbOpenDynaset)
If SNCLIENTES!dtalterou < Date And SNCLIENTES!trava = [Ô]Y[Ô] Then
X = DateDiff(D, SNCLIENTES!dtalterou, Date) [ô]
End If
Set DSCAIXA = db.OpenRecordset([Ô]select * from caixa[Ô], dbOpenDynaset)
If DSCAIXA!PAGAMENTO = [Ô][Ô] And DSCAIXA!VENCIMENTO < Date Then
X = DateDiff(D, DSCAIXA!VENCIMENTO, Date)
Else
GoTo fim
End If
fim:
End Function

a mesgbox imprime normal mas nao sai o valor de X
essa rotina está no keypress do cliente no pdv

If SNCLIENTES.NoMatch Then
dsorcamentos!CODCLI = Null
Else
If SNCLIENTES!trava = [Ô]Y[Ô] Then
pf_verificadias
MsgBox [Ô]ESTE CLIENTE ESTA COM UMA CONTA EM ABERTO HÁ[Ô] & X & [Ô] DIAS[Ô], vbInformation, [Ô]ATENÇÃO[Ô]
op = MsgBox([Ô]DESEJA EFETUAR A VENDA?[Ô], vbYesNo, [Ô]ATENÇÃO[Ô])
lembrando q to começando e devo ta fazendo monte de cagada.. mas se algm me ajudar eu agradeço :(



Editando * agr apareceu na msg box.. mas independente do q eu faça ou a data q eu mude no sistema e faça a mudança na alteraçao do cadastro..ele apenas mostra [Ô]Cliente com conta em aberto há 1 dia[Ô]
SACOFRITO 01/04/2010 16:01:36
#338378
ja consegui...meu amigo aki da empresa me ajudou, ou melhor apago td q eu fiz e fez o select do jeito certo =p
Tópico encerrado , respostas não são mais permitidas