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

مشكلة التكرار في قاعدة البيانات

مغلق
بدأه B5CSE في 1 مايو 2005 · 5 رد · 883 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

اسقطت اهم شروط RDBM و هي التكرار والسؤال هنا هو كيف اعمل حفظ ليس لكلمة ذكر او انثى

و انما لارقام صفر او واحد بحيث اذا كان العميل ذكر سوف يحتفظ واحد في قاعدة البيانات و اذا

كانت انثى سوف يحتفظ 2 ...

هذا هو حلي لتجنب مشكلة التكرار فاذا كانت هناك افكار في كيفية تنفيذ الحل او هناك حلول اخرى

ارجو مساعدتي بها

وجزاكم كل خير

اكتشافات علمية في قيام الليل

من فوائد الحمـــى

هل تريد اكثر من مليار حسنه في دقيقه واحده ......

فقط قل هذه الجمله وستأخذ عن كل مسلم حسنه من غير أن ينقص من أجرهم شيئا

اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء منهم و الأموات

وتأخذ عن كل واحد حسنه فانظر كم عدد المسلمين

كلمتان خفيفتان على اللسان ثقيلتان في الميزان حبيبتان على الرحمن

" سبحان الله وبحمده سبحان الله العظيم"

* دقيقة واحده : تستطيع ان تقول لاحول ولا قوة الا بالله اكثر من ( 40 ) مره وهي كنز من كنوز الجنه .

دقيقة واحدة : تستطيع ان تصلي على النبي صلى الله عليه وسلم ( 20 ) مره فيصلي عليك الله مقابلها

( 200 ) مره وحطة عنه ( 200 ) خطيئة من خطاياه ، ورفع له ( 200 ) درجة .

#2

السلام عليكم

الحل بسيط جدا

وممكن اكتر من طريقة منها على سبيل المثال فى جملة الحفظ هتكتب ComboBox1.SelectedValue

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#3

السلام عليكم

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

و الثاني GenderName ويكون الأول من نوع TinyInt طبعاً إن كانت قاعدة البيانات SQL

و يكون الثاني من نوع nXXXX بحيث يكون Unicode لإظهار الحروف العربية مثلاً nchar

ثم تعطيهم الـ Length المناسب وهو بلا شك 4 بالنسبة لعامود الأسماء , اما الأول فهم يأخذ 1 كما تعلم .

الان عملية ربطهم بالـقائمة المنسدلة , هذه التقنية تعرف بـ Complex Binding فستكون بهذا الشكل

            cboxGender.DataSource = Me.DsMain1
            cboxGender.DisplayMember = "LOOKUPGender.GenderName"
            cboxGender.ValueMember = "LOOKUPGender.GenderID"
            cboxGender.DataBindings.Add( _
            New Binding("SelectedValue", DVMain1, "Gender"))
            cboxGender.DropDownStyle = ComboBoxStyle.DropDownList

التحليل

خاصية الـ DataSource للقائمة المنسدلة تساوي الـ DataSet ثم

ثم خاصية الـ DisplayMember ستساوي عامود الاسماء وهو GenderName

أما خاصية الـ ValueMember ستساوي القيم الرقمية اي عامود الأرقام وهو GenderID

ثم نقوم بعملية إتصال القائمة المنسدلة بالـ DataSet بإنستخدام السلوك ADD بشرط أن نجعل الـ PropertyName تساوي

SelectedValue السبب أننا نريد أن نتصل بالعامود الموجود في الجدول الرئيسي مثلاً وهو Gender بحيث يتم جلب و حفظ

الأرقام فيه بدل الأسماء فبالـ SelectedValue يتم ذلك .

تلاحظ أن لدي عنصر باسم DVMain1 هذه DataView فإن كنت لا تستخدم DataView فإستبدل الـ DVMain1

باسم الـ DataSet لديك ثم قبل اسم العامود Gender أكتب اسم الجدول مثلاً

   New Binding("SelectedValue", Me.DsMain1, "myTable.Gender"))

أخيراً من المنطق أن نجعل القائمة المنسدلة لا تقبل سِوى القيم الموجودة فيها فقط فسيكون بالأمر الأخير وهو

 cboxGender.DropDownStyle = ComboBoxStyle.DropDownList

هذه التقنية تعرف بـ Perdefind Data

من المنطق دائماً و ابداً لابد أن نقوم بعملية التنظيف أو الإزالة قبل اي ربط فسيكون بهذا الشكل

cboxGender.DataBindings.Clear()

والله أعلم

في المثال يتضح المقال

#4

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

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

جزاكم الله خيرا

وللأخ الغملاسي اشكرك جزيل الشكر على ردك التفصيلي و السريع في معظم مشاركاتي و مشاركات الأخوة الأعضاء

و الله في عون العبد مادام العبد في عون اخيه

اكتشافات علمية في قيام الليل

من فوائد الحمـــى

هل تريد اكثر من مليار حسنه في دقيقه واحده ......

فقط قل هذه الجمله وستأخذ عن كل مسلم حسنه من غير أن ينقص من أجرهم شيئا

اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء منهم و الأموات

