الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية إرسال رسائل من التقرير

بدأه miedoo في 6 يوليو 2010 · 19 رد · 1,284 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنا عندي نموزج عبارة عن تقرير فيه مجموعات من ال groups و لكل مجموعة ناس مثل

Academy

A

B

C

و طبعا أنا بدي أرسل رسالة لكل من A B C أو المجموعة كلها و لنفترض إسم ال Object للمرسل إليه whoto كيف أقوم بتعبئة هذا الـ Object whoto ؟؟

أي ما هو الكود المناسب لتعبئته ؟

أرجو الرد بسرعة أنا أدرب نفسي لكن لا أعرف كيف أكمل عملي بسببه

تم تعديل هذه المشاركة بواسطة miedoo في 6 يوليو 2010 في 20:05

#2
miedoo كتب:

أنا عندي نموزج عبارة عن تقرير فيه مجموعات من ال groups و لكل مجموعة ناس مثل

Academy

A

B

C

و طبعا أنا بدي أرسل رسالة لكل من A B C أو المجموعة كلها و لنفترض إسم ال Object للمرسل إليه whoto كيف أقوم بتعبئة هذا الـ Object whoto ؟؟

أي ما هو الكود المناسب لتعبئته ؟

أرجو الرد بسرعة أنا أدرب نفسي لكن لا أعرف كيف أكمل عملي بسببه

لماذا لاتوجد ردود ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#3
اقتباس

لماذا لاتوجد ردود ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

1- وهو الاهم..عدم وجود البرنامج المرفق

2-السؤال غير واضح.. العنوان شي.. والتفاصيل شي اخر

3-ارجو الا يكون واجب دراسي لجامعة او كلية

تحياتي

وَمِنَ النَّاسِ مَن يُعْجِبُكَ قَوْلُهُ فِي الْحَيَاةِ الدُّنْيَا وَيُشْهِدُ الله عَلَى مَا فِي قَلْبِهِ وَهُوَ أَلَدُّ الْخِصَامِ

مواضيعي ومشاركاتي

#4

أولا هذا ليس واجبا مدرسيا

ثانيا لا يمكنني رفع مرفقات لأنني سبق و قلت أني أدرب نفسي و الملف كبير

ثالثا العنوان نفسه و لا يوجد اختلاف عن المحتوى و لكن لا أريد إلا method فقط تساعد على تسجيل عناوين المرسل إليه لكن باستخدام check box و في الواقع طبقت الكثير من الأكواد لكنها لم تعمل مع إنها مجربة

#5

مثل هذا

Private Sub Combo59_Change()

Dim stWhere As String

Dim varTo As Variant

Dim stWho As String

If Me.Combo59.Selected Then

stWho = Me.Combo59

stWhere = "tbUser.ID = " & "'" & stWho & "'"

varTo = DLookup("[E-mail Address]", "tbUser", stWhere)

Me.Email_Address = varTo

End If

End Sub

Combo59 هو فيه قائمة المجموعات مثل أكاديميين, عاملين .... إلخ و بمجرد ما أختار واحد منهم يسجل كل إيميلات داخل المجموعة المختارة في Email_Address

#6

أين الردود ؟ ماهو تعليقكم على الكود ؟

يا جماعة دعونا ننهي هذه المشكلة حتى إنني بدأت أعتقد إن طلبي مستحيل

تم تعديل هذه المشاركة بواسطة miedoo في 10 يوليو 2010 في 09:45

#7

وجدت هذا الكود و قمت بتطبيقه

Public Function SendEMail()

Dim db As DAO.Database

Dim MailList As DAO.Recordset

Dim MyOutlook As Outlook.Application

Dim MyMail As Outlook.MailItem

Dim Subjectline As String

Dim BodyFile As String

Dim fso As FileSystemObject

Dim MyBody As TextStream

Dim MyBodyText As String

Set fso = New FileSystemObject

' First, we need to know the subject.

' We can??t very well be sending around blank messages...

Subjectline$ = InputBox$("Please enter the subject line for this mailing.", _

"We Need A Subject Line!")

' If there??s no subject, call it a day.

If Subjectline$ = "" Then

MsgBox "No subject line, no message." & vbNewLine & vbNewLine & _

"Quitting...", vbCritical, "E-Mail Merger"

Exit Function

End If

' Now we need to put something in our letter...

BodyFile$ = InputBox$("Please enter the filename of the body of the message.", _

"We Need A Body!")

