30. maj 2007 - 12:09Der er
17 kommentarer og 1 løsning
Send email når combo opdateres
Hej
Jeg har en forespørgsel som viser min forms aktuelle post baseret på nøglen defectID. Nu vil jeg gerne sende en rapport baseret på denne forespørgsel når en combo opdateres. Jeg vil gerne have en msgbox der spørger om rapporten skal sendes.
Min forespørgsel ser sådan ud :
SELECT tblDefect.defectID, tblDefect.description, tblDefect.application, tblDefect.environment, tblDefect.releaseversion, tblDefect.tester, tblDefect.assigndate, tblDefect.assignedto, tblDeveloper.email, tblDefect.status, tblDefect.comment, tblDefect.Severity FROM tblDeveloper INNER JOIN tblDefect ON tblDeveloper.Developer = tblDefect.assignedto WHERE (((tblDefect.defectID) Like [forms]![OpretDefect]![defectID]));
Nogen der har en god ide ? Jeg ved at der er mange spørgsmål på denne funktion, men har ikke lige fundet et svar jeg kan bruge.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Jeg er ikke sikker på, at du kan sende en rapport fra en forespørgsel.
Hvis du laver en formular, er det derimod intet problem. Du skal i så fald benytte kommandoen DoCmd.SendObject. Men jeg har skrevet en artikel om emnet. Der kan du også se, hvor du skal indsætte de forskellige variabler.
Hej mugs Jeg fik vist formuleret mig lidt uklart Min rapport er klar og virker. Den viser indholdet af ovenstående forespørgsel baseret på værdien i feltet defectID. Nu vil jeg så bare gerne have sendt rapporten til den mailadresse som er i forespørgslen
Synes godt om
Slettet bruger
30. maj 2007 - 13:17#4
Private Sub NavnCombo_AfterUpdate() Dim db As DAO.Database Dim rst As DAO.Recordset Dim EmailAdr As String If MsgBox("Ønsker du at sende e-mail?", vbYesNo) = vbYes Then Set db = CurrentDb() Set rst = db.OpenRecordset("NavnForespørgselEllerSelveForespørgslen") With rst .MoveFirst Do EmailAdr = ![email] DoCmd.SendObject acSendReport, "NavnRapport", "Snapshot Format", EmailAdr, , , "Test", "Test besked...", False .MoveNext Loop Until .EOF .Close End With End If End Sub
Synes godt om
Slettet bruger
30. maj 2007 - 13:18#5
Jeg har lagt et loop ind, hvis nu der er flere e-mail adresser i forespørgslen!~)
Hej spg, jeg får en runtime error '3061' Der er for få parametre. Der var ventet 1. Debuggeren peger på linien med "Set rst = db.OpenRecordset("QDefectMail") Min forespørgsel og rapport hedder begge QDefectMail (dårlig navngivning, ved det)
Min kode ser sådan ud :
Private Sub assignedto_AfterUpdate() Dim db As DAO.Database Dim rst As DAO.Recordset Dim EmailAdr As String If MsgBox("Ønsker du at sende e-mail?", vbYesNo) = vbYes Then Set db = CurrentDb() Set rst = db.OpenRecordset("QDefectMail") With rst .MoveFirst Do EmailAdr = ![email] DoCmd.SendObject acSendReport, "QDefectMail", "Snapshot Format", EmailAdr, , , "Test", "Test besked...", False .MoveNext Loop Until .EOF .Close End With End If
End Sub
Synes godt om
Slettet bruger
30. maj 2007 - 14:08#7
Jeg havde selv en forespørgsel, hvor jeg havde lagt et fast kriterie ind og det virkede. Så lagde jeg efterfølgende et kriterie ind, som var afhængig af komboboksen og fik den samme fejlmeddelse, som du fik....
Du kan prøve at skrive selve sql'en ind:
Set rst = db.OpenRecordset("SELECT tblDefect.defectID, tblDefect.description, tblDefect.application, tblDefect.environment, tblDefect.releaseversion, tblDefect.tester, tblDefect.assigndate, tblDefect.assignedto, tblDeveloper.email, tblDefect.status, tblDefect.comment, tblDefect.Severity FROM tblDeveloper INNER JOIN tblDefect ON tblDeveloper.Developer = tblDefect.assignedto WHERE (((tblDefect.defectID) Like [forms]![OpretDefect]![defectID]));")
Synes godt om
Slettet bruger
30. maj 2007 - 14:09#8
ellers er du nød til at rode lidt rundt med forespørgslen... jeg er nemlig på vej ud af døren!~)
Du har ret, da jeg fjernede kriteriet fra min forespørgsel, så virkede det. Jeg prøvede så med at skrive selve sql'en ind, men det virkede ikke. Jeg ikke brug for loopet, da der kun er en post med en email adr, hvad skal jeg ændre for at fjerne loopet ?
Jeg må rode lidt videre, men du får alligevel point for en solid indsatt :-) takker.
Idet ”1 arg”, ”2 arg” o.s.v henviser til handlingens argumenter således:
-1. argument er den objekttype du evt. vil vedhæfte. -2. argument er Objektnavnet på en evt. vedhæftet rapport. -3. argument er hvilket Outputformat rapporten skal have. -4. argument er modtagerens e-mailadresse. -5. argument er Cc adressat. -6. argument er Bcc adressat. -7. er e-mailens emne. -8. er e-mailens tekst (Brødtekst). -False betyder, at du ikke vil redigere meddelelsen inden afsendelse. -9. er til markering om benyttelse af en skabelonfil.
4. Argumenterne 1 og 2 er valgfrie og skal blot være tomme, hvis der ikke skal vedhæftes en rapport. Hvis argument 1 er udfyldt er 2 og 3 obligatoriske. Du vælger et format i Argument 3. Der kan vælges flg formater:
Hej mugs, jeg har kun hørt godt om din artikel og flere har haft glæde af den, men jeg gik desværre kold på den, hvilket var min skyld og ikke artiklens.
Hej spg, når jeg åbner min forespørgsel, får jeg beskeden "Kan ikke angive egenskaben BegrænsTilListe til Nej nu. Kunne det være den manglende parameter jeg får en fejl om ? Hvis man kunne sætte et "Enter" ind var det måske løsningen på mit problem
Synes godt om
Slettet bruger
30. maj 2007 - 21:36#14
Så er jeg på igen...
Jeg kom til at tænke, du kan også lave det helt simpelt ved at lade en dlookup hente email fra forespørgslen!~)
"[DefectId] = '" & forms!OpretDefect!defectID & "'") hvis DefectID er en tekststreng!~)
Jeg vil kigge lidt på mit første løsningsforslag, da jeg selv vil bygge lidt videre på det og bruge det en anden gang, så hvis det lykkedes gi'r jeg besked!~)
Synes godt om
Slettet bruger
30. maj 2007 - 21:38#15
DLookup'en bør se nogenlunde sådan her ud!~)
Private Sub DefectID_AfterUpdate() Dim EmailAdr As String If MsgBox("Ønsker du at sende e-mail?", vbYesNo) = vbYes Then EmailAdr = dlookup("[email]","QDefectMail","[DefectId] = " & forms!OpretDefect!defectID) DoCmd.SendObject acSendReport, "NavnRapport", "Snapshot Format", EmailAdr, , , "Test", "Test besked...", False End If End Sub
Synes godt om
Slettet bruger
30. maj 2007 - 21:41#16
Du kan selvfølgelig vælge et andet format, men der kan ske alt muligt med rapporten. Snapshot har den ulempe, at man skal have snapshot viewer, den kan dog hentes gratis hos microsoft!~)
ps. man kan hvis heller ikke rette i en snapshot rapport...
Synes godt om
Slettet bruger
30. maj 2007 - 23:48#17
Ok... Problemet var runtime error 3061, "Too few parameters. Expected 1".... Jet-engine tror at kriteriet er forespørgslens "svar", så løsningen er at fodre jet med den rette parameter:
Private Sub assignedto_AfterUpdate() Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim rst As DAO.Recordset Dim EmailAdr As String If MsgBox("Ønsker du at sende e-mail?", vbYesNo) = vbYes Then Set db = CurrentDb() Set qdf = db.QueryDefs("QDefectMail") qdf.Parameters(0) = forms!OpretDefect!defectID Set rst = qdf.OpenRecordset With rst .MoveFirst Do EmailAdr = ![email] DoCmd.SendObject acSendReport, "QDefectMail", "Snapshot Format", EmailAdr, , , "Test", "Test besked...", False .MoveNext Loop Until .EOF .Close End With End If End Sub
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.