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

كيفية ايجاد القيم المتشابه التي يتم استخراجها بالعين المجردة ؟

مغلق
بدأه محمد فؤاد تركي في 14 أغسطس 2007 · 22 رد · 6,094 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السادة الاعضاء والمشرفين الغاليين

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

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

وعلي سبيل المثال

لو افترضنا اننا لدينا عمودين كما في الصورة المرفقة أدناه

86178011fs0.jpg

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

فهل من طريقة تساعدنا علي فرز هذه الاصناف المتشابه ووضعها امام بعضها في الاعمدة

مرفق الملف

Compare.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

اخي محمد فؤاد بارك الله فيك..

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

هل ان لكل صنف عمودين للكود، ام ان هذه عينة من جدولين،، ام من نفس الجدول،،

لا بد من تحديد المبدا الذي يتم فيه الادخال وبالتالي يتم تحديد سبب الخطأ..

الرجاء توضيح هذه النقطة..

تم تعديل هذه المشاركة بواسطة همام ابوعرقوب في 14 أغسطس 2007 في 23:23

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

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

#3

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

للاسف مدخل البيانات بريء براءة الذئب من دم ابن يعقوب

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

وبخصوص الجزئية الثانية

فلايوجد عمودين للكود ولا حاجة

كل ما هنالك هي اننا نضع هذه الاكواد علي سيستم جديد اسمة microsoft business axapta solution مش عارف انت تسمع عنه ولا ايه

المهم ويتم ادخال الاكود بصورة يدوية

والمطلوب مقارنتها بالاكود الموجوده حاليا علي السيستم القديم

فكان الحل بالنسبة لي هو سحب الاكود من علي السيستم الجديد ووضعها في عمود ثم سحب الاكواد من السيستم القديم في عمود آخر لعمل

الـ Mapping أو المقارنة بين العمودين

هل الصورة وضحت الان

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#4

توضيح بسيط للاخ همام

هذه البرامج مصممة بالفيجوال بيسك وليس الاكسس

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

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

طيب!!

الحل حسب رايي،، لانني لست متاكد 100% من قدرة الاستعلامات على التصرف،،

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

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

اختر العمود الاول كثابت، وحرك القيم بالعمود الثاني اثناء المقارنة..

يعني، خذ السجل الاول، العمود الاول، وضعه في متغير..

تحرك بالسجلات من خلال MoveNext و RecordSet

قارن بين Column2 وذلك المتغير،، كل مرة تجد المقارنة ايجابية خزن المتغير "او القيمة من العمود الثاني" في سجلات خاصة بجدول اخر لتسهيل عمل استعلام الحذف، وهكذا..

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

همام

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

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

#6

منتظر تجربتك يا أخي همام وارفاق مثال وغداً باكر سأضع بين يديك ملف يحوي الداتا الحقيقية المطلوب عمل عليها المقارنات

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

'المنتدى منور بصراحه

باخواننا الاستاذ / محمد فؤاد ترك

والاستاذ / همام ابو عرقوب

ومن مناقشاتكم نستفيد

#8

اخي الفاضل محمد فؤاد

وجميع الأخوة المشاركين

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

في مثل هذه الحالة نحتاج اولا الى دالة او وظيفة لكي نقوم بمساواة الطرفين او العمودين المتشابهين نظريا والمختلفين كتابيا

لهذا سوف نستخدم وظيفة جديده وهي ازالة المسافات بين جميع الحروف Remove Spaces لكي ينتج لنا في كلا العمودين الكلمات المتشابهه تماما

من هذه اللحظة لم يعد هناك مشكلة فبالإمكان الآن عمل المقارنه بين العمودين

لهذا نحتاج الى ان نقوم بعمل استعلامين وهما compare1 و compare2 ونضع بهما العمودين ومن ثم نستخدم مع كل عمود الدالة ( removespaces )

ليكون العمود الأول في الإستعلام الأول هو

A: removespaces([cloumn1])

وبنفس الطريقة مع العمود الثاني

B: removespaces([cloumn2])

الآن انتهينا من تجهيز اول استعلام compare1

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

B: removespaces([cloumn2])

وبنفس الطريقة مع العمود الثاني

A: removespaces([cloumn1])

الآن انتهينا من تجهيز ثاني استعلام compare2

نقوم الآن بعمل المقارنة للقم المتشابهه بين الإستعلامين من خلال العمود الأول فقط بهذه الطريقة

SELECT compare1.A, compare2.B
FROM compare1 LEFT JOIN compare2 ON compare1.A = compare2.B
WHERE ((Not (compare2.B) Is Null));

لينتج لدينا القيم المتشابهة بين الإستعلامين

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

SELECT compare1.A
FROM compare1 LEFT JOIN compare2 ON compare1.A = compare2.B
WHERE (((compare2.B) Is Null));

اخيرا هذا هو التطبيق العملي لهذه العملية

zaCompare_up.rar

2
#9

الله الله على الابداع

ومازال الطريق امامنا طويل

شكرا لاستاذتنا زهرة

تم تعديل هذه المشاركة بواسطة maherbadawey في 15 أغسطس 2007 في 12:55

#10

استاذنا الغالي ماهر بدوي بارك الله فيك والله كلك ذوق واعذرني عن غيابي في الفترة السابقة لانشغالي بدراسة اللغة الانجليزية

الاخت الغالية زهرة المنتدي

بارك الله فيكي سلمت يداك ... انت فعلاً عبقرية وجمله ازاله الفراغات بالاكواد جمله غاية في الروعة وتقريبا 1/2 المشكله كده اتحلت وباقي الـ 1/2 التاني من المشكلة وهو ايضا مهم جداً

وهي عبارة عن الكود التالي الغير متشابة

10*56*85

10×56×85

من المفترض ايضا ان هذا الكود متشابة نظريا لكنه غير متشابة كتابيا وطبعا لايظهر عند عمل مقارنات بالاستعلامات

فهل من طريقة لحل هذه المشكلة

والله انا بحاول افكر معاكي يا اختنا الغالية زهرة . . طيب هناك فكرة هل من طريقة مثلا لاستبدال * بــ × أو العكس لتوحيد الكود ومن ثم الوصول الي غايتنا . . أعتقد ان الموضوع مازال شائك وعاوز شوية شغل وتظبيط وتشغيل دماغ *-)

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#11

لا يوجد اي مشكلة اخي محمد فكل مشكله ولها الف حل

سوف نستخدم دالة Replace ونضعها في حقل جديد مع اول استعلام قمنا فيه بحذف الفراغات من العمود الأول وهو A بهذه الطريقة

SELECT removespaces([cloumn1]) AS A, removespaces([cloumn2]) AS B, Replace([A],"*","×") AS AR
FROM compare ORDER BY removespaces([cloumn1]);

لاحظ اننا سوف نستخدم الآن الحقل الجديد وهو AR بدلا من الحقل السابق A لعمل المقارنه بين المتشابهات حسب الجملة التالية

SELECT compare1.AR
FROM compare1 LEFT JOIN compare2 ON compare1.AR = compare2.B
WHERE ((Not (compare2.B) Is Null));

الآن لم يعد هناك حقول غير متشابهه ولا داعي للإستعلام الثاني " القيم الغير متشابههة بين العمودين لأنه لا يوجد شيء فكلها تم مطابقتها تماما

zaCompare_up2.rar

1
#12

السلام عليكم وعذرا اخي محمد فؤاد،،

عملت برنامجا على الكود يلف ويدور ثم يخرج رسالة بالكود غير المتشابه بين العمودين ونجح،، ولكن بعد ان خرجت زهرة بمسالة ازالة المسافات اعدت النظر في موضوع قدرة الاستعلامات وقلت،، لدي جملة اضفتها لاستعلام Compare1 من صنع زهرة وهي:

Replace(removespaces([cloumn1]),"*","x")

للعمود الاول ... و

Replace(removespaces([cloumn2]),"*","x")

للعمود الثاني، وظهر الاستعلام "القيم المتشابهة بين العمودين به جميع السجلات ،، فهل ما وصلت اليه صحيح...؟؟؟!!

مع انني متاكد ان الماخذ عليها هو انها تستبدل ال "*" في حالو وجودها اصلا،، فان لم تكن موجودة،،، فمالحل..

همام

تم تعديل هذه المشاركة بواسطة همام ابوعرقوب في 15 أغسطس 2007 في 14:27

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

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

#13

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

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

في حال ان احد الحروف * او × غير موجوده في هذه الحالة نسنخدم ايضا دالة IIF فإن وجد هذا الحرف يقوم بإستبدالة وإلا يعود لنفس قيمة العمود

A: IIf(Replace(removespaces([cloumn1]);"*";"×");[cloumn1])

ملاحظة : الحرف × هو حرف علامة الضرب عند تحويل الكتابة للعربي وليس حرف x الإنجليزي - ولكتابته نقوم بالتحويل للغة العربية ثم بالضغط على مفتاح الشفت ثم الضغط على مفتاح الخاء العربي او الـ O الإنجليزي .

لا تحتاج الى وضع الدالة Replace في العمود الثاني لأننا نريد ازالة الفراغات منه فقط

zaCompare_up3.rar

1
#14

الاخت الغالية زهرة

بارك الله فيكي مجهود رائع ودوال في غاية الاهمية فداله Replace وداله removespaces من الدوال المهمة جداً والذي تعلمت الان منهم الكثير من الافكار بفضلك وكرمك

الاخ الغالي همام

اضافتك زادت المشاركة حلاوة

* لي ملحوظة تكاد تكون مستحيلة تحقيقها لاني مقتنع تمام الاقتناع بغباء الحاسب الالي ( آسف علي التعبير )

ولان ايضا متيقن بأن الحاسب من أسس مقارناته

أولاً يجب ان تكون المقارنة بين عمودين او اي شيء متطابقتين تماماً في البيانات بدون مسافات وبدون رموز مختلفة

الا وسيعتبرها الحاسب شيء مختلف . . وهذه مشكلة كبيرة

لان نحن البشر بالعين المجردة نستطيع ان نقول ان

هذا الرقم 1*3 مطابق تماماً لهذا الرقم 1 × 3

لكن الحاسب للاسف لا يفهم هذا فيجب اولا علينا تهيئة المدخلات لتكون متطابقة تماماً وبعد ذلك نقوم بعقد المقارنات المطلوبة لتصبح النتيجة صحيحة . . .

ومن هذا المنطلق والله لا اريد ان اسأل هذا السؤال لاني متيقن من ان ليس له اجابة

ان نصنع استعلام يعطيني نتيجة بأن الحقل 10*85*56 يساوي 10×85×56

وايضا انا واثق من قدرات مشرفتنا الغالية وايضا اذا كانت هذه المشاركة ستتوقف عند هذا الحد فالحمد لله والشكر هذا سيفي الغرض نسبة 80% تقريبا من انجاز العمل والفضل يرجع لكي يا زهرتنا الغالية

مرة أخري شكراً جزيلا لك

هذا هو المطلوب

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#15

اخي الفاضل محمد فؤاد

بكل سرور يمكن عمل ذلك بكل سهوله فإذا كان الكمبيوتر بهذا الغباء فمن السهل الضحك والتحايل عليه ولكن قبل هذا يجب ان يكون لدينا خلفية عن حروف الآسكي كود ASCII Code حيث ان لكل حرف من الحروف رقم يقابله فمثلا الحرف A يقابله من ارقام الآسكي الرقم 65 وهكذا بقية الحروف

الآن لدينا الحرف * فإن رقم الآسكي كود الخاص به 42 وكذلك رقم علامة الضرب × رقم الآسكي كود الخاص هو 215 لهذا يجب ان نساوي * بـ × فلو طرحنا رقم علامة الضرب × من رقم علامة النجمة * فيكون الفرق بينهم هو الرقم 173

من هذه النقطة نسنطيع اضافة الرقم 173 الى الرقم 42 وهو الخاص بعلامة النجمة * لينتج لنا حرف جديد وهو علامة الضرب ×

الحمد لله الى هنا استطعنا نظريا ان نوحد بين حرفين مختلفين تماما .

سنقوم الان بعمل هذا في الإستعلام الأول compare1 لأن به علامة النجمة لهذا سنوجد حقل جديد وهو AA معتمد على الحقل A المنزوع منه المسافات فيكون الحقل الجديد هو

AA: IIf([A]="10*56*85";10 & Chr((42)+173) & 56 & Chr((42)+173) & 85;[A])

ويعني هذا الكود اذا كان الحقل A يساوي 10*56*85 فيجب تحويله الى 10×56×85 وإلا يعود الحقل كما هو اذا لم يكن نفس الحروف

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

