06. november 2001 - 10:53Der 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
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
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
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.
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.
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\"
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
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!
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
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.