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

مطلوب التعديل في المثال يخص جملة Sql

بدأه serious في 17 أكتوبر 2007 · 14 رد · 1,380 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

وكل عام وانتم بخير

اخواني بحثت كثيرا عن حل لمشكلتي فلم اجد الى الآن

اتمنى اجد الجواب

المطلوب داخل المثال

employees.rar

#2

فيما يلي جملة SQL المطلوبة إن شاء الله:

SELECT TOP 3 employees.name AS NAME
FROM employees INNER JOIN report ON employees.num = report.num
GROUP BY NAME, employees.num, report.num, report.report
HAVING (((report.report)='ممتاز'))
ORDER BY Count(report.year) DESC;

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

sql = "SELECT TOP 3 employees.name AS NAME " & _
	"FROM employees INNER JOIN report " & _
	"ON employees.num = report.num " & _
	"GROUP BY NAME, employees.num, report.num, report.report " & _
	"HAVING (((report.report)='ممتاز')) " & _
	"ORDER BY Count(report.year) DESC;"
#3

بارك الله فيك اخي الكريم

بس المشكله لازالت قائمه

ما ريده هو الموظفين اللي حصلوا على ممتاز في اخر ثلاث تقارير سنويه لهم

وليس اخر ثلاث موظفين

#4

اخي الكريم :

السلام عليكم ورحمة الله وبركاته

جملة الـ SQL اعلاهـ تسترجع الموظفين اللي حصلوا على ممتاز في اخر ثلاث تقارير سنويه لهم

وهذا هو ماتريد .. إلا إذا كان أنا مافهمت ما ذا تريد بالضبط :huh:

#5

اخوي انت كاتب SELECT TOP 3 EMPLOYEES.NAME

واضح انها تعيد اخر ثلاث موظفين

اخي انت جربت الحل ولا تفترضه افتراض

#6

اخوي كلامك صحيح انا كاتب SELECT TOP 3 EMPLOYEES.NAME بس فعلياً الجملة كاملة ترجع جميع الموظفين اللي حاصلين على ممتاز في آخر ثلاث تقارير.

أنا جربت الجملة مرتين مرة من برنامج Microsoft Access و مرة من الـVB6 وعشان اتأكد من صحة الجملة جعلت آخر ثلاث تقارير لجميع الموظفين ممتاز و الجملة رجعتلي جميع الموظفين و ليس ثلاثة فقط.

و على كل حال ستجد هنــــــا مشروعك بعد التعديل كل ماعليك فتحه بالـVB6 و تنفيذه للتأكد من كلامي.

و بعدين لا أنا و لاغيري ممكن يركب زي هالجملة المعقدة و يفترض انها ترجع المطلوب مباشرة ، أكيد ما رديت عليك و لا عطيتك الحل الا وأنا مجربه أكثر من مرة و مثل ماذكرت بالأعلى جربت الجملة من الـAccess و الـVB.

و أسفين على الإزعاج!!!

#7

بارك الله فيك اخي علىالتجاوب والمساعده

بس النتيجه هي نفسها بمعنى ان الاستعلام يعطيني الموظفين اللي حصلوا اخر تقدير ممتاز في 3 تقارير لهم دون اشتراط ان تكون التقارير في السنوات الاخيره

اي ان اي موظف حصل على ثلاث مرات على ممتاز يظهر معي في الاستعلام وليس شرط ان يكون التقرير في الثلاث سنوات الاخيره

وهذا اللي مابيه

#8

اخي الكريم،

فهمت قصدك و المطلوب بالضبط. لكن و ش رايك في حل المشكلة هذي برمجياً؟

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

اليك خطوات الحل برمجياً:

  1. افرض أننا سنقوم بحفظ اسماء جميع الموظفين اللي حصلوا على ممتاز في اخر ثلاث تقارير سنويه لهم في المصفوفة arr.
  2. استرجع أسماء الموظفين من جدول الـemployees.
  3. لكل موظف نقوم باستخراج آخر 3 تقارير.
  4. نقوم بفحص هذه التقارير، اذا كانت كلها 'ممتاز' نحفظ اسم الموظف في المصفوفة arr.
  5. في النهاية تكون المصفوفة arr فيها المطلوب.

لقد قمت بتنفيذ الخطوات أعلاه و ستجد هنـــــــــا برنامجك بعد تنفيذه بالطريقة السابقة.