وتأخذ عن كل واحد حسنه فانظر كم عدد المسلمين

كلمتان خفيفتان على اللسان ثقيلتان في الميزان حبيبتان على الرحمن

" سبحان الله وبحمده سبحان الله العظيم"

* دقيقة واحده : تستطيع ان تقول لاحول ولا قوة الا بالله اكثر من ( 40 ) مره وهي كنز من كنوز الجنه .

دقيقة واحدة : تستطيع ان تصلي على النبي صلى الله عليه وسلم ( 20 ) مره فيصلي عليك الله مقابلها

( 200 ) مره وحطة عنه ( 200 ) خطيئة من خطاياه ، ورفع له ( 200 ) درجة .

#5

بسم الله

السلام عليكم

ويمكن منع التكرار بإستخدام المعامل distinct ، في جملة الإستعلام

وهذا مثال على استخدام هذا المعامل

con.ConnectionString = ConnString
        '''''
        'لملأ كومبو أسماء المنتجات

يتم ملأ الكومبو الخاص بأسماء المنتجات ، من جدول المنتجات في الحدث لوود .

لتعريف كوماند يتم بواسطته إختيار أسماء المنتجات دون تكرار

Dim item_names As New OleDb.OleDbCommand
        
item_names.Connection = con
item_names.CommandType = CommandType.Text

جملة الإستعلام ويلاحظ فيها المعامل ديستنكت

item_names.CommandText = "select distinct ItemName from products"
con.Open()

لتنفيذ جملة الإستعلام وتخزين ناتجها في متغير

dr = item_names.ExecuteReader()
Do While dr.Read()

لملأ الكومبو بالبيانات غير المكررة المستدعاة

item.Items.Add(dr(0))
Loop
con.Close()

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

والله أعلى وأعلم

distinct operator.rar

تم تعديل هذه المشاركة بواسطة walcom في 7 مايو 2005 في 12:41

#6

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

جزاكم الله خيرا الأخ أبو المهاجر

و الآن بعد ان وجدت الحل سأشرحه لكم عسى من مبتدى مثلي اي يجد مبتغاه في اجابتي ........

حتى نمنع التكرار في جدول ما لحقل معين فمثلا GENDERID الذي يحتوي على قيمتي 0و1 وذلك

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

جدول اخر GENDER الذي يحتوي على حقلين هم GENDERID لقيمتي 0و1 الذي تقابل كلمتي

الذكر و الأنثى و

GENDERNAME الذي يحتوي على كلمتي الذكر و الأنثى ثم نعمل علاقة

ONE TO MANY بين الجدولين ثم نكتب الكود التالي الذي يقوم باختيار

كل الحقول في جدول GENDER من خلال جملة استعلام ثم نخزن جدول GENDER في

DATATABLE ثم نقوم بتعبئة ComboBox1 بكلمتي الذكر و الأنثى باستخدام

DisplayMember لحقل GENDERNAME اما القيم التي سوف تخزن

في قاعدة البيانات هي 0و1 باستخدام ValueMember لحقل GENDERID

 Sub gender()
        Try
            Dim sql As String = "select * from GENDER"
            Dim DA As New SqlDataAdapter(sql, sqlcon)
            sqlcon.Open()
            DA.SelectCommand.ExecuteNonQuery()
            Dim DATATABLE As DataTable = New DataTable
            DA.Fill(DATATABLE)
            ComboBox1.DisplayMember = "GENDERNAME"
            ComboBox1.ValueMember = "GENDERID"
            ComboBox1.DataSource = DATATABLE

        Catch exc As Exception
            MsgBox(exc.Message)
        End Try
        sqlcon.Close()

    End Sub

الآن في عملية الحفظ لComboBox نكتب الكود التالي

cmd.Parameters.Add("@genderid ", SqlDbType.SmallInt).Value = ComboBox1.SelectedValue

حيث ان SelectedValue تأخذ القيمة 0و 1 و ليست كلمتي الذكر و الأنثى

وفي الأخيراعتذر ان كان اسلوبي لم يوصل الغاية

تم تعديل هذه المشاركة بواسطة walcom في 7 مايو 2005 في 12:45

اكتشافات علمية في قيام الليل

من فوائد الحمـــى

هل تريد اكثر من مليار حسنه في دقيقه واحده ......

فقط قل هذه الجمله وستأخذ عن كل مسلم حسنه من غير أن ينقص من أجرهم شيئا

اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء منهم و الأموات

وتأخذ عن كل واحد حسنه فانظر كم عدد المسلمين

كلمتان خفيفتان على اللسان ثقيلتان في الميزان حبيبتان على الرحمن

" سبحان الله وبحمده سبحان الله العظيم"

* دقيقة واحده : تستطيع ان تقول لاحول ولا قوة الا بالله اكثر من ( 40 ) مره وهي كنز من كنوز الجنه .

دقيقة واحدة : تستطيع ان تصلي على النبي صلى الله عليه وسلم ( 20 ) مره فيصلي عليك الله مقابلها

( 200 ) مره وحطة عنه ( 200 ) خطيئة من خطاياه ، ورفع له ( 200 ) درجة .

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

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