Avatar billede telep Nybegynder
08. november 2001 - 19:04 Der er 26 kommentarer og
3 løsninger

Dato plus et tal/Datoformat

Jeg har en accesstabel hvor jeg i et felt har en række datoer stående. I et andet felt har jeg et antal måneder stående.

Formatet for feltet der hedder \"LejerOptionDeadline\" er altså \"dd-mm-yyyy\"

Formatet for det andet felt (LejerAnsvarligBeskedFoerDeadline) er bare et tal \"xx\"

Jeg skal på en eller anden måde have trukket det antal mdr. der står i \"LejerAnsvarligBeskedFoerDeadline\" fra den dato der står i \"LejerOptionDeadline\".

Eks.

Der står 08-01-2002 i \"LejerOptionDeadline\" og der står 2 i \"LejerAnsvarligBeskedFoerDeadline\". I dette tilfælde skal der altså returneres:
08-11-2001.

Den der løser denne er min helt! (og 266 point rigere...)

Avatar billede jennemaan Nybegynder
08. november 2001 - 19:11 #1
Sub BeregnDeadline()

Dim adoConn As New adoDB.Connection
Dim adoRST As New adoDB.Recordset
Dim dDeadline As Date
Dim lAntalDage As Long

adoConn.Open \"Dsn til din accessdatabase\"