ملحوظة:

لو قدرت تحصل على جملة SQL التي تؤدي الغرض فهذا أفضل بكثير لأن أداء البرنامج سيكون أسرع بكثير، خاصة إذا كان عدد السجلات كبير (عدد الموظفين كبير و لكل موظف هناك عدد كبير و متزايد من التقارير). على عكس الطريقة البرمجيه أعلاه فإذا كان عدد السجلات كبير فإن تنفيذ الاستعلام المطلوب (برمجيا) سيستغرق وقت طويل.

#9

ممكن تعمل التقرير دة علي اكثر من جدول يعني تعمل اكثر من جدول استعلام وبعدن تنفذ جملت ال sql عليهم

#10

اخي الدوسري انت رائعوالحل الذي وضعته لازال لا يعطي النتيجه المطلوبهبس محاوله تنم عن تمكن بصراحه ماشاء الله عليكاخي انا عندي جمله sql تخرج الموظفين اللي حصلوا على اكثر من 250 في مجموع اخر ثلاث درجات لهموقام بوضعها الاخ اسامه ساضعها هنا لك وممكن تستفيد منها للتوصل للحلاما انا عجزتاخي الدوسري انت رائعوالحل الذي وضعته لازال لا يعطي النتيجه المطلوبهبس محاوله تنم عن تمكن بصراحه ماشاء الله عليكاخي انا عندي جمله sql تخرج الموظفين اللي حصلوا على اكثر من 250 في مجموع اخر ثلاث درجات لهموقام بوضعها الاخ اسامه ساضعها هنا لك وممكن تستفيد منها للتوصل للحلاما انا عجزتوهنا المثال مرفق

Info_up1.rar

#11
serious كتب:
اخي الدوسري انت رائعوالحل الذي وضعته لازال لا يعطي النتيجه المطلوبهبس محاوله تنم عن تمكن بصراحه ماشاء الله عليكاخي انا عندي جمله sql تخرج الموظفين اللي حصلوا على اكثر من 250 في مجموع اخر ثلاث درجات لهموقام بوضعها الاخ اسامه ساضعها هنا لك وممكن تستفيد منها للتوصل للحلاما انا عجزتاخي الدوسري انت رائعوالحل الذي وضعته لازال لا يعطي النتيجه المطلوبهبس محاوله تنم عن تمكن بصراحه ماشاء الله عليكاخي انا عندي جمله sql تخرج الموظفين اللي حصلوا على اكثر من 250 في مجموع اخر ثلاث درجات لهموقام بوضعها الاخ اسامه ساضعها هنا لك وممكن تستفيد منها للتوصل للحلاما انا عجزتوهنا المثال مرفق

أخوي معليش عندي سؤال انت تقول انك تبغى الموظفين اللي حصلوا على ممتاز في اخر ثلاث تقارير سنويه لهم، فهل تقصد أخر ثلاث تقارير سنوية متتالية أم لا؟

فعلى سبيل المثال لو كان الموظف علي لديه التقاريرالتالية:

2002 ممتاز

2003 ممتاز

2007 ممتاز

لاحظ أنه لاتوجد تقارير للسنوات 2004 و 2005 و 2006، فهل الموظف علي يعتبر من الموظفين اللي حصلوا على ممتاز في اخر ثلاث تقارير سنويه لهم؟

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

و شــكــراً،،،

#12

نعم بالضبط

اريد ان احصل على الموظفين اللي حصلوا على ممتاز في اخر ثلاث تقارير مسجله لهم

لانه ممكن تمر سنه مايسجل تقرير لظروف ما

والحل اللي وضعته يعطيني الموظفين اللي حصلوا على ممتاز في ثلاث تقارير لهم ولا يشترط ان تكون التقارير الاخيره لهم

لانه من الممكن ان الموظف حصل على جيد في اخر سنه

ويكون قد حصل قبلها على 3 تقارير ممتاز

فيظهر هذا الموظف في الاستعلام وهذا اللي مابيه

وايضا يشترط ان تكون التقارير في ال 3 سنوات الاخيره طبعا المسجله لهم

اتمنى ان الفكره وصلت

#13

ماحد عنده حل لي

#14

هل من جواب

#15

ياخوان احتاج احمل الامثله

هل حذفت من الموقع

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