' If there??s nothing to say, call it a day.

If BodyFile$ = "" Then

MsgBox "No body, no message." & vbNewLine & vbNewLine & _

"Quitting...", vbCritical, "I Ain??t Got No-Body!"

Exit Function

End If

' Check to make sure the file exists...

If fso.FileExists(BodyFile$) = False Then

MsgBox "The body file isn??t where you say it is. " & vbNewLine & vbNewLine & _

"Quitting...", vbCritical, "I Ain??t Got No-Body!"

Exit Function

End If

' Since we got a file, we can open it up.

'Set MyBody = fso.OpenTextFile(BodyFile, ForReading, False, TristateUseDefault)

' and read it into a variable.

MyBodyText = MyBody.ReadAll

'MyBodyText = Me.mess_text

' and close the file.

MyBody.Close

' Now, we open Outlook for our own device..

Set MyOutlook = New Outlook.Application

' Set up the database and query connections

Set db = CurrentDb()

Set MailList = db.OpenRecordset("MyEmailAddresses")

' now, this is the meat and potatoes.

' this is where we loop through our list of addresses,

' adding them to e-mails and sending them.

Do Until MailList.EOF

' This creates the e-mail

Set MyMail = MyOutlook.CreateItem(olMailItem)

' This addresses it

MyMail.To = MailList("email")

'This gives it a subject

MyMail.Subject = Subjectline$

'This gives it the body

MyMail.Body = MyBodyText

'If you want to send an attachment

'uncomment the following line

'MyMail.Attachments.Add "c:myfile.txt", olByValue, 1, "My Displayname"

' To briefly describe:

' "c:myfile.txt" = the file you want to attach

'

' olByVaue = how to pass the file. olByValue attaches it, olByReference creates a shortcut.

' the shortcut only works if the file is available locally (via mapped or local drive)

'

' 1 = the position in the outlook message where to attachment goes. This is ignored by most

' other mailers, so you might want to ignore it too. Using 1 puts the attachment

' first in line.

'

' "My Displayname" = If you don??t want the attachment??s icon string to be "c:myfile.txt" you

' can use this property to change it to something useful, i.e. "4th Qtr Report"

'This sends it!

MyMail.Send

'Some people have asked how to see the e-mail

'instead of automaticially sending it.

'Uncomment the next line

'And comment the "MyMail.Send" line above this.

'MyMail.Display

'And on to the next one...

MailList.MoveNext

Loop

'Cleanup after ourselves

Set MyMail = Nothing

'Uncomment the next line if you want Outlook to shut down when its done.

'Otherwise, it will stay running.

'MyOutlook.Quit

Set MyOutlook = Nothing

MailList.Close

Set MailList = Nothing

db.Close

Set db = Nothing

End Function

و هذا من موقع

http://www.jephens.com/2007/05/13/how-to-send-e-mail-from-ms-access-using-outlook/

لكن تظهر لي رسالة خطأ ما معناها؟

Macro name: F_Mailings : Command61 : OnClick : Embedded Macro

condition: True

Action Name: RunCode

Arguments: =SendEMail()

Error number: 2950

#8

على فكرة يبدو إنه عندي مشكلة في الأكسس لأن أي كود مجرب خصوصا إخفاء / إظهار Subform أو أي شيء بواسطة checkbox لا شيء يعمل

أرجو تغيير العنوان إلى مساعدة في كود إرسال رسائل من Form و الأكسس لا يستجيب

تم تعديل هذه المشاركة بواسطة miedoo في 10 يوليو 2010 في 11:31

#9

لم أستطع رفع أي موضوع في أي قسم --- يبدو إن هناك مشكلة في المنتدى ---

***********************************************************************

أنا عندي Form صغير حاولت كثيرا أن أجعل الText box الذي فيه يستلم قيم معينة من خلال Combo box

ما في Combo box عبارة عن أماكن عمل من جدول مستقل و أريد إنه كلما اخترت مكان عمل معين يسجل في Text box بريد إلكتروني لكل شخص يعمل في ذاك المكان و ها هو الكود

Private Sub Combo57_Click()

Dim varTo As Variant

If Me.Combo57.Selected = True Then

stWho = Me.Combo57.Value

stWhere = "Persons.PlaceID = " & "'" & stWho & "'"

varTo = DLookup("[E-mail Address]", "[Persons]", stWhere)

If Me.To_Text.Text = "" then