Set adoRST=adoConn.Execute(\"Select * From DinAccessTabel\")

While Not (adoRST.BOF or adoRST.EOF)

  dDeadline=adoRST.Fields(\"LejerOptionDeadline\").Value
  lAntalDage=adoRST.Fields(\"LejerAnsvarligBeskedFoerDeadline\").Value

  Debug.Print \"Deadline: \" & DateAdd(\"d\", lAntalDage, dDeadline)

  adoRST.Movenext

Wend

adoRST.Close
adoConn.Close

End Sub

/Jennemaan
Avatar billede telep Nybegynder
08. november 2001 - 20:07 #2
Det ser langhåret ud men hvis det virker er det perfekt...

Hvor har jeg så værdien henne ?

Avatar billede telep Nybegynder
08. november 2001 - 20:25 #3
Jeg skal bruge værdien i en if-sætning til at spørge

If (den dato/værdi jeg får ved at trække \"LejerAnsvarligBeskedFoerDeadline\" fra \"LejerOptionDeadline\") = Date Then

Avatar billede telep Nybegynder
08. november 2001 - 20:29 #4
DER ER 266 POINT

COME ON!
Avatar billede telep Nybegynder
08. november 2001 - 20:46 #5
COME NU... JEG MANGLER SÅ LIDT !
Avatar billede ulrich Novice
08. november 2001 - 21:02 #6
dato1 = LejerAnsvarligBeskedFoerDeadline
dato2 = LejerOptionDeadline

If DateDiff(dato2,dato1) = Date Then
\'blah blah
End if
Avatar billede ulrich Novice
08. november 2001 - 21:02 #7
eller noget lignende ;)

kan være du skal bytte om på dato1 og dato2 :>
Avatar billede telep Nybegynder
08. november 2001 - 21:08 #8
saturation -> Det læs mit første indlæg!
Avatar billede terry Ekspert
08. november 2001 - 22:02 #9
Dim Thedate As Date
Dim result As Date
Dim xx As Integer
   
    xx = 2
   
    Thedate = CDate(\"08-01-2002\")
   
    result = DateAdd(\"m\", -CInt(xx), Thedate)

Avatar billede terry Ekspert
08. november 2001 - 22:08 #10
You can also make a query in Access and use this instead of the table

SELECT TheTable.LejerOptionDeadline, TheTable.LejerAnsvarligBeskedFoerDeadline, DateAdd(\"m\",-CInt([LejerAnsvarligBeskedFoerDeadline]),[LejerOptionDeadline]) AS NewDate
FROM TheTable;
Avatar billede terry Ekspert
08. november 2001 - 22:17 #11
How are you viewing the data in a grid or a form where you see one record at a time?

If you have single record on a form then you will have the two fields LejerOptionDeadline and LejerAnsvarligBeskedFoerDeadline already on the form you can add another field an name it for example newDate

Then you would put this in the fields controlSource

Me.newDate = DateAdd(\"m\", -CInt(Me!LejerAnsvarligBeskedFoerDeadline), Me!LejerOptionDeadline)

or something like that

Avatar billede telep Nybegynder
08. november 2001 - 22:50 #12
I\'m not sure about how to do what you are trying to say!
Avatar billede terry Ekspert
09. november 2001 - 08:43 #13
Ok, jeg prøver på dansk!

Telep, jeg kan se hvad det er du vil, men løsningen er afhængig på hvordan du vi brug resultatet på beregningen.

Hvis du har en form der viser alle records i en  liste,  så kan du laver en query (forespørgsel)som beskrevet,  i Access, og brug det i stedet for tabellen.
Hvis du kan kom med en bedre forklaring, så er det nemmere at kom med en løsning!

mvh
Terry
Avatar billede jennemaan Nybegynder
09. november 2001 - 09:44 #14
telep > den nye dato bliver beregnet her:

DateAdd(\"d\", lAntalDage, dDeadline)

Du kan f.eks. skrive

if DateAdd(\"d\", lAntalDage, dDeadline)>=Now() Then
  \'Deadline er overskredet
End If

/Jennemaan

 

 
Avatar billede telep Nybegynder
09. november 2001 - 10:58 #15
Her er en dybdegående forklaring:

Jeg har en accesstabel med en masse felter i. Hvis feltet \"LejerAutomatiskForlaengelse\" <> 0 så skal der hvis feltet \"LejerAutomatiskDeadline\" (er en dato af formatet dd-mm-yyyy) minus feltet \"LejerAnsvarligBeskedFoerDeadline\" der er x antal måneder < dags dato, sendes en mail.

Selve maildelen er der helt styr på jeg mangler kun at få skrevet denne beregning og if funktionen.

Er det forklaring nok?
Avatar billede jennemaan Nybegynder
09. november 2001 - 11:07 #16
Sub BeregnDeadline()

Dim adoConn As New adoDB.Connection
Dim adoRST As New adoDB.Recordset
Dim dDeadline As Date
Dim lAntalDage As Long

adoConn.Open \"Dsn til din accessdatabase\"

Set adoRST=adoConn.Execute(\"Select * From DinAccessTabel Where LejerAutomatiskForlaengelse <> 0\")

While Not (adoRST.BOF or adoRST.EOF)

  dDeadline=adoRST.Fields(\"LejerAutomatiskDeadline\").Value
  lAntalDage=adoRST.Fields(\"LejerAnsvarligBeskedFoerDeadline\").Value
  if DateAdd(\"m\", -lAntalMdr, dDeadline)<Now() Then
  \'Deadline er overskredet
  \'Send Mail
  End If


  adoRST.Movenext

Wend

adoRST.Close
adoConn.Close

End Sub


/Jennemaan
Avatar billede jennemaan Nybegynder
09. november 2001 - 11:08 #17
Ups; Her er den rigtige

Sub BeregnDeadline()

Dim adoConn As New adoDB.Connection
Dim adoRST As New adoDB.Recordset
Dim dDeadline As Date
Dim lAntalMdr As Long

adoConn.Open \"Dsn til din accessdatabase\"

Set adoRST=adoConn.Execute(\"Select * From DinAccessTabel Where LejerAutomatiskForlaengelse <> 0\")

While Not (adoRST.BOF or adoRST.EOF)

  dDeadline=adoRST.Fields(\"LejerAutomatiskDeadline\").Value
  lAntalMdr=adoRST.Fields(\"LejerAnsvarligBeskedFoerDeadline\").Value
  if DateAdd(\"m\", -lAntalMdr, dDeadline)<Now() Then
  \'Deadline er overskredet
  \'Send Mail
  End If


  adoRST.Movenext

Wend

adoRST.Close
adoConn.Close

End Sub


/Jennemaan
 

Avatar billede terry Ekspert
09. november 2001 - 11:09 #18
No it isnt!

Maildelen, det har du IKKE nævnt før.

Glem alt om en hvis (IF)

DateAdd(\"m\", -CInt(Me!LejerAnsvarligBeskedFoerDeadline), Me!LejerOptionDeadline)

Hvis Me!LejerAnsvarligBeskedFoerDeadline er 0 so vil den ikke ændre datoen Me!LejerOptionDeadline . (1+0 er 1)!!!!!!
Hvis Me!LejerAnsvarligBeskedFoerDeadline er 2 så adder den 2 måneder til datoen Me!LejerOptionDeadline.


Avatar billede telep Nybegynder
09. november 2001 - 11:09 #19
Her er min kode so far:

Set objSMTP = CreateObject(\"SMTP.SMTP\")
    varMonthArray = Array(\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\")
    varDayArray = Array(\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\")
    strSMTPDateFormat = \"www, d mmm yy Hh:Nn:Ss\"
   
    objSMTP.MailPort = \"25\"
    objSMTP.MailServer = \"vip.cybercity.dk\"
    objSMTP.Action = 1                      \'Connect To Server
    strTime = Format(Now(), strSMTPDateFormat)
    intCharPos = InStr(1, strTime, \"www\")
    If intCharPos > 0 Then
        If intCharPos > 1 Then
            strTime = Left(strTime, intCharPos - 1) & varDayArray(Weekday(Date)) & Mid(strTime, intCharPos + 4)
        Else
            strTime = varDayArray(Weekday(Date)) & Mid(strTime, intCharPos + 4)
        End If
    End If
   
DBEngine.SystemDB = \"F:\\VB\\Troels\\Ejendomsinvest\\MailForlængelse\\system.mdw\"
DBEngine.DefaultUser = \"lj\"
DBEngine.DefaultPassword = \"pippen\"

Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\Ejendomsinvest\\MailForlængelse\\troels.mdb\")
sSQL = \"SELECT * from tblLejer WHERE LejerAutomatiskForlaengelse <>0\"
Set recLejer = datDB.OpenRecordset(sSQL)

Do While Not recLejer.EOF

    Initialer = recLejer(\"LejerAnsvarligForForLaengelse\")
    AutoDead = recLejer(\"LejerAutomatiskDeadline\")
    BeskedTid = recLejer(\"LejerAnsvarligBeskedFoerDeadline\")
   
  \'  If AutoDead - BeskedTid = Date Then
      objSMTP.Action = a_ResetHeaders
      objSMTP.OtherHeaders = \"Content-type: text\" & vbCrLf
      objSMTP.From = \"tm@oyan.dk\"
      objSMTP.To = Initialer & \"@tm-support.dk\"
      objSMTP.Date = Date & Now
      objSMTP.Subject = Test1
      objSMTP.MessageText = \"Du har en opgave vedrørende en prioritet\"
      objSMTP.Action = 3                    \'If not connected then connect. Then send mail.
\'  End If
     
  recLejer.MoveNext
Loop
Avatar billede terry Ekspert
09. november 2001 - 11:13 #20
Jeg kan ikke se hvordan du bruger de felter i din VB applikation, derfor kan jeg kun fortælle dig hvordan man laver beregning en. Hvor du skal brug denne beregning har jeg ikke fattet endnu. (Du har ikke fortalte os)!

I en form, en rapport, !!!!!!!
Avatar billede telep Nybegynder
09. november 2001 - 11:17 #21
Jeg skal bruge beregningen til at spørge:


If (den dato/værdi jeg får ved at trække \"LejerAnsvarligBeskedFoerDeadline\" fra \"LejerOptionDeadline\") = Date Then

jeg altså kan skrive:

Do While Not recLejer.EOF

    Initialer = recLejer(\"LejerAnsvarligForForLaengelse\")
    AutoDead = recLejer(\"LejerAutomatiskDeadline\")
    BeskedTid = recLejer(\"LejerAnsvarligBeskedFoerDeadline\")
   
  \'  If \"DEN VÆRDI JEG FÅR VED BEREGN.\" = Date Then
      objSMTP.Action = a_ResetHeaders
      objSMTP.OtherHeaders = \"Content-type: text\" & vbCrLf
      objSMTP.From = \"tm@oyan.dk\"
      objSMTP.To = Initialer & \"@tm-support.dk\"
      objSMTP.Date = Date & Now
      objSMTP.Subject = Test1
      objSMTP.MessageText = \"Du har en opgave vedrørende en prioritet\"
      objSMTP.Action = 3                    \'If not connected then connect. Then send mail.
\'  End If
     
  recLejer.MoveNext
Loop
Avatar billede jennemaan Nybegynder
09. november 2001 - 11:17 #22
Set objSMTP = CreateObject(\"SMTP.SMTP\")
    varMonthArray = Array(\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\")
    varDayArray = Array(\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\")
    strSMTPDateFormat = \"www, d mmm yy Hh:Nn:Ss\"
   
    objSMTP.MailPort = \"25\"
    objSMTP.MailServer = \"vip.cybercity.dk\"
    objSMTP.Action = 1                      \'Connect To Server
    strTime = Format(Now(), strSMTPDateFormat)
    intCharPos = InStr(1, strTime, \"www\")
    If intCharPos > 0 Then
        If intCharPos > 1 Then
            strTime = Left(strTime, intCharPos - 1) & varDayArray(Weekday(Date)) & Mid(strTime, intCharPos + 4)
        Else
            strTime = varDayArray(Weekday(Date)) & Mid(strTime, intCharPos + 4)
        End If
    End If
   
DBEngine.SystemDB = \"F:\\VB\\Troels\\Ejendomsinvest\\MailForlængelse\\system.mdw\"
DBEngine.DefaultUser = \"lj\"
DBEngine.DefaultPassword = \"pippen\"

Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\Ejendomsinvest\\MailForlængelse\\troels.mdb\")
sSQL = \"SELECT * from tblLejer WHERE LejerAutomatiskForlaengelse <>0\"
Set recLejer = datDB.OpenRecordset(sSQL)

Do While Not recLejer.EOF

    Initialer = recLejer(\"LejerAnsvarligForForLaengelse\")
    AutoDead = recLejer(\"LejerAutomatiskDeadline\")
    BeskedTid = recLejer(\"LejerAnsvarligBeskedFoerDeadline\")
    If DateAdd(\"m\", -BeskedTid, AutoDead)<Now() Then
      objSMTP.Action = a_ResetHeaders
      objSMTP.OtherHeaders = \"Content-type: text\" & vbCrLf
      objSMTP.From = \"tm@oyan.dk\"
      objSMTP.To = Initialer & \"@tm-support.dk\"
      objSMTP.Date = Date & Now
      objSMTP.Subject = Test1
      objSMTP.MessageText = \"Du har en opgave vedrørende en prioritet\"
      objSMTP.Action = 3                    \'If not connected then connect. Then send mail.
  End If
     
  recLejer.MoveNext
Loop

/Jennemaan
Avatar billede jennemaan Nybegynder
09. november 2001 - 11:19 #23
Eller
If DateAdd(\"m\", -BeskedTid, AutoDead)<Now() Then

ændres til

If DateAdd(\"m\", -BeskedTid, AutoDead)=Date() Then

Så sendes der _kun_ en mail hvis man ligeprecis befinder sig på deadlinen... Pas på lørdag/søndag og den slags.

/Jennemaan
     
Avatar billede terry Ekspert
09. november 2001 - 11:20 #24
You are not making these points easy telep!

if DateAdd(\"m\", BedskedTid, AutoDead)>= Date() Then

 
     

Avatar billede terry Ekspert
09. november 2001 - 11:21 #25
>= Date()  change to  = Date()
Avatar billede jennemaan Nybegynder
09. november 2001 - 11:21 #26
terry > du skal tage AutoDead - Beskedtid og ikke + Beskedtid

/Jennemaan
Avatar billede terry Ekspert
09. november 2001 - 11:21 #27
if DateAdd(\"m\", -BedskedTid, AutoDead)= Date() Then

 
     

Avatar billede telep Nybegynder
09. november 2001 - 11:30 #28
Jeg tester lige... jeg tror at den er dér!!!

Hvordan er pointfordelingen mest fair her?
Avatar billede telep Nybegynder
09. november 2001 - 12:10 #29
Jeg siger tusind tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester