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

تحديث سجلات عند إرسال التقرير

مغلق
بدأه snmdody في 7 يونيو 2004 · 14 رد · 1,262 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

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

مرفق كود الإرسال للإطلاع عليه .. وشكراً جزيلاً مقدماً

Select Case Me!reportMenu

Case Is = 1

If IsNull([agents]) Or ([agents]) = "" Then ' التحقق من صحة إدخالات المستخدم

MsgBox "لم تقم بإختيار وكيل ، الرجاء الإختيار والمحاولة مجدداً", vbOKOnly + vbInformation, "تحقق"

agents.SetFocus

Exit Sub

End If

Report = "تقرير1"

Subject = "Your sended groups"

Message = "Your sended groups"

''''''''''''''''''''''''''''

Case Is = 2

If IsNull([agents]) Or ([agents]) = "" Then ' التحقق من صحة إدخالات المستخدم

MsgBox "لم تقم بإختيار وكيل ، الرجاء الإختيار والمحاولة مجدداً", vbOKOnly + vbInformation, "تحقق"

agents.SetFocus

Exit Sub

End If

Report = "تقرير2"

Subject = "Your groups expected to arraive"

Message = "Your groups expected to arraive within three days"

end select

DoCmd.SendObject acReport, Report, "SnapshotFormat(*.snp)", Me.Email1, "", "", Subject, Message, False, ""

end sub

On Error Resume Next

#2
On Error Resume Next
Select Case Me!reportMenu
Case Is = 1
    If IsNull([agents]) Or ([agents]) = "" Then ' التحقق من صحة إدخالات المستخدم
    MsgBox "لم تقم بإختيار وكيل  ، الرجاء الإختيار والمحاولة مجدداً", vbOKOnly + vbInformation, "تحقق"
    agents.SetFocus
    Exit Sub
    End If
    Report = "تقرير1"
    Subject = "Your sended groups"
    Message = "Your sended groups"

''''''''''''''''''''''''''''


Case Is = 2
    If IsNull([agents]) Or ([agents]) = "" Then ' التحقق من صحة إدخالات المستخدم
    MsgBox "لم تقم بإختيار وكيل  ، الرجاء الإختيار والمحاولة مجدداً", vbOKOnly + vbInformation, "تحقق"
    agents.SetFocus
    Exit Sub
    End If
    Report = "تقرير2"
    Subject = "Your groups expected to arraive"
    Message = "Your groups expected to arraive within three days"

end select
DoCmd.SendObject acReport, Report, "SnapshotFormat(*.snp)", Me.Email1, "", "", Subject, Message, False, ""
end sub
#3

Up

#4

up

#5
اقتباس
اريد أن يقوم البرنامج بتحديث بعض البيانات إعتماداً على التقرير المرسل وقد حاولت وضع إستعلام تحديث عند حدث تنشيط التقرير وذلك لتحديث بيانات معينة ولم تنجح مع الطريقة

وأنا لا أرى في الكود الذي كتبته أي سطر تحدث للتقرير ..

الرجاء الايضاح أكثر .. و اعرض ما الذي حاولت كتابته ولم ينجح

#6

وهذا اختصار لكودك :

On Error Resume Next
   If nz([agents],"") = "" Then ' التحقق من صحة إدخالات المستخدم
   MsgBox "لم تقم بإختيار وكيل  ، الرجاء الإختيار والمحاولة مجدداً", vbOKOnly + vbInformation, "تحقق"
   agents.SetFocus
   Exit Sub
   Report = "تقرير" & trim(str(Me!reportMenu))
   If Me!reportMenu = 1 then
      Subject = "Your sended groups"
      Message = "Your sended groups"
   Else
      Subject = "Your groups expected to arraive"
      Message = "Your groups expected to arraive within three days"
   end If
   DoCmd.SendObject acReport, Report, "SnapshotFormat(*.snp)", Me.Email1, "", "", Subject, Message, False, ""
end sub

تم تعديل هذه المشاركة بواسطة مهند عبادي في 12 يونيو 2004 في 14:06

#7

شكراً لك اخي مهند ، نعم لا يوجد في الكود الذي عملته أي كود تحديث ، ولكني أتسأل عن كيفية عمل ذلك ..

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

وجزاك الله كل خير ،،

#8

يبقى المطلوب غامضا , ما الذي تريد تحديثه بعد اِرسال التقرير؟ هل هو حقل أم ماذا؟ هل تريد تحديث يدل على أن التقرير تم اِرساله؟ لو وضحت أكثر أخي الكريم و اِن أمكن ضع مثالا حتى تتضح الأمور أكثر.

#9

شكرا جزيلاً اخي الكريم ...

يوجد لدي عدة تقارير اقوم بإرسالها عبر البريد الالكتروني ، فتصور مثلاً أني قد ارسلت اليوم تقرير معين يحتوي على سجلات معينة واريد يوم الغد ان اقوم بإرسال نفس التقرير فالنتيجة هي أن التقرير سوف يحتوي على ما قد تم إرساله يوم امس واليوم ، اليس كذلك .