Me.To_Text.ControlSource = varTo

Else

Me.To_Text.ControlSource = " &" + varTo

End If

End Sub

المشكلة إنه لا توجد مشاكل في الكود و مع هذا لا ينفذ ما السبب ؟؟

لم أستطع رفع أي موضوع في أي قسم --- يبدو إن هناك مشكلة في المنتدى ---

#10
miedoo كتب:

المشكلة إنه لا توجد مشاكل في الكود و مع هذا لا ينفذ ما السبب ؟؟

أخي الكريم، هنالك على الأقل مشكلتان في الكود:

1. الدالة DLookup لا تعيد أكثر من قيمة واحدة، وأنت تتوقع أن تعيد عدداً من العناوين حسب ما فهمت.

2. الظن الغالب أنك تستخدم الخاصية ControlSource في غير مكانها الصحيح، هذه الخاصية تحدد مصدر العنصر (الحقل في جدول أو استعلام الذي يمثله العنصر في النموذج)، وأنت كما يبدو تريد تعيين خاصية (نص) العنصر.

المشكلة من بداية سؤالك أنك جديد على الأكسس، ولم تستخدم مفردات ومصطلحات الأكسس في التخاطب مع أعضاء قسم الأكسس... مثلاً، ليس هناك ما يسمى (نموذج عبارة عن تقرير) هنا؛ لكل من هذين المصطلحين معناه الخاص المستقل: في الأكسس النموذج كائن والتقرير كائن آخر.

الآن السؤال: هل تريد مجموعة من عناوين البريد المستعادة من جدول (حسب شرط محدد في combobox) مفصولة بالرمز &، في مربع نص؟

لو كان هذا هو السؤال الذي تريد أن تسأله من البداية، فأرجو الرد بالإيجاب...

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 11 يوليو 2010 في 12:52

#11

صدقت أخي فأنا خريج جامعة و لم يساعدني أحد في ms access لهذا فأنا أعمل وحدي

أما بالنسبة للسؤال .................... نعم......................

و هو أساس المشكلة

أمالابالنسبة لماذا بعض الأكواد لاتعمل بسبب Security option في الماكرو و قد حللتها

تم تعديل هذه المشاركة بواسطة miedoo في 12 يوليو 2010 في 10:42

#12

اسف على الإزعاج لكن هذا ما أريده بالضبط أخ أحمد مبارك الحيقي و لك جزيل الشكر

#13

حسن أخي الكريم، إذن جرب الكود التالي (تعديل على آخر كود لك):

Private Sub Combo57_Click()
    Dim rs As DAO.Recordset

    If Me.Combo57.Selected = True Then
        Set rs = CurrentDb.OpenRecordset("SELECT [E-mail Address] FROM Persons WHERE PlaceID = '" & Me.Combo57.Value & "'", dbOpenSnapshot)
        While Not rs.EOF
            Me.To_Text.Text = Me.To_Text.Text & rs(0) & "&"
            rs.MoveNext
        Wend
        rs.Close
        Me.To_Text.Text = Left(Me.To_Text.Text, Len(Me.To_Text.Text) - 1)
    End If

    Set rs = Nothing
End Sub

هذا المثال يستخدم ما يعرف بكائن مجموعة سجلات (واحد من كائنات تقنية خاصة بالأكسس للوصول إلى البيانات، وهذه التقنية متمثلة في نموذج الكائنات المسمى DAO). تستطيع باستخدام مجموعة السجلات أن تستعيد نتيجة استعلام مكونة من عدة سجلات (كما يدل الاسم على ذلك)، وهذا هو ما تم في الكود أعلاه عبر الطريقة OpenRecordset.

تستطيع الدوران على كل السجلات في هذه المجموعة باستخدام أي عبارة تكرار (هنا While) مع الحرص على تحريك مؤشر السجلات إلى السجل التالي في كل دورة، عبر الطريقة MoveNext.

rs(0) تعني الحقل الأول في مجموعة السجلات (وهو هنا الحقل الوحيد حسب استعلامنا، ويمثل عنوان بريد)، وقد استخدمناه في تكوين قائمة العناوين في مربع النص.

اختصرت في الشرح لأنك مبرمج كما فهمت بلغات أخرى، ولا أظنك تجد صعوبة في تفكيك الكود، خاصة مع قراءة حول الأكسس وكائناته...

والله أعلم.

#14

مشكور أخي و جاري التجربة .... و الكود مفهوم :)

#15

للأسف لم يعمل أخي

ما هي الإجراءات التي يجب أن أتأكد منها

و لا يقبل Selected

و يظهر لي Data type mismatch in criteria expression في

Set rs = CurrentDb.OpenRecordset("SELECT [E-mail Address] FROM Persons WHERE PlaceID = '" & Me.Combo57.Value & "'", dbOpenSnapshot)

تم تعديل هذه المشاركة بواسطة miedoo في 15 يوليو 2010 في 12:19

#16

يبدو أنني ارتكبت بعض الأخطاء فيما يخص خصائص قوائم التحرير... لذا أرفق لك هذا المثال السريع، لعله يوضح الطريقة بشكل أفضل، والله المستعان.

ملحوظة: رسالة الخطأ قد تكون بسبب نوع بيانات الحقل PlaceID... راجع الملف المرفق من فضلك من أجل مثال على طريقة الاستخدام...

والله أعلم.

CombineValuesFromTableInTextBox.rar

#17

كلاهما Number

PlaceID مأخوذ من جدول فيه attribute و هو primary key auto number و اسمه ID

#18

مشكوووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووور أخيييييييييييييييييييييييييييييييييييييييييييييييييييييييييييييييييييي

الكود اشتغل و يعطيك ألف عافية لكن خدمة صغيرة ممكن شرح Left() , Len() ?

تم تعديل هذه المشاركة بواسطة miedoo في 17 يوليو 2010 في 11:05

#19
miedoo كتب:

كلاهما Number

هذا أحد الأخطاء السابقة التي ارتكبناها، فإننا عاملنا PlaceID كحقل نصي عند شرط المقارنة (لاحظ علامات التنصيص المفردة).

على كل حال، بالنسبة للدالتين أعلاه:

Len(String)

تعيد هذه الدالة طول النص String، بعدد الحروف.

Left(String, Length)

تعيد هذه الدالة عدداً من الحروف يساوي Length من يسار النص String

استخدام هاتين الدالتين في المثال السابق كالتالي:

بعد انتهاء While Loop، نحصل في مربع النص على نص يحوي عدداً من عناوين البريد كل منها مفصول عن الآخر بالرمز &، لكن بسبب منطق الحل، نجد في النهاية أن لدينا رمزاً زائداً & في أقصى اليمين. من أجل التخلص منه، نحتاج إلى استخلاص كامل النص في مربع النص عدا هذا الحرف في أقصى اليمين. يمكن ذلك باستعادة كافة الحروف على اليسار عدا حرف واحد؛ ذلك هو استعادة الحروف من يسار النص بعدد طول النص ناقصاً واحد، ولذلك استخدمنا دالة Left ودالة Len.

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 18 يوليو 2010 في 21:35

#20

لا تقلق و اسف على التأخر

While Not rs.EOF
        If sEmails = "" Then
        sEmails = sEmails & rs(0) & " "
        Else
        sEmails = sEmails & " & " & rs(0) & " "
        End If
        sname = sname & rs(0) & " --> " & rs(1)
        rs.MoveNext
    Wend

أو

While Not rs.EOF
        sEmails = sEmails & rs(0) & " & "
        rs.MoveNext
    Wend
    DoCmd.GoToControl ("To_Text")
    'DoCmd.GoToControl ("List_info")
    To_Text = Left(sEmails, Len(sEmails) - 2)

لقد أجريت تعديلات عليها فقط لأجل الفراغ

أما بالنسبة ل rs(1) هو فقط لعرض أسماء أصحاب الرسائل في مكان اخر و هو شغال 100%

اضطررت لعمل " " لأن اخر حرف دائما يختفي و لأن space له قيمة فاستخدمته

لكن سؤال في الجافا الانتقال إلى السطر الثاني هو n\ لكن في Ms VB ما هو ؟

و بعد الشرح صار

While Not rs.EOF
        sEmails = sEmails & rs(0) & " & "
        sname = sname & rs(0) & " --> " & rs(1)
        rs.MoveNext
    Wend
    DoCmd.GoToControl ("To_Text")
    DoCmd.GoToControl ("List_info")
    To_Text = Left(sEmails, Len(sEmails) - 2)
    List_info = Left(sname, Len(sname))
    rs.Close
    Set rs = Nothing

مشكور و ألف شكر

تم تعديل هذه المشاركة بواسطة miedoo في 19 يوليو 2010 في 10:22

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…