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

الردود الموصى بها

قام بنشر

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

في الملف المرفق استعلام (QF_Subject)  فيه حقول بياناتها أرقام، أريد استبدالها بالأسماء التي ترمز إليها

* أولا: المطلوب أن تظهر الأسماء في الحقول (   (LVL1name – LVL2name - LVL3name – LVL4name

ومصدرها واحد وهو حقل (SName) ولكن باعتبار أرقام  الحقول: (LVL1 - LVL2   - LVL3   - LVL4 )  

فليظهر الاسم المطلوب لـ (LVL1) يجب اعتبار باقي المستويات = 0

وليظهر اسم (LVL2) يجب اعتبار (LVL3) (LVL4) = 0

وفي الجدول (Q_Subject) النتائج المراد الوصول إليها

 

* ثانيا: أن تظهر الأسماء في (TYPE2name - TYPE1name) ومصدر هذه الأسماء من جدول آخر وهو (DATA_list)

وبعد عدة محاولات تمكنت من الوصول للمطلوب لكن بتكرار الجدول في الاستعلام ، فهل هذه هي الطريقة الصحيحة ؟

QF_Subject.accdb

قام بنشر
52 دقائق مضت, nssj said:

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

 

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

حاولت فهم الموضوع من معطياتك أخي الكريم ولكني لم أوفق .. ان أمكن توضيح أكثر فنكون من الشاكرين :wub: 

  • Thanks 1
قام بنشر

في الصورة المرفقة، الجدول الأول للاستعلام، ويظهر كيف أن أسماء المستويات الأربعة (LVL1 - LVL2   - LVL3   - LVL4 )   هي واحدة وأخذها الاستعلام تلقائيا من حقل (SName)

والمطلوب أن يحضر اسم كل مستوى في حقول خاصة أعدت لهذا الغرض  (   (LVL1name – LVL2name - LVL3name – LVL4name

والنتيجة المطلوبة في الجدول الذي تحته.

image.png.8a655efe63553970a55f91f7a601f7e1.png

 

وإحضارها يكون من جدول (TAB_Subject) باعتبار أرقام (LVL1 - LVL2   - LVL3   - LVL4 )  التي في الاستعلام

وكمثال في الحديث الأخير:

اسم الموضوع الرئيسي (LVL1) هو (المناقب)، والمطلوب إحضاره من جدول (TAB_Subject) بدلالة رقم (1LVL) الذي في الاستعلام وهو (38)، بشرط أن تكون أرقام بقية المستويات هي (صفر)، وهذه صورة جدول (TAB_Subject) وفق هذه المعطيات

 image.png.20169b752bf7f23dbc7d43e411b47ac9.png

والمستوى الثاني (LVL2) رقمه (558) مع كون أرقام المستويين التي بعده (صفر)، واسمه: فضائل بقية الصحابة على الترتيب الهجائي

 image.png.7bb57e8f3095fd4c2ece4ae105c46292.png

والثالث (LVL3) رقمه (1032) والمستوى الذي بعده (صفر) واسمه: أ

 image.png.9be75439b983028667e3745fb0fadc89.png

فهل يمكن إدراج هذه الشروط والاعتبارات في الاستعلام لإظهار الاسم بدل الرقم.

قام بنشر

😅 الموضوع أكثر من متشعب ..

ولكن كمحاولة لست متأكداً من نتائجها ، قمت بالتجربة على قيم محددة في الاستعلام التالي ، جربه فضلاً أخي الكريم @nssj .

SELECT TAB_Subject.ID, TAB_Subject.LVL1, (SELECT TOP 1 SName FROM TAB_Subject AS L1 
     WHERE L1.LVL1 = TAB_Subject.LVL1 
     AND L1.LVL2 = 0 AND L1.LVL3 = 0 AND L1.LVL4 = 0) AS LVL1name, TAB_Subject.LVL2, (SELECT TOP 1 SName FROM TAB_Subject AS L2 
     WHERE L2.LVL1 = TAB_Subject.LVL1 
     AND L2.LVL2 = TAB_Subject.LVL2 
     AND L2.LVL3 = 0 AND L2.LVL4 = 0) AS LVL2name, TAB_Subject.LVL3, (SELECT TOP 1 SName FROM TAB_Subject AS L3 
     WHERE L3.LVL1 = TAB_Subject.LVL1 
     AND L3.LVL2 = TAB_Subject.LVL2 
     AND L3.LVL3 = TAB_Subject.LVL3 
     AND L3.LVL4 = 0) AS LVL3name, TAB_Subject.LVL4, (SELECT TOP 1 SName FROM TAB_Subject AS L4 
     WHERE L4.LVL1 = TAB_Subject.LVL1 
     AND L4.LVL2 = TAB_Subject.LVL2 
     AND L4.LVL3 = TAB_Subject.LVL3 
     AND L4.LVL4 = TAB_Subject.LVL4) AS LVL4name, TAB.TYPE1, (SELECT LISTname FROM DATA_list 
     WHERE NOM2 = TAB.TYPE1 AND NOM1 = 1) AS TYPE1name, TAB.TYPE2, (SELECT LISTname FROM DATA_list 
     WHERE NOM2 = TAB.TYPE2 AND NOM1 = 2) AS TYPE2name
FROM TAB, TAB_Subject_X, TAB_Subject
WHERE TAB.MNO = TAB_Subject_X.MNO 
    AND TAB_Subject_X.SUB_ID = TAB_Subject.ID
    AND TAB_Subject.ID IN (76, 159, 1873)
ORDER BY TAB_Subject.ID;

عله يكون بداية طيبة ..

قام بنشر
10 ساعات مضت, Foksh said:

😅 الموضوع أكثر من متشعب ..

كالعادة .. أمور كنت أظنها يسيرة فإذا بها متشعبة ومعقدة حتى في نظر أهل الخبرة 😅

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

لأن عندي استعلام يضم عدة جداول مترابطة، أريد أن أجعله مصدرا موحدا لعدة نماذج

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

وقد حاولت مجددا في الاستعلام باستخدام جداول مكررة داخل الاستعلام، وتمكنت من الحصول على المطلوب في (LVL1) (LVL2) فقط ، دون المستوى الذي بعده (LVL3).

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

والنتائج الي أظهرها الاستعلام الذي تفضلت به أخي الكريم أفضل، فقد أظهر الأسماء في جميع المستويات.

لكن فيه نفس المشكلة التي ظهرت في محاولتي الأخيرة، وهي ظهور الاسم في المستويات الفارغة، أعني التي الرقم فيها (صفر)

 image.png.62b201a3a5dae4738b48e02dcb44c72e.png

وربما السبب أن المستوى الأول والثاني (LVL1) (LVL2) موجودان في كل حديث، أما ما بعده فليس بالضرورة.

فحيثما كان رقم (LVL3) أو (LVL4) هو (صفر) فالاسم = ""

QF_Subject2.accdb

قام بنشر

امممم تقريباً بدأ افهم 😅😅 

جرب هذا الاستعلام !!!

SELECT 
    TAB_Subject.ID,
    TAB_Subject.LVL1,
    IIf(TAB_Subject.LVL1 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L1 
         WHERE L1.LVL1 = TAB_Subject.LVL1 
           AND L1.LVL2 = 0 AND L1.LVL3 = 0 AND L1.LVL4 = 0)) AS LVL1name,

    TAB_Subject.LVL2,
    IIf(TAB_Subject.LVL2 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L2 
         WHERE L2.LVL1 = TAB_Subject.LVL1 
           AND L2.LVL2 = TAB_Subject.LVL2 
           AND L2.LVL3 = 0 AND L2.LVL4 = 0)) AS LVL2name,

    TAB_Subject.LVL3,
    IIf(TAB_Subject.LVL3 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L3 
         WHERE L3.LVL1 = TAB_Subject.LVL1 
           AND L3.LVL2 = TAB_Subject.LVL2 
           AND L3.LVL3 = TAB_Subject.LVL3 
           AND L3.LVL4 = 0)) AS LVL3name,

    TAB_Subject.LVL4,
    IIf(TAB_Subject.LVL4 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L4 
         WHERE L4.LVL1 = TAB_Subject.LVL1 
           AND L4.LVL2 = TAB_Subject.LVL2 
           AND L4.LVL3 = TAB_Subject.LVL3 
           AND L4.LVL4 = TAB_Subject.LVL4)) AS LVL4name,

    TAB.TYPE1,
    (SELECT LISTname FROM DATA_list 
     WHERE NOM2 = TAB.TYPE1 AND NOM1 = 1) AS TYPE1name,

    TAB.TYPE2,
    (SELECT LISTname FROM DATA_list 
     WHERE NOM2 = TAB.TYPE2 AND NOM1 = 2) AS TYPE2name

FROM 
    TAB, TAB_Subject_X, TAB_Subject
WHERE 
    TAB.MNO = TAB_Subject_X.MNO 
    AND TAB_Subject_X.SUB_ID = TAB_Subject.ID
    AND TAB_Subject.ID IN (76, 159, 1873)
ORDER BY 
    TAB_Subject.ID;

استخدمت الدالة IIf في كل حقل من حقول أسماء المستويات ، ونجعل الاسم يظهر فقط إذا كانت القيمة المقابلة > 0 ، وإلا = Null

 

هل التالي صحيح في الصورة ؟

image.png.e79f8f95344b0e9f6134f1d9229551e7.png

  • Like 1
قام بنشر
20 دقائق مضت, Foksh said:

امممم تقريباً بدأ افهم 😅😅

التقصير مني أخي الكريم لأني لم أوضح الفكرة بالشكل المناسب  😐

النتيجة صحيحة 100%

12 ساعات مضت, Foksh said:

عله يكون بداية طيبة

نعم .. هذه البداية فقط 😁

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

قام بنشر
38 دقائق مضت, nssj said:

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

الفرق في عدم وجود بعض الحقول ، صحيح ؟؟

ام ماذا ؟؟؟

قام بنشر
35 دقائق مضت, Foksh said:

الفرق في عدم وجود بعض الحقول ، صحيح ؟؟

الفرق في وجود جدول آخر والعلاقات بين الجداول

 image.png.98ca9894cb79f54e67362c1fd648ab20.png

فالنسخة المرفقة من الاستعلام هي نسخة مصغرة للتجربة، حتى أنه فيه جدول (DATA_list) وليس في الاستعلام الأصلي الذي أستخدمه ، لأني لا أزال في طور التجارب، وقد أضيف جدولا آخر

وأنا كنت أتوقع أن تكون معالجة الأمر بوضع دالة داخل الاستعلام، على شاكلة:

 image.png.3bced8bf800c42ec2826bad3ec9f0343.png

أو

image.png.2af33500c3be704a1bdfe95eb7d8df96.png

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

قام بنشر

😕

لماذا تختار الشرح المبهم والذي لا يؤدي الى توضيح الفكرة والهدف ..

الحقول التي غير موجودة في استعلامي هي ؟؟؟ ( أرجو تحديدها ) ولا تنسى أنني اتعامل مع مرفقك وليس مع المرفق الذي تملكه وتطبق عليه ان كان مختلفاً في بنيته وتركيبه .

قام بنشر

أخي الكريم .. في الملف المرفق الاستعلام كما أستخدمه مع إضافة الحقول الجديدة المطلوب تعبئتها، مع ملاحظة أني لم أضف جدول (DATA_list) في شاشة الاستعلام، لأنه لا توجد بينه وبين الجداول الأخرى علاقة، وقد لا حظت أنك توصلت للنتائج المطلوبة دون أن يكون موجودا في شاشة الاستعلام

QF_Subject3.accdb

  • تمت الإجابة
قام بنشر

طيب .. بطريقتي سأسأل .. هل الفرق هو الحقول التالية :-

TNO, NASS, nass1

MSNO, MS_NAMEX من جدول Tab_Msaneed

ID_Xsub, Code, Parentx, Total, LVLno, Xsub

MAIN_sub من جدول TAB_Subject_X

يعني مقصدي انت تريد اضافة كافة الحقول الى الاستعلام الذي خرجت به ويلبي حاجتك في القيم المطلوب عرضها ، صحيح ؟؟؟

مع العلم أنك تستطيع إزالة الشرط :-
 

    AND TAB_Subject.ID IN (76, 159, 1873)

 

 

 

هل هذا الاستعلام يلبي احتياجك على سبيل المثال :-