والمطلوب هو تقييد التقرير لإرسال السجلات التي لم ترسل بعد ، ولذلك اريد عمل أمر تحديث للسجلات التي يحويها التقرير المرسل بعد إرساله مباشرة ، أتمنى أن الفكرة وضحت نسبياً ..

وفي وقت سابق كنت اقوم بعمل ماكرو لإرسال التقرير وتشغيل إستعلام تحديث في نفس الوقت ولكني الان اريدها عبر الكود منعاً لإنشاء عدد كبير من الماكرو إعتماداً على المرسل لهم هذه التقارير ، فتصور مثلاً ان لدي 50 عميل فيتوجب علي في مثل هذه الحالة عمل 50 ماكرو لإرسال التقرير ، اليس كذلك .. ارجو المساعدة قدر الإمكان .. وارجو أن اكون قد اوضحت الصورة أكثر ..

مع خالص شكري وتقديري مقدماً ،،

#10

أخي snmdody أظن أنك تقصد أنك تريد أن ترسل التقارير الجديدة فقط أو التقارير التي لم ترسل في السابق,هذا كود يقوم بطباعة التقارير الجديدة التي لم تطبع في السابق قم بتغييره حسب حاجتك لكي يقوم باْرسال التقارير الجديدة فقط أو التي لم ترسل في السابق.

الفكرة تعتمد على أنه لدينا جدول يسمى tbl1 في هذا الجدول يوجد حقل باسم SentYesNo من نوع نعم/لا عند الظغط على زر الطباعة فاْنه يتحقق من أن حقل SentYesNo غير معلم بعلامة صح فيقوم بطبع التقرير و بعد الطباعة فاٍن الكود يقوم بتحديث الحقل و يضع به علامة صح مما ينتج عنه عدم طباعة نفس السجل مرة أخرى, بنفس الطريقة يمكنك الوصول الى نفس النتيجة.

If DCount("*", "tbl1", "SentYesNo=False ") > 0 Then
DoCmd.OpenReport "affichage", acViewPreview, , "SentYesNo=False "
DoCmd.SetWarnings False
DoCmd.SelectObject acReport, "affichage"
DoCmd.RunSQL "Update tbl1 set SentYesNo = true where SentYesNo = false "
DoCmd.SetWarnings True

ملاحظة affichage هو اْسم التقرير.

اْن وجدت مشكلة ضع نسخة من ملفك و سوف يتم التعديل عليه اٍن شاء الله.

#11
If DCount("*", "tbl1", "SentYesNo=False ") > 0 Then
DoCmd.OpenReport "affichage", acViewPreview, , "SentYesNo=False "
DoCmd.SetWarnings False
DoCmd.SelectObject acReport, "affichage"
DoCmd.RunSQL "Update tbl1 set SentYesNo = true where SentYesNo = false "
DoCmd.SetWarnings True

الكود مرة أخرى مع المعذرة عن الخلط في الكود الأول لأنني حاولت استعمال خاصية تلوين النص للتوضيح و لكن لم تنجح العملية

#12

شكرا جزيلاً اخي biskra على مجهوداتك معي ، ومرفق لكم مثال يوضح المطلوب حتى تتضح الرؤية أكثر ..

بارك الله فيك اخي الكريم وجعله في ميزان حسناتكم

EsendSample.rar

#13

اخي snmdody جزءا من الحل يتمثل في تحديث حقل sendyesno و قد قمت بتغيير جزئي لاسم الجدول, لأن التسميات التي قمت باستعمالها تتعارض كلية مع قواعد تصميم قواعد البيانات فابالاِضافة الى استعمالك لأحرف عربية فانك تركت مسافات بين الكلمات دون ربطها و هو ما ينتج عنه حتما خلل في تنفيذ الأكواد , لذا أنصحك بتدارك هذه المسألة.

EsendSample.rar

#14

شكرا جزيلا أخي الكريم ولكن الكود لا يعمل إطلاقاً حين التنفيذ ، وعلى فكرة ياريت لو يتم الإعتماد على استعلام التحديث الموجود والمسمى (Update) لان فيه كذا شرط غير الحقل SendYesNo

آمل أن لا اكون قد أثقلت عليك وجزاك الله عنا خير الجزاء

#15

لقد تمكنت من ادراج كود التحديث بعد كود الإرسال مباشرة ، ولكن توجد بعض الملاحظات ، فهل بإستطاعتكم مشكورين افادتي بها ؟

1 - عند عدم إرسال التقرير سواءاً بتدخل المستخدم مثل الغاء الارسال بعد ظهور مربع حوار الإرسال يتم تنفيذ التحديث .. !!

فهل من الممكن مساعدتي في عمل كود يتحقق من عملية الإرسال من عدمه ليتم تنفيذ أو عدم تنفيذ كود التحديث حسب الحالة .

مشكورين وجزاكم الله الف خير ،،

مرفق ملف

EsendSample.rar

هذا الموضوع مغلق.

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