طبعا لو لا حظنا في الإجابات السابقة من المشاركات انه لم يكن بالإمكان تشابه القيمتين 10*56*85 و 10×56×85 لأنهما مختلفتين تماما ولكن الآن بوجد الحقل الجديد AA في الإستعلام الأول يمكن المقارنه وتكون القيمة 10*56*85 تساوي وتشابه القيمة 10×56×85 في الحقل الثاني غصب على الكمبيوتر واللي خلفوه كمان .

الآن في استعلام المقارنه سوف نربط الحقل AA من الإستعلام الأول compare1 مع الحقل B في الإستعلام الثاني compare2 لأنهم اصبحوا متساوين تماما

نقوم الآن بعرض الحقل A والحقل B في الإستعلام فنجد انهم متشابهين تماما برمجيا ولكن نظريا مختلفين .

وهذا هو المثال بعد التعديل

zaCharacterToNumber_up.rar

1
#16

ما شاء الله تبارك الرحمن

#17

السلام عليكم

الاخوة الكرام بالمشاركة

فعلا بارك الله فيكم مجهود ممتاز جدا وقدرات غير عادية

الاخ محمد التركي : مبروك علي اكزبتا بس فيه برامج مصرية افضل واقوي وارخص ومعتمدة من ميكروسوفت مثل Infinity

نرجع لموضوع المشاركة : طبعا زي ما انت عارف فعلا ومش تهريج احنا بنتعلم من اسألتك

بص يا عم محمد :

للتخلص من الشوائب بالاكواد لازم نعمل Scan لكود الصنف حرف حرف او بمعني ادق رمز رمز لان الرمز ممكن يكون حرف او رقم او علامة

بواسطة for --- Next

بعد كده لازم نعرف ان ال ASCII Code بتاعنا هو 128 رمز يعني من صفر الي 127

الارقام من 0 الي 9 لها كود من 48 الي 57

الحروف الكابتال لها كود من 65 الي 90

الحروف الصغيرة لها كود من 97 الي 122

يعني بعد ما نعمل سكان لكود الصنف لو كود الرمز اصغر من 48 يعني مش عايزينوه ممكن يتبدل بمسافة

ولو كود الرمز من 58 الي 64 ايضا مش عايزينوه ممكن يتبدل بمسافة

ولو كود الرمز من 91الي 96 ايضا مش عايزينوه ممكن يتبدل بمسافة

ولو كود الرمز اكبر من 122 ايضا مش عايزينوه ممكن يتبدل بمسافة

بعد كده نستخدم دالة الاستاذه زهرة للتخلص من الفراغات

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

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

اخوك فى الله

ZMAAAAN.rar

Microsoft Certified DataBase Administrator MCDBA

#18

أختي الغالية زهرة كالعادة :lol: تعجز الكلمات علي التعبير دائما عن امتناني وشكري الحار للخبرة الهائلة والعقل البشري الخارق الذي حباكي الله به ..... بارك الله فيكي دائما وابداً واعطاكي الله سبحانة وتعالي من علمه مالم يعرفة بشر في الدنيا هذه . . مرة أخري شكراً لك

شكرا لك مرة اخري

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#19

أخويا وحبيبي ahamied

الله يبارك فيك علي مساعدتك ليا

مشاركتك فعلاً ممتازة واستفدت منها كتير

شكراً لك مرة أخري

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#20

محمد باشا

طلباتك اوامر بس لو ممكن تجرب المرفق علي كم اكبر من السجلات وترد علينا

بارك الله فيك

Microsoft Certified DataBase Administrator MCDBA

#21

بسم الله الرحمن الرحيم

زهرة

اسم على مسمى

بارك الله فيك اختنا زهرة وحفظك

#22

السلام عليكم

جزاك الله خيراً على هذه المشاركة

ويمكن إضافت ما يلي :

بعد التخلص من الفراغات واستبدال * نعمل استعلام union select يدمج بين العمودين

ثم نعمل استعلام Find duplicates معتمد على الاستعلام السابق فيحضر لنا عدد مرات تكرار كل كود ونضعه أكبر من 2 ( مرة في الجدول الأول ومرة في الجدول الثاني )

والسلام عليكم

قالَ رَسُولُ الله صلى الله عليه وسلم:

"مَنْ لم يَشْكُرِ النّاسَ لَمْ يَشكُرِ الله "

حديث حسن صحيح

#23

أخي الغالي

بارك الله فيك

وشكرا لكل من حاول مساعدتي في هذه المشاركة

certifiedj.jpg

 

 

Image Hosted by ImageShack.us

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

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

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

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

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

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