SELECT 
    TAB.MNO, 
    TAB.TNO, 
    TAB.NASS, 
    TAB.nass1,
    Tab_Msaneed.MSNO, 
    Tab_Msaneed.MS_NAMEX,
    TAB_Subject.ID, 
    TAB_Subject.ID_Xsub, 
    TAB_Subject.SName, 
    TAB_Subject.Code, 
    TAB_Subject.Parentx, 
    TAB_Subject.Total, 
    TAB_Subject.LVLno, 
    TAB_Subject.LVL1, 
    IIf(TAB_Subject.LVL1 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L1 
         WHERE L1.LVL1 = TAB_Subject.LVL1 
           AND L1.LVL2 = 0 AND L1.LVL3 = 0 AND L1.LVL4 = 0)) AS LVL1name,
    TAB_Subject.LVL2, 
    IIf(TAB_Subject.LVL2 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L2 
         WHERE L2.LVL1 = TAB_Subject.LVL1 
           AND L2.LVL2 = TAB_Subject.LVL2 
           AND L2.LVL3 = 0 AND L2.LVL4 = 0)) AS LVL2name,
    TAB_Subject.LVL3, 
    IIf(TAB_Subject.LVL3 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L3 
         WHERE L3.LVL1 = TAB_Subject.LVL1 
           AND L3.LVL2 = TAB_Subject.LVL2 
           AND L3.LVL3 = TAB_Subject.LVL3 
           AND L3.LVL4 = 0)) AS LVL3name,
    TAB_Subject.LVL4,
    IIf(TAB_Subject.LVL4 = 0, Null, 
        (SELECT TOP 1 SName FROM TAB_Subject AS L4 
         WHERE L4.LVL1 = TAB_Subject.LVL1 
           AND L4.LVL2 = TAB_Subject.LVL2 
           AND L4.LVL3 = TAB_Subject.LVL3 
           AND L4.LVL4 = TAB_Subject.LVL4)) AS LVL4name,
    TAB_Subject.Xsub,
    TAB_Subject_X.MAIN_sub,
    TAB.TYPE1,
    (SELECT LISTname FROM DATA_list 
     WHERE NOM2 = TAB.TYPE1 AND NOM1 = 1) AS TYPE1name,
    TAB.TYPE2,
    (SELECT LISTname FROM DATA_list 
     WHERE NOM2 = TAB.TYPE2 AND NOM1 = 2) AS TYPE2name
FROM 
    ((TAB 
    INNER JOIN Tab_Msaneed ON TAB.MUSNAD = Tab_Msaneed.MSNO)
    INNER JOIN TAB_Subject_X ON TAB.MNO = TAB_Subject_X.MNO)
    INNER JOIN TAB_Subject ON TAB_Subject_X.SUB_ID = TAB_Subject.ID
ORDER BY 
    TAB.TNO;

 

  • Like 1
قام بنشر
4 ساعات مضت, Foksh said:

هل هذا الاستعلام يلبي احتياجك

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

وقد قمت بتجربته على الملف الأصلي والنتائج صحيحة بحمد الله، وقمت باختصار بعض الجمل في الاستعلام بناء على معرفتي بالحقول ومدلولاتها فأصبح هكذا:

SELECT TAB.MNO, TAB.TNO, TAB.NASS, TAB.NASS1, TAB.TYPE1, TAB.TYPE2, Tab_Msaneed.MSNO, Tab_Msaneed.MS_NAMEX, 
TAB_Subject.SName, TAB_Subject.LVLno, TAB_Subject.Code, TAB_Subject.Total, TAB_Subject.LVL1, TAB_Subject.LVL2,
TAB_Subject.LVL3, TAB_Subject.LVL4, TAB_Subject_X.MAIN_sub, TAB_Subject.ID, TAB_Subject.Xsub, TAB_Subject.ID_Xsub, 
(SELECT  SName FROM TAB_Subject AS L1 WHERE L1.LVL1 = TAB_Subject.LVL1 AND L1.LVL2 = 0) AS LVL1name, 
(SELECT  SName FROM TAB_Subject AS L2 WHERE L2.LVL2 = TAB_Subject.LVL2 AND L2.LVL3 = 0) AS LVL2name, 
(SELECT  SName FROM TAB_Subject AS L3 WHERE L3.LVL3 = TAB_Subject.LVL3 AND L3.LVL4 = 0 AND L3.LVL3 > 0) AS LVL3Name, 
(SELECT  SName FROM TAB_Subject AS L4 WHERE L4.LVL4 = TAB_Subject.LVL4 AND L4.LVL4 > 0) AS LVL4Name,
(SELECT LISTname FROM DATA_list WHERE NOM2 = TAB.TYPE1 AND NOM1 = 1) AS TYPE1name, 
(SELECT LISTname FROM DATA_list WHERE NOM2 = TAB.TYPE2 AND NOM1 = 2) AS TYPE2name
FROM (Tab_Msaneed INNER JOIN TAB ON Tab_Msaneed.MSNO = TAB.MUSNAD) INNER JOIN 
(TAB_Subject INNER JOIN TAB_Subject_X ON TAB_Subject.ID = TAB_Subject_X.SUB_ID) ON TAB.MNO = TAB_Subject_X.MNO
ORDER BY TAB.TNO;

 

  • Thanks 1
قام بنشر

الحمد لله إنها أمورك كما تريد 😇 

قمت بتعديل الإستعلام الأخير ليسهل قراءته بما إنك تعمل على حقول وجداول قد تختلف عن المرفق قليلاً.

:wub: .

  • Thanks 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information