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

سوال فى الاستفسار عن بيانات بالعربى

مغلق
بدأه sherif4csharp في 19 أكتوبر 2005 · 8 رد · 1,184 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم يا اخوتى

السوال الاول

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

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

السوال الثانى

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

اتمنى ان يفيدنى من هو ذى علم وربنا الموفق و لو حتى عنواين رئيسيه

شكرا لاطلاعك على الرساله

#2

التصميم السليم لأي قاعدة بيانات من المفروض ان يتم من خلال تقسيم الاسم الكامل إلى عدد من الحقول

مثلا الاسم الاول في حقل و الثاني في حقل و الثالث في حقل.

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

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

#3

1- انظر

الأستعلام بواسطة لغة SQL, البحث عن جزء من الأسم

وليس شرطا تقسيم الاسم لأكثر من حقل.

2- ممكن تفاصيل أكثر (بنية الجداول)!

تم تعديل هذه المشاركة بواسطة walcom في 21 أكتوبر 2005 في 04:32

فكر بطريقة أخرى

#4

بالنسبة للاسماء فيفضل تقسيمها الي حقول كما ذكر الاخ محمد اكرم

اما ال Locking

فيمكنك عمله عن طريق ال Isolation Level

اقرأ ال Books Online لكي تتعرف علي المستويات بالتفصيل

#5

طريقة وليد لن تنفع للاسف لان الاسم يحتوى على فراغات و مقسم لاكثر من جزء

فكرة محمد اكرم تبدو جميلة فى حال لم يكن صاحب السؤال قد قام بملئ جدوله بالبيانات

و لكن نفترض انه قام بملئ جدوله بالبيانات فعلاً ماذا سيكون حل السؤال |-)

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#6

:rolleyes: الحل الذى استطعت ان اتوصل إليه قم بانشاء جدول اسمه Unicode كمثال هنا

-- Create Test Table
CREATE TABLE [Unicode]
(
mName nvarchar(50)NOT NULL 
) 
GO

-- Insert Some Values
insert into [Unicode]Values ('كريم رمضان عبد الواحد')
insert into [Unicode]Values ('طارق إبراهيم السيد')
insert into [Unicode]Values ('محمد عبد العليم سالم')
insert into [Unicode]Values ('عادل عبد الفتاح إبراهيم')
insert into [Unicode]Values ('محمد عبد الرحمن إبراهيم')
insert into [Unicode]Values ('مريم سمير فرج')
insert into [Unicode]Values ('داليا حسام الدين محمود')
Go

هنا ستستخدم عبارة ال Select هذه لاستثناء جزء من اسم من البحث مع الاخذ فى الاعتبار ان ال Underscore هنا تعتبر WildCard و شخصياً افضل هذه الطريقة للمرونة التى توفرها باستخدام ال WildCards

select mName From [Unicode] Where mName=substring(mName,PatIndex('%كريم_%',mName) + 1,
len(mName))
Go

هنا مثال لاستثناء الاسم الاول من البحث

select substring(mName,charindex(' ',mName)+ 1 ,
len(mName)) as [Name]
from [Unicode] Go

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#7

يعطيكم العافيه...

معلش بس مداخله بسيطه..

أخ walcom متأكد انو كلامك صحيح ؟؟؟ "مش لازم يتم تقسيم الاسم لحقول ؟؟؟!!" فعلا غريبه :unsure: ... مع انو سؤال الاخ واضح جدا...

أخي قواعد ال Normalization الاوليه تحتم عليك ذلك في خلال انتقالك من مرحلة ال UNF وصولا ل 1NF وهي مرحلة التخلص من ال Reprating Groups و Redundancy ... و التخلص من ال Anomalies باستخدام خاصية ال Functional Dependancies ...

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

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

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

نهاية تقبلوا التحيه :) ,,,

#8

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

كيف حال الإخوة الأحبة :)

تعليق بسيط ، ربما استقيته من خبرة

أحيانا تمر علينا أثناء العمل مشكلات ، هذه المشكلات قد تكون لها حلول "منهجية سليمة" ، ولكنها ستتطلب ربما وقت أكثر أو إعادة هدم وبناء لجزء معين في المشروع ، أو أي شيء آخر قد يعيق التعامل من خلال هذا الحل المنهجي ، وهنا يجب أن يكون هناك حل أيضاً ، وهذا الحل نطلق عليه نحن معاشر المبرمجين (على الأقل أناس أعرفهم) "حل بلدي" :) ، قد يستغرب البعض من المصطلح ، ولكنه مبني على ما يقوم به وعلى ما بني عليه ، فهو من جهة "حل" لأنك تتخطى به مشكلتك ، ومن جهة أخرى "بلدي" أي أنه ليس حل منهجي علمي سليم

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

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

وأخيراً أسأل الله تعالى لي وله ولكم التوفيق

#9
اقتباس
أخ walcom متأكد انو كلامك صحيح ؟؟؟ "مش لازم يتم تقسيم الاسم لحقول ؟؟؟!!"

عادة ما يتم ذلك حسب متطلبات الحل المطلوب

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

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

وفي حال استخدام هذه الطريقة، يكون من المناسب جعل واجهة البرنامج بحيث تحتوي على أداة اختيار تشتمل على هذه الخيارات "الاسم يبدأ ب، يشتمل على، ينتهي ب"، ومن ثم استعمال المعامل like لاسترجاع الأسماء المشابهة للاسم المدخل.

بالتوفيق بإذن الله :)

فكر بطريقة أخرى

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

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

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

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

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

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