Avatar billede bccinlove Nybegynder
06. november 2001 - 10:53 Der er 42 kommentarer og
1 løsning

Visual Basic udfordring

Hej,
Først lige opgavens overordnede formål. Jeg skal udvikle et stykke kode der kan sende en mail når en dato en en access tabel er overskredet.

Følgende er skrevet:

Dim datDB As Database
Dim recPrioriteter As Recordset

    Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\troels.mdb\")
    Set recPrioriteter = datDB.OpenRecordset(\"tblPrioritet\")
    Do While Not recPrioriteter.EOF
       
        recPrioriteter.MoveNext
    Loop
End Sub

Avatar billede bennytordrup Nybegynder
06. november 2001 - 10:55 #1
Hvor mange poster er der i tabellen?

Hvis der er mange, så vil det være en bedre ide at lave en forespørgsel og kun behandle de poster, forespørgslen returnerer.
Avatar billede bccinlove Nybegynder
06. november 2001 - 10:56 #2
Der skal altså tilføjes noget kode i løkken. Selv mail-delen har jeg styr på. Jeg skal for så vidt bare have lidt \"clues\" til hvordan jeg i access tabellen skriver noget med

If \"kolonne\".\"felt\" > DateTimeNow then

Præcis denne linie har jeg problemer med have korrekt

Mvh
Troels


Avatar billede bennytordrup Nybegynder
06. november 2001 - 10:57 #3
if recPrioteter.Fields(\"Dato\") > Now then
Avatar billede bccinlove Nybegynder
06. november 2001 - 10:58 #4
Nej vi kan ikke lave en forespørgsel, da dette stykke kode skal være en del af et større program.

:-)
Avatar billede bennytordrup Nybegynder
06. november 2001 - 11:01 #5
Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\troels.mdb\")
Set recPrioriteter = datDB.OpenRecordset(\"SELECT * FROM tblPrioritet WHERE [Dato]>#\" & format$(Now, \"mm-dd-yyyy\") & \"#\")
Do While Not recPrioriteter.EOF

    recPrioriteter.MoveNext
Loop

Dette vil give dig de poster i tblPrioritet, hvor dato er større end Now
Avatar billede bccinlove Nybegynder
06. november 2001 - 11:09 #6
Det kan jeg ikke rigtig bruge, da jeg jo skal sende en mail såfremt at dato er overskredet! Men ellers smart ja!

Avatar billede bennytordrup Nybegynder
06. november 2001 - 11:10 #7
Det kan du da! Forespørgslen vil give dig de poster - og kun de poster - hvor feltet Dato er over en vis dato.
Avatar billede bennytordrup Nybegynder
06. november 2001 - 11:11 #8
Hvis du har 1000 poster, vil din oprindelige kode løbe alle 1000 poster igennem. Hvis det kun er 10 af dem, der skal reageres på, spilder ud en h******s masse tid på ingenting.

Hvis du bruger mit eksempel, vil du få 10 poster at arbejde med.
Avatar billede bccinlove Nybegynder
06. november 2001 - 11:18 #9
ahhh ja - jeg prøver lige noget!
Avatar billede bccinlove Nybegynder
06. november 2001 - 11:58 #10
Jeg får fejl i din sætning.

\"Runtimeerror

Der er for få parametre. Der var ventet 1\"

Any clues

Troels
Avatar billede bennytordrup Nybegynder
06. november 2001 - 12:10 #11
Opret den her funktion i et modul:

Public Function AccessDate(ByVal aDate As Date) As String
    On Error Resume Next
    AccessDate = \"DateSerial(\" & Year(aDate) & \",\" & Month(aDate) & \",\" & Day(aDate) & \")\"
End Function

Så ændrer du i min sætning til:

OpenRecordSet(\"SELECT * FROM tblPrioritet WHERE [Dato] > \" & AccessDate(Now))

[Dato] er feltnavnet på det datofelt, du sammenligner med.
Avatar billede bccinlove Nybegynder
06. november 2001 - 12:25 #12
Nej det virker sgu heller ikke!
Avatar billede bennytordrup Nybegynder
06. november 2001 - 12:28 #13
Hvad hedder dit datofelt
Avatar billede bennytordrup Nybegynder
06. november 2001 - 12:28 #14
Prøv at poste koden
Avatar billede bccinlove Nybegynder
06. november 2001 - 12:31 #15
Private Sub Command1_Click()
Dim datDB As Database
Dim recPrioriteter As Recordset
Dim objOutLook As Outlook.Application
Dim objMailItem As Outlook.MailItem
   
   
    DBEngine.SystemDB = \"F:\\VB\\Troels\\system.mdw\"
    DBEngine.DefaultUser = \"lj\"
    DBEngine.DefaultPassword = \"pippen\"
    Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\troels.mdb\")
    Set recPrioriteter = datDB.OpenRecordset(\"SELECT * FROM tblPrioritet WHERE [PrioritetHuskeDatoUdloeb]>#\" & Format$(Now, \"mm-dd-yyyy\") & \"#\")
    Do While Not recPrioriteter.EOF
         
        Set objOutLook = CreateObject(\"Outlook.Application\")
        Set objMailItem = objOutLook.CreateItem(olMailItem)
       
        Select Case recPrioriteter.Fields(PrioritetHuskeDatoUdloebMedarbejderID)
        Case 44
        objMailItem.To = \"tm@tm-support.dk\"
               
        End Select
       
        recPrioriteter.MoveNext
    Loop
End Sub
Avatar billede bennytordrup Nybegynder
06. november 2001 - 12:47 #16
Public Function AccessDate(ByVal aDate As Date) As String
    On Error Resume Next
    AccessDate = \"DateSerial(\" & Year(aDate) & \",\" & Month(aDate) & \",\" & Day(aDate) & \")\"
End Function

Private Sub Command1_Click()
Dim datDB As Database
Dim recPrioriteter As Recordset
Dim objOutLook As Outlook.Application
Dim objMailItem As Outlook.MailItem
   
   
    DBEngine.SystemDB = \"F:\\VB\\Troels\\system.mdw\"
    DBEngine.DefaultUser = \"lj\"
    DBEngine.DefaultPassword = \"pippen\"
    Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\troels.mdb\")
    Set recPrioriteter = datDB.OpenRecordset(\"SELECT * FROM tblPrioritet WHERE [PrioritetHuskeDatoUdloeb]>\" & AccessDate(Now))
    Set objOutLook = CreateObject(\"Outlook.Application\")
    Do While Not recPrioriteter.EOF
         
        Set objMailItem = objOutLook.CreateItem(olMailItem)
       
        Select Case recPrioriteter.Fields(PrioritetHuskeDatoUdloebMedarbejderID)
        Case 44
        objMailItem.To = \"tm@tm-support.dk\"
               
        End Select
       
        recPrioriteter.MoveNext
    Loop
    Set objOutLook = Nothing
End Sub
Avatar billede bccinlove Nybegynder
06. november 2001 - 13:28 #17
Nu ser det sådan her ud:

Private Sub Command1_Click()
Dim datDB As Database
Dim recPrioriteter As Recordset
Dim objOutLook As Outlook.Application
Dim objMailItem As Outlook.MailItem
   
   
    DBEngine.SystemDB = \"F:\\VB\\Troels\\system.mdw\"
    DBEngine.DefaultUser = \"lj\"
    DBEngine.DefaultPassword = \"pippen\"
    Set datDB = DBEngine.Workspaces(0).OpenDatabase(\"F:\\VB\\Troels\\troels.mdb\")
    Set recPrioriteter = datDB.OpenRecordset(\"SELECT * FROM tblPrioritet WHERE [PrioritetHuskeDatoUdloeb]>#\" & Format$(Date, \"mm-dd-yy\") & \"#\")
    Do While Not recPrioriteter.EOF
         
        Set objOutLook = CreateObject(\"Outlook.Application\")
        Set objMailItem = objOutLook.CreateItem(olMailItem)
       
        Select Case recPrioriteter.Fields(\"PrioritetHuskeDatoUdloebMedarbejderID\")
        Case 44
        objMailItem.To = \"tm@tm-support.dk\"
        objMailItem.Subject = \"TEST FRA VB\"
        objMailItem.Body = \"HURRA\"
       
        objMailItem.Send
       
        End Select
       
        recPrioriteter.MoveNext
    Loop
End Sub

Men jeg sender lige så mange mails som der står 44 i PrioritetHuskeDatoUdloebMedarbejderID... det skulle jo kun være når datoen var overskredet!

Any clues this time ?

Jeg har vidst slet ikke sagt at jeg er meget glad for din hjælp - og du skal selvfølgelig nok blive pointbelønnet!

Troels
Avatar billede bennytordrup Nybegynder
06. november 2001 - 13:32 #18
Prøv følgende tre forespørgsler direkte i access

SELECT Count(*) FROM tblPrioritet WHERE PrioritetHuskeDatoUdloeb>Now

SELECT Count(*) FROM tblPrioritet WHERE PrioritetHuskeDatoUdloebMedarbejderID=44

SELECT Count(*) FROM tblPrioritet WHERE (PrioritetHuskeDatoUdloeb>Now) AND (PrioritetHuskeDatoUdloebMedarbejderID=44)

Hvad giver det?
Avatar billede bccinlove Nybegynder
06. november 2001 - 13:42 #19
Jeg er ikke den store haj til access kan du specificere lidt how to do it ?

:-)
Avatar billede bennytordrup Nybegynder
06. november 2001 - 13:44 #20
Åbn Access

Vælg Forespørgsler

Vælg Opret Ny, Design
lad være med at tilføje tabeller.
På toolbaren trykker du på knappen SQL

Klip forespørgslerne en ad gangen og sæt ind i forespørgselsdesignet (kun en select)
Tryk på den knap, der stod SQL på før.
Avatar billede bccinlove Nybegynder
06. november 2001 - 13:49 #21
Tak for det!

her er tallene:
SELECT Count(*) FROM tblPrioritet WHERE PrioritetHuskeDatoUdloeb>Now = 99

SELECT Count(*) FROM tblPrioritet WHERE PrioritetHuskeDatoUdloebMedarbejderID=44 = 97

SELECT Count(*) FROM tblPrioritet WHERE (PrioritetHuskeDatoUdloeb>Now) AND (PrioritetHuskeDatoUdloebMedarbejderID=44) = 92

Jeg sende 92 mails...
Avatar billede bennytordrup Nybegynder
06. november 2001 - 13:51 #22
Det skal du også ud fra det kode, som du har vist.
Avatar billede bccinlove Nybegynder
06. november 2001 - 13:54 #23
Måske, men der er altså ingen dato\'er i tabellen der er overskredet endnu...
Avatar billede bennytordrup Nybegynder
06. november 2001 - 13:54 #24
Prøv lige med SELECT Count(*) FROM tblPrioritet
Avatar billede bccinlove Nybegynder
06. november 2001 - 13:55 #25
314
Avatar billede bennytordrup Nybegynder
06. november 2001 - 13:57 #26
Den første SELECT Count, som jeg gav dig, fortæller antallet af poster, hvor det datofelt er større end din computers tid.
Avatar billede bennytordrup Nybegynder
06. november 2001 - 13:58 #27
Prøv lige SELECT Count(*) FROM tblPrioritet WHERE PrioritetHuskeDatoUdloeb IS NULL
Avatar billede bccinlove Nybegynder
06. november 2001 - 13:59 #28
208
Avatar billede bennytordrup Nybegynder
06. november 2001 - 14:02 #29
Prøv en SELECT DISTINCT PrioritetHuskeDatoUdloeb FROM tblPrioritet WHERE PrioritetHuskeDatoUdloebMedarbejderID=44 ORDER BY PrioritetHuskeDatoUdloeb DESC

Den giver dig en faldende liste over alle unikke datoer, hvor medarbejderid er 44
Avatar billede bccinlove Nybegynder
06. november 2001 - 14:05 #30
PrioritetHuskeDatoUdloeb
01-02-2026
31-01-2026
01-01-2026
01-12-2025
01-03-2024
31-01-2024
25-04-2023
18-03-2023
01-09-2022
24-03-2022
01-10-2021
01-08-2021
01-04-2021
31-01-2021
31-12-2020
30-09-2020
01-07-2020
28-03-2020
26-07-2019
29-04-2019
01-10-2018
01-02-2018
31-12-2017
10-10-2017
01-12-2016
01-10-2016
01-04-2016
01-03-2016
01-02-2016
30-12-2015
30-06-2014
31-03-2014
30-06-2013
31-12-2012
31-12-2011
14-03-2011
31-12-2010
01-08-2010
30-06-2010
31-12-2009
31-03-2009
25-03-2009
30-09-2008
31-12-2007
01-06-2007
01-02-2007
01-12-2006
31-08-2006
10-07-2006
10-04-2006
01-04-2006
01-02-2006
31-12-2005
31-03-2005
01-10-2004
31-07-2004
10-07-2004
30-06-2004
11-06-2004
01-06-2004
10-04-2004
01-04-2004
29-04-2003
16-04-2003
31-03-2002
31-12-2001
01-12-2001
01:09:17
01:08:21
01:07:02
01:02:16
01:02:06
Avatar billede bennytordrup Nybegynder
06. november 2001 - 14:06 #31
Doooh.

Vend lige ulighedstegnet om i OpenRecordSet. Det skal være:

Set recPrioriteter = datDB.OpenRecordset(\"SELECT * FROM tblPrioritet WHERE [PrioritetHuskeDatoUdloeb]<\" & AccessDate(Now))
Avatar billede bccinlove Nybegynder
06. november 2001 - 14:20 #32
et sekund
Avatar billede bccinlove Nybegynder
06. november 2001 - 14:21 #33
Okay nu sender den faktisk kun fem mails... det er jo næsten perfekt!
Avatar billede bennytordrup Nybegynder
06. november 2001 - 14:23 #34
Det, vi gjorde før, var at finde alle de fremtidige ;-)
Avatar billede bccinlove Nybegynder
06. november 2001 - 14:28 #35
Ja det kunne jeg forstå - det er selvfølgelig også fedt!

Det vil jo faktisk sige at du her dagens helt!
Avatar billede bennytordrup Nybegynder
06. november 2001 - 14:29 #36
Det lyder jo godt :-)
Avatar billede bccinlove Nybegynder
06. november 2001 - 14:33 #37
AND HERE GOES YOUR POINTS!

Jeg vil gerne give mere, men man kan jo ikke forhøje pointantallet... :-(

Du skal have tusind tak!
Avatar billede bccinlove Nybegynder
06. november 2001 - 14:34 #38
Tusind TAK!
Avatar billede bennytordrup Nybegynder
06. november 2001 - 14:35 #39
Det var så lidt? Jeg har også selv fået hjælp herigennem :-)
Avatar billede bccinlove Nybegynder
07. november 2001 - 13:21 #40
NU HAR JEG BRUG FOR DIN HJÆLP IGEN!

ER DU HER
Avatar billede bennytordrup Nybegynder
07. november 2001 - 13:22 #41
Hvad er problemet?
Avatar billede bccinlove Nybegynder
07. november 2001 - 13:24 #42
Jeg opretter et nyt spørgsmål så kan du også få lidt flere point...
Det kommer til at hedde \"VB til Benny\"
Avatar billede bccinlove Nybegynder
07. november 2001 - 13:46 #43
ER DU HER ?
Her er spørgsmålet:
http://www.eksperten.dk/spm/130737
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