اذهب الي المحتوي
أوفيسنا

Amr Ashraf

الخبراء
  • Posts

    946
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    10

كل منشورات العضو Amr Ashraf

  1. انا بالفعل اديتك الحل اللى ينفع فى منشئ التعابير فى الاستعلام , لكن كل من IF,Select Case دوال خاصة بVBA لا يمكن استخدامها فى الاستعلامات .
  2. او ضع هذا التعبير فى عمود فى استعلامك , مثال للجملة الصحيحة : Result: IIf([Field1]=50,"One",IIf([Field1]=100,"Two",IIf([Field1]=150,"Three",IIf([Field1]=200,"Four",IIf([Field1]=300,"Five"))))) النتيجة :
  3. سؤال أخى الكريم اذا لم يكن هناك 6 سجلات فى الاستعلام الخاص بيك أكيد النموذج هيكون فيه فراغات !! لو حذفنا كل طاهر من الجدول هيكون نتيجة استعلامك اللى انت عملته بالشكل ده يعنى 3 سجلات فقط بالتالى النموذج هيكون كالتالى : وهى نتيجة صحيحة 100% لأن استعلامك الاساسى فيه 3 سجلات فقط , وضح مقصدك ان لم يكن هكذا .
  4. وعليكم السلام ورحمة الله وبركاته , ارفق القاعدة للتعديل عليها .
  5. تمام فلنعتمد طريقتك اولا نحتاج الى محدد رقمى لترتيب السجلات فى الاستعلام وذلك لاستخدامه فى استدعاء البيانات من الاستعلام الخاص بيك الى النموذج بالترتيب المطلوب ولذلك قمت بعمل موديول جديد Function rownum(dummy) As Integer Static firstdummy, row& If firstdummy = "" Then firstdummy = dummy If dummy = firstdummy Then row = 0 row = row + 1 rownum = row End Function وظيفتها هو ترقيم الصفوف دون الاعتماد على اى معطيات اخرى فقط رقم الصف . وقمت باستخدامها فى استعلام جديد اسميته Qry2 SELECT TOP 6 Query1.المغذي, rownum([المغذي]) AS [Row Number] FROM Query1; الاستعلام الجديد يأخذ اول 6 صفوف فى استعلامك ويضيف ارقام متسلسلة من 1 الى 6 طبقاً لترتيب استعلامك الاصلى Query1 البيانات فى استعلامك : البيانات فى الاستعلام الجديد : طبعا لن تزيد عن 6 سجلات فقط كما اتفقنا , الآن الى استدعاء البيانات من الاستعلام الجديد الى النموذج : =DLookUp("[المغذي]","Qry2","[Row Number]=1") استخدمت دالة Dlookup ولكل حقل فى النموذج اخذت رقم من 1 الى 6 النتيجة كما تريد : مرفق القاعدة . اتمنى انه المطلوب بالتوفيق , اسألك الدعاء بصلاح الحال وتيسير الامور . ATM222-Amr.accdb
  6. السلام عليكم .. استفسار , ماذا ستستفيد من هذه الطريقة ؟ وهل يمكنك شرح الفكرة التى تريد تطبيقها ؟ يمكن عندنا فكرة افضل واسهل لتطبيقها .. اذا كنت مصر على طريقتك اترك رد بذلك واجب عن التالى : -هل تريد ان اول سجل فى الاستعلام يكون اول سجل فى النموذج من اليسار والثانى فى الاستعلام يكون هو الثانى من اليسار وهكذا ؟ -انت عامل 6 حقول نصية ماذا ان زادت نتيجة الاستعلام عن 6 سجلات ؟ -على ماذا يعتمد الترتيب فى الاستعلام هل هو أبجدى ؟ ام لا فارق لديك ؟
  7. جزاك الله خير يا غالى.. وشكرا على مشاركتك
  8. تمام هيا دى استاذنا الفاضل , ممكن مثال على كتابتها مع اضافة المتغير الأخير ؟ لأن المصدر لم يذكر مثال عليها مع خاصية الترتيب .. جزاك الله خير
  9. كما تعودنا منك ابو جودى شرح منظم وبسيط ورائع. بالنسبة لنقطة ارجاع اول قيمة فيه واحد اجنبى حل الموضوع ده عن طريق عمل function آلية عملها واستدعاءها تشبه Dlookup ولكن فيها معيار زيادة يسمح لك بترتيب البيانات التى ستقوم الدالة بارجاعها. سأبحث عنها فى مكتبتى وارسلها لك لاضافتها فى الموضوع
  10. لا افهمك اخى الكريم الكود مظبوط فيه if و else ثم الاغلاق end if
  11. عليكم السلام ورحمة الله وبركاته ارفق قاعدة البيانات اولاً , ثانيا وضح اكثر المطلوب بأمثلة من قاعدتك حتى نستطيع مساعدتك
  12. استخدامك لدالة If فيه مشكلة لأن هناك صورتين من دالة If الصورة الاولى : If condition Then statements1(التعليمات المنفذة في حال تحقق الشرط ) Else statements2(التعليمات المنفذة في حال عدم تحقق الشرط) End If مثال If grade >= 50 Then Text1 ="ناجح" Else Text1 ="راسب" End If الصورة الثانية If condition1 Then statements1( التعليمات المنفذة في حال تحقق الشرط الأول) ELSEIF condition2 THEN statements2(التعليمات المنفذة في حال عدم تحقق الشرط الأول و تحقق الشرط الثاني) ELSE statements2(التعليمات المنفذة في حال عدم تحقق جميع الشروط السابقة) End If مثال If grade >= 90 Then Text1 ="ممتاز" ElseIf grade >= 80 Then Text1 ="جيد جدا" ElseIf grade >= 70 Then Text1 ="جيد" ElseIf grade >= 60 Then Text1 ="مقبول" Else Text1 ="راسب" End If انتا قمت بدمج الطريقتين فى واحدة واستخدمت Else اكثر من مرة فى حين انك تستخدم ElseIf بالفعل المرجع والامثلة من هذا الموضوع ابحث فى نفس الموضوع عن Select Case واستخدمها قى حالتك ستكون اسهل من If فى اعتقادى . بالتوفيق
  13. مثال أخر بالمشاركة مع الأخ @ابو جودي وبعد كونسولتو لمعرفة علة المريض 😂 , مثال لاستعلام فرعى لحقل ترقيم تلقائى يعيد ضبط نفسه حتى مع حذف سجلات من وسط السيريال : لدينا هذه البيانات فى الجدول : ID FullName 8 a 13 B 14 c 15 d 16 E 17 D 19 EEE سيريالات غير منضبطة , انظر للاستعلام التالى : SELECT A.FullName, A.ID, (SELECT Count("*") FROM tblData AS B WHERE B.[ID]<A.[ID])+1 AS NewID FROM tblData AS A; تم استخدام دالة Count والنتيجة حاول تحذف اى سجل من المنتصف , ستجد ان الترقيم تم اعادة ضبطه ليتناسب مع السجلات الجديدة . انظر المرفق . دمتم بود . Sequence.accdb
  14. مثال آخر شبيه بالسابق : فى هذا المثال افترضت ان المنتج يتم تحميله على مراحل فى نفس الطلبية ومطلوب انى اعرف اول تاريخ تسليم للمنتج داخل طلبية ما أو العكس اخر تاريخ تم تسليم المنتج للعميل فيه , انظر الاستعلام التالى QryOrdersFollowUp(Dates) : SELECT QryOrders.OrderID, QryOrders.Client, QryOrders.Product, QryOrders.OrderQty, Nz((select Sum(QtySold) From TblSales AS T Where T.Product = QryOrders.[Product] And T.Client = QryOrders.[Client] And (T.zDate >= QryOrders.[StartFrom] And T.zDate <= QryOrders.[EndsOn])),0) AS QtyDelivered, [OrderQty]-[QtyDelivered] AS Remains, Nz((select Min(Zdate) From TblSales AS T Where T.Product = QryOrders.[Product] And T.Client = QryOrders.[Client] And (T.zDate >= QryOrders.[StartFrom] And T.zDate <= QryOrders.[EndsOn])),"None") AS FirstDelivery, Nz((select Max(Zdate) From TblSales AS T Where T.Product = QryOrders.[Product] And T.Client = QryOrders.[Client] And (T.zDate >= QryOrders.[StartFrom] And T.zDate <= QryOrders.[EndsOn])),"None") AS LastDelivery FROM QryOrders; والنتيجة كالتالى : لاحظ انه لا يوجد مشكلة فى حالة عدم وجود تسليمات للمنتج فى طلبية ما لعميل ما سيتم كتابة None مكان التاريخ . وهناك الكثير من الامثلة ولكن هذا ما طبقته بالفعل وتأكدت من نتائجه .. اتمنى المشاركة من الاساتذة الكبار وخاصة استاذنا @jjafferr له صولات وجولات فى هذا المضمار 😅 انتهى الشرح دمتم بخير .
  15. المثال السابق فى حقل وليس فى معيار 😅 انظر لصورته , انا نسيت اذكر النقطة الهامة دى شكرا على التوضيح يا غالى
  16. مثال آخر ولكن اكثر تقدما (عن نفسى احتجته فى عملية حسابية ولم اكن اعرف شئ عن الاستعلامات الفرعية واجابة السؤال هى ما دفعنى للبحث والتطبيق عليها) : هذه قائمة العملاء فى شركة ما : ID Client 1 Mohamed 2 Amr 3 Ahmed يقوم كل عميل منهم بعمل 4 طلبيات فى الشهر بمعدل طلبية كل اسبوع مثلا , كل طلبية لها تاريخ بداية توريد وتاريخ نهاية توريد وهو التاريخ الذى سيقوم العميل باستلام البضائع فيه , انظر لهذه البيانات تتضمن طلبيتين لعميلين فى تواريخ مختلفة : الطلبيات وتواريخها : OrderID Client StartFrom EndsOn 2022-Ahmed1 Ahmed 03/01/2022 07/01/2022 2022-Ahmed2 Ahmed 03/02/2022 05/02/2022 2022-Amr1 Amr 01/01/2022 05/01/2022 2022-Amr2 Amr 20/01/2022 25/01/2022 تفاصيل المنتجات المطلوبة : OrderID Product OrderQty 2022-Amr1 Banana 120 2022-Amr1 Choclate 100 2022-Amr1 Juice 130 2022-Amr1 Mango 100 2022-Amr1 Milk 150 2022-Amr1 Water 150 2022-Amr2 Banana 250 2022-Amr2 Choclate 240 2022-Amr2 Juice 210 2022-Amr2 Mango 220 2022-Amr2 Milk 250 2022-Amr2 Water 300 2022-Ahmed1 Banana 250 2022-Ahmed1 Choclate 70 2022-Ahmed1 Juice 250 2022-Ahmed1 Mango 20 2022-Ahmed1 Milk 250 2022-Ahmed1 Water 250 2022-Ahmed2 Banana 300 2022-Ahmed2 Choclate 70 2022-Ahmed2 Juice 300 2022-Ahmed2 Mango 50 2022-Ahmed2 Milk 300 2022-Ahmed2 Water 300 وهذا جدول المبيعات : Zdate Product UnitPrice QtySold TotalAmount Client 01/01/2022 Choclate $5.00 70 350 Amr 02/01/2022 Juice $3.00 100 300 Amr 02/01/2022 Mango $7.00 30 210 Amr 04/01/2022 Milk $4.00 100 400 Amr 04/01/2022 Water $2.50 100 250 Amr 03/01/2022 Banana $1.00 30 30 Ahmed 03/01/2022 Choclate $5.00 60 300 Ahmed 05/01/2022 Mango $7.00 10 70 Ahmed 07/01/2022 Milk $4.00 75 300 Ahmed 07/01/2022 Water $2.50 75 187.5 Ahmed 20/01/2022 Banana $1.00 70 70 Amr 20/01/2022 Choclate $5.00 90 450 Amr 22/01/2022 Juice $3.00 150 450 Amr 22/01/2022 Mango $7.00 50 350 Amr 25/01/2022 Milk $4.00 150 600 Amr 25/01/2022 Water $2.50 150 375 Amr 03/02/2022 Banana $1.00 35 35 Ahmed 03/02/2022 Choclate $5.00 67 335 Ahmed 04/02/2022 Juice $3.00 80 240 Ahmed 04/02/2022 Mango $7.00 20 140 Ahmed 05/02/2022 Milk $4.00 80 320 Ahmed 05/02/2022 Water $2.50 80 200 Ahmed هناك قاعدة بيانات مرفقة لنظرة افضل Amr - SubQueries.accdb. المطلوب : متابعة كل طلبية لكل عميل لكل منتج على حدى ماذا تم تسليمه والمتبقى منها فى التواريخ التى تقع بين تاريخ بداية التوريد وتاريخ نهايته . طبعا كان من السهل الحصول على المبيعات بين تاريخين محددين او يتم كتابتهم يدويا او يتم الاشارة اليهم فى نموذج ما ومن الاسهل اذا كان رقم الطلبية مذكور فى جدول المبيعات وبناء عليه يتم ربط الاستعلامات ببعضها والحصول على النتيجة المرجوة , ولكن الصعوبة ماذا لو كان التاريخين مكتوبين فى عمود داخل نفس الاستعلام مثلا ؟ وطبعا الشروط كثيرة ورقم الطلبية غير مذكور فى المبيعات ويتم استنتاجها من تاريخ البيع انظر الاستعلام التالى QryFollowUp : SELECT QryOrders.OrderID, QryOrders.Client, QryOrders.Product, QryOrders.OrderQty, Nz((select Sum(QtySold) From TblSales AS T Where T.Product = QryOrders.[Product] And T.Client = QryOrders.[Client] And (T.zDate >= QryOrders.[StartFrom] And T.zDate <= QryOrders.[EndsOn])),0) AS QtyDelivered, [OrderQty]-[QtyDelivered] AS Remains FROM QryOrders; فى هذا المثال ستجد ان الاستعلام الفرعى ليس معيار ولكن حقل او عمود فى الاستعلام كما فى الصورة التالية هذا الاستعلام يقوم بحساب ما تم بيعه من منتج ما بشرط تساوى اسم العميل و اسم المنتج ووقوع تاريخ البيع بين تاريخى بدء التوريد ونهايته والمذكور فى جدول الطلبيات , طبعا شروط كثيرة وقلة معطيات ولكن النتيجة سريعة ودقيقة بل وافضل حيث انه فى حالة عدم وجود مبيعات ينطبق عليها الشروط سيظل يذكر رقم الطلبية والمنتج ولكن كمية المبيعات ستكون صفر وهو ما كان صعب تطبيقه بالطريقة العادية. انظر النتيجة لو تم تغيير تاريخ بداية ونهاية التوريد فى جدول الطلبيات ستتغير النتائج فى هذا الاستعلام تلقائياً طبعا 😆. ملاحظات على المثال : تم استخدام Alias للاستعلام الفرعى يرمز له بالحرف T وذلك لتسهيل الاشارة اليه فيما بعد. يلاحظ انه تم استخدام دالة الجمع Sum وبالتالى يمكن استخدام باقى الدوال مثل (Min-Max-Average-First-Last ) الى آخره . يتبع بمثال آخر .
  17. السلام عليكم ,, الاخوة الافاضل , موضوعنا اليوم فى نطاق الاستعلامات وكما بالعنوان سوف نتطرق الى الاستعلامات الفرعية وطريقة استخدامها وامثلة عملية عليها واستخدامها كمعايير فى الاستعلامات الرئيسية. وسأقوم باستخدام النصوص فى الجزء الاغلب من الشرح تطبيقا لطلب استاذنا ابو خليل . بالنسبة للمبتدئين امثالى توضيح بسيط : ماهى المعايير ؟ المعايير هى شرط او اكثر بناءً عليه يتم استدعاء البيانات من الجداول وفى الرابط التالى الكثير من المعلومات والامثلة لكافة انواع الحقول (نص - رقمى - وقت وتاريخ الخ...) https://support.microsoft.com/en-us/office/examples-of-query-criteria-3197228c-8684-4552-ac03-aba746fb29d8 نعود لموضوعنا الاستعلامات الفرعية SubQueries , ماهى ؟ كما يوجد نموذج فرعى وتقرير فرعى هناك استعلام فرعى يتم استخدامه داخل الاستعلامات الاساسية بهدف الحصول على نتيجة يصعب الحصول عليها بالطرق العادية , ولها الكثير من الانواع سأتطرق لما استخدمته فعلياً حتى الآن ونأمل ان احد الاساتذة يثرى الموضوع بمشاركات اخرى لتطبيقات عملية أخرى . جملة الSQL : بالنسبة لطريقة كتابتها لا تختلف كثيرا عن كتابة الاستعلام العادى ويمكن كتابتها بسهولة عن طريق انشاء استعلام بالطريقة العادية ونسخ جملة الSQL الخاصة به مع تطبيق بعض الملاحظات التى سيتم ذكرها فى الامثلة التالية . نبدأ بالمثال الأول : على افتراض ان عندى مجموعة البيانات التالية مجموعة من المنتجات واسعارها : Product UnitPrice Banana $1.00 Choclate$5.00 Juice $3.00 Mango $7.00 Milk $4.00 Water $3.75 وأريد ان اعرف ماهى المنتجات التى تتساوى فى السعر او سعرها اقل من سعر منتج Milk , فى الطريقة العادية سيتم وضع معيار تحت حقل السعر ويكتب فيه <=4 وهو سعر المنتج , ماذا لو لم تعرف سعر المنتج الحالى او السعر يتغير باستمرار ويصعب تتبع التغييرات بالتالى يمكن عمل استعلام يقوم بالحصول على سعر المنتج المطلوب وبالتالى فى حالة تغير السعر نتيجة الاستعلام تتغير معه دون تدخل منك , انظر الى الاستعلام التالى: SELECT TblProducts.Product, TblProducts.UnitPrice FROM TblProducts; هذا استعلام اساسى يقوم باستدعاء المنتجات واسعارها بدون معايير , الق نظرة على الاستعلام التالى : SELECT TblProducts.Product, TblProducts.UnitPrice FROM TblProducts WHERE (((TblProducts.UnitPrice)<=(SELECT TblProducts.[UnitPrice] FROM TblProducts Where TblProducts.[Product]="Milk"))); وهذه صورته فى وضع التصميم لو تلاحظ تم اضافة معيار تحت السعر عبارة عن استعلام آخر مهمته هوا الحصول على سعر المنتج Milk كما لو انك كتبت بدلا منه <=4 , وبالتالى نتيجته ستكون عرض كافة المنتجات التى سعرها يقل عن او يساوى سعر المنتج Milk انظر الى النتيجة : Product UnitPrice Water $3.75 Juice $3.00 Milk $4.00 Banana $1.00 نلاحظ عرض المنتجات التى يكون سعرها اقل من او يساوى 4 (وهى نتيجة الاستعلام الفرعى) . ملاحظات على الاستعلام : الاستعلام الفرعى يجب ان يكون بين قوسين (). من المعلوم ان اى جملة SQL تنتهى بفاصلة منقوطة ; وهى الطريقة التى تخبر بها قاعدة البيانات بأن الجملة قد انتهت, ولكن لو لاحظت الاستعلام الفرعى لا يحتوى على فاصلة منقوطة بين الاقواس ولكن تكتفى بغلق الجملة الاساسية فقط وليس الفرعية. الاستعلام الفرعى يحضر نتيجة واحدة فقط (على الاقل الاستعلامات التى استخدمتها فعلياً). فى حالة وجود مسافة فى اسم الحقل مثلا Unit Price يجب تضمينه داخل اقواس Brackets []. يتبع فى رد يحتوى على مثال آخر . مرفق قاعدة بها جميع الامثلة المشروحة فى الموضوع ,, نسألكم الدعاء بصلاح الحال . Amr - SubQueries.accdb
  18. ماشاء الله كما تعودنا منك استاذنا , المعلومة مقدمة ببساطة ويسهل على القارئ المبتدئ فهمها 👌
  19. المرفق شغال عادى 😅 اوفيس 2016 32 بيت .. الرسالة دى مش بتظهر
  20. اعذرنى لضيق الوقت انا حبيت اوضحلك الطريقة فقط ولكن تطبيقها يحتاج وقت .. عسى ان احد الاساتذة عنده طريقة افضل . فى حالة توافر الوقت سأحاول عمل مثال لك . بالتوفيق
  21. السلام عليكم ,, اذا سمحلى استاذنا @jjafferr بالمناقشة فى الموضوع , البداية اخى الكريم هى انك تحصل على IP ثم تبحث عن موقعه لمعرفة المدينة والدولة والوقت الخ .. وبالتالى نظرياً يلزمك انك تحصل على IP ثم يكون عندك نموذج به متصفح , الق نظرة على هذه الاداة الرائعة لأستاذنا صالح حمادى : ثم استخدم ما تعلمت منها وادخل على الموقع التالى بواسطة الاداة ثم قم بتمرير IP الذى حصلت عليه فى مربع البحث الخاص بالموقع التالى مثلا : https://www.geolocation.com والنتيجة ستكون كالتالى : بالتوفيق
  22. فى هذه الحالة اخى الكريم يجب عليك تقسيم القاعدة بفصل الجداول عن الواجهة التى تحتوى على النماذج والتقارير .. وبالتالى -كما تعلم- انت تقوم بالتعديل على النماذج والتقارير فقط دون المساس بالجداول وعند التعديل على الواجهة يجب عليك اعادة توزيع الواجهة على الادارات المستخدمة لها فقط وتبقى الجداول على الشبكة وبالتالى البيانات المدخلة فى الجداول لن تحتاج ادخالها اكثر من مرة . فى حالة عدم وضوح الشرح اخبرنى وسأحاول عمل مثال لك . بالتوفيق
  23. وعليكم السلام ورحمة الله وبركاته .. اخى الكريم ما هى الفكرة الرئيسية من تطبيق هذه الطريقة ؟ يمكن نساعدك بفكرة افضل .. عن تجربة موضوع نقل ونسخ السجلات يمكن ان يؤدى الى الكثير من الاخطاء وأحبذ عدم استخدامه الا عند عدم وجود طريقة اخرى . نرجع لموضوعك .. مقترحات اخرى قد تفيدك :- -هل جربت تقسيم قاعدتك بحيث تفصل الجداول عن الواجهة وبالتالى جداولك دائماً محدثة لا تحتاج الى نقل البيانات و خلافه ؟ -ما رأيك بعمل نسخة احتياطية من الجداول فقط فى القاعدة الرئيسية بشروط محددة تحددها انت ؟ عامة للمناقشة بقية عند ردك على سؤالى .. بالتوفيق
  24. لا شكر على واجب اخى الكريم
×
×
  • اضف...

Important Information