• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mailing w Access

Object Storage Arubacloud
0 głosów
120 wizyt
pytanie zadane 27 września 2017 w Visual Basic przez djedi Nowicjusz (180 p.)
edycja 27 września 2017 przez djedi

Jestem początkujący w Accessie. Kiedyś znalazłem fajny kod dzięki któremu można wysyłać maile bezpośrednioz Accessa. Troszeczkę go zmodyfikowałem, ale nie działa mi poprawnie i nie wiem dlaczego.

cytuję kod:

Private Sub Polecenie5_Click()

    Dim oApp As Object
    Dim oMail As Object
    Dim rcs As DAO.Recordset
    Dim strBCC As String
    
    On Error Resume Next
    Set oApp = GetObject(, "Outlook.Application")
    If Err.Number <> 0 Then Set oApp = CreateObject("Outlook.Application")
    oApp.GetNamespace("MAPI").Logon
    On Error GoTo 0
    
    If Tekst0 = "mailing12" Then
    Set rcs = CurrentDb.OpenRecordset("SELECT Dane.[e-mail] FROM Dane WHERE (((Dane.semestr)=1) AND ((Dane.mailing)=Yes)) OR (((Dane.semestr)=2) AND ((Dane.mailing)=Yes));")
    With rcs
        Do Until .EOF
            strBCC = strBCC & Left(.Fields(0).Value, InStr(1, .Fields(0).Value, "#", vbDatabaseCompare) - 1) & ";"
            .MoveNext
        Loop
    End With
    End If
            If Tekst0 = "mailing34" Then
            Set rcs = CurrentDb.OpenRecordset("SELECT Dane.[e-mail] FROM Dane WHERE (((Dane.semestr)=3) AND ((Dane.mailing)=Yes)) OR (((Dane.semestr)=4) AND ((Dane.mailing)=Yes));")
            With rcs
            Do Until .EOF
            strBCC = strBCC & Left(.Fields(0).Value, InStr(1, .Fields(0).Value, "#", vbDatabaseCompare) - 1) & ";"
            .MoveNext
            Loop
            End With
            End If
            
                If Tekst0 = "mailing56" Then
                Set rcs = CurrentDb.OpenRecordset("SELECT Dane.[e-mail] FROM Dane WHERE (((Dane.semestr)=5) AND ((Dane.mailing)=Yes)) OR (((Dane.semestr)=6) AND ((Dane.mailing)=Yes));")
                With rcs
                Do Until .EOF
                strBCC = strBCC & Left(.Fields(0).Value, InStr(1, .Fields(0).Value, "#", vbDatabaseCompare) - 1) & ";"
                .MoveNext
                Loop
                End With
                End If
        
    'strBCC = Left(strBCC, Len(strBCC) - 1) 
       
    Set oMail = oApp.createitem(0)
    With oMail
        .subject = "Wiadomość"
        .BCC = strBCC
        .Display
    End With
        Set oMail = Nothing
End Sub

Jak widać powyżej przyciskami w formularzu wywołuję odpowiednią grupę ludzi, do których chcę napisac maila - mailing12, mailing34 i mailing56. Każda grupa jest wyszukiwana za pomocą SQL z tej samej bazy danych.

Wszystko działa dobrze dla mailing12, lecz niestety dla mailing34 i mailing56 zwraca mi komunikat:

Runtime error 5
Invalid procedure call or argument

i zaznacza mi linię:

strBCC = strBCC & Left(.Fields(0).Value, InStr(1, .Fields(0).Value, "#", vbDatabaseCompare) - 1) & ";"

Kiedy usuwam "-1"

wszystko działa poprawnie. Oczywiście w tym momencie adresy mailowe są dłuższe o znak "#". Mogę dowolnie zwiększyć te wartości dodając np: "+4" znaki i wszystko będzie ok. Jednak nie mogę odjąć tego jednego znaku, bo znów wywala błąd powyżej.

Powtarzam, że dla mailing12 wszystko działa bez zarzutu.

 

edit: czy możliwe, że skuteczność kodu zależy od ilości rekordów (maili)? kwerenda mailing12 posiada około 20 rekordów i jest najmniej liczna. Pozostałe są o kilka-kilkanaście rekordów liczniejsze.

Zauważyłem jeszcze, że poprzez korektę poprawnie działającego wiersza:

If Tekst0 = "mailing12" Then Set rcs = CurrentDb.OpenRecordset("SELECT Dane.[e-mail] FROM Dane WHERE (((Dane.semestr)=1) AND ((Dane.mailing)=Yes)) OR (((Dane.semestr)=2) AND ((Dane.mailing)=Yes));")

i przydzielenie wartości dane.semestr=3 oraz dane.semestr=4 kod przestaje poprawnie działać...

Gdzie tkwi problem???

1 odpowiedź

0 głosów
odpowiedź 28 września 2017 przez djedi Nowicjusz (180 p.)
Problem rozwiązany!

Cóż, bez umieszczenia go na tym forum, na pewno nie zacząłbym myśleć w ten sposób...

Otóż struktura niektórych rekordów (adresów mailowych) była nieprawidłowa. Najwidoczniej gdzieś po drodze zostały one przeze mnie przeedytowane.

Dziękuję wszystkim za bierną pomoc ;)

Bez niej sam sobie bym nie poradził :)

Podobne pytania

+1 głos
2 odpowiedzi 481 wizyt
pytanie zadane 2 sierpnia 2019 w PHP przez pog(r)ubiony Początkujący (340 p.)
0 głosów
1 odpowiedź 134 wizyt
pytanie zadane 22 grudnia 2018 w Offtop przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
3 odpowiedzi 232 wizyt
pytanie zadane 23 stycznia 2018 w HTML i CSS przez niko404 Użytkownik (910 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...