منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] تعديل فى ربط قاعدة بيانات أكسس مع Combobox - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] تعديل فى ربط قاعدة بيانات أكسس مع Combobox (/showthread.php?tid=33754)

الصفحات: 1 2


تعديل فى ربط قاعدة بيانات أكسس مع Combobox - Doctor GME - 10-03-20

أصمم برنامج لتسجيل الأدوية الطبية بهذا الشكل



حيث Type هو نوع الدواء و Name هو إسم الدواء و Dose هى جرعته وRoute هو طريقة تعاطيه
ووضعت له قاعدة بيانات بهذ الشكل



فعند اختيار النوع وهو Antibiotics فى ال Combobox المسمى Type
تظهر قائمة بأسمائها فى ال Combobox المسمى Name وعند اختيار أحد الانواع وليكن Augmentin منها
تظهر الجرعات المتاحة لهذا الدواء والمسجلة بقاعدة البيانات ويفصل بينها (-) كما بالصورة:



وعند اختيار أحد الجرعات من Combobox المسمى Dose ولتكن 20 تظهر طريقة تعاطيه المقابله له فى قاعدة البيانات
فى نفس موقع فواصل (-) كما بالصورة:



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



بحيث عند اختيار الجرعة من Combobox المسمى Dose ولتكن 20 تظهر طريقتى التعاطى كل واحدة فى خانة
كما بالصورة:



وهذا هو الكود الخاص بهذه الوظيفة وعذراً للإطالة
كود :
  Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Medication.accdb")
   Dim da As OleDbDataAdapter
   Dim cm As OleDbCommandBuilder
   Dim cmd As OleDbCommand
   Dim itemRoute As String()
   Private Sub MedType1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MedType1.SelectedIndexChanged

       MedName1.Items.Clear()
       MedDose1.Items.Clear()
       MedRoute1.Items.Clear()

       If MedType1.SelectedItem = ("Antibiotics") Then

           Dim dt1 As New DataTable
           dt1.Clear()
           Dim sql As String = "SELECT * FROM Antibiotics"
           da = New OleDbDataAdapter(sql, cnn)
           cm = New OleDbCommandBuilder(da)
           da.Fill(dt1)

           For ii As Integer = 0 To dt1.Rows.Count - 1
               MedName1.Items.Add(dt1(ii)(0))
           Next

       End If

   End Sub

   Private Sub MedName1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MedName1.SelectedIndexChanged

       MedDose1.Items.Clear()
       MedRoute1.Items.Clear()

       If MedType1.SelectedItem = ("Antibiotics") Then

           Dim dt2 As New DataTable
           dt2.Clear()
           Dim sql2 As String = "SELECT * FROM Antibiotics WHERE Antibiotics = '" & MedName1.SelectedItem & "'"
           da = New OleDbDataAdapter(sql2, cnn)
           cm = New OleDbCommandBuilder(da)
           da.Fill(dt2)
           Dim doses As String = dt2(0)(1)
           Dim dose As String() = doses.Split("-")
           For ii As Integer = 0 To dose.Count - 1
               MedDose1.Items.Add(dose(ii))
           Next
           Dim routes As String = dt2(0)(2)
           Dim route As String() = routes.Split("-")
           itemRoute = route

       End If

   End Sub



RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - ابراهيم ايبو - 15-03-20

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


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - ابراهيم ايبو - 16-03-20

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


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - Doctor GME - 17-03-20

شكراً جزيلاً لمحاولتك المساعدة
الكود الذى وضعته أخى الكريم جيد إلى حد كبير ولكنه لم يحل المشكلة
فكما ترى بهذه الصورة



صممت قاعدةالبيانات ليكون اسم الدواء وجرعاته وطريقة تعاطى كل جرعة بجانبها تماماً وذلك لسهولة الإضافة
حيث أن البرنامج سيحتوى على آلاف الأدوية من مختلف الأصناف مثل المضادات والمسكنات وخلافه
ولا يمكن أن تكتب كلها فى جدول Dawaa مثل مقترحك فهذا سيصعب جداً التعديل ويفتح الباب للخطأ
فى شىء خطير مثل كتابة الدواء
كما أن مقترحك أخى الكريم لا يربط طريقة تعاطى الدواء بالجرعة وإنما بإسم الدواء
وما أقصده أن دواء ما ولتكن جرعته 50 مللى جرام يؤخذ بالفم ولكن جرعة 100 مللى جرام تؤخذ بالحقن وهكذا
أما مقترحك فعند إضافة بند آخر فى طريقة التعاطى يظهر مباشرة بعد اختيار اسم الدواء وليس الجرعة هكذا



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



وشكراً جزيلاً مرة أخرى لمجهودك


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - ابراهيم ايبو - 17-03-20

العفو اخي الكريم ولك الشكر ايضا



RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - ابراهيم ايبو - 25-03-20

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


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - Doctor GME - 27-03-20

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


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - WaeLx - 28-03-20

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

عندي اقتراح بسيط

الحل في تنظيم قاعدة البيانات

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

محتاج تضيف جدول به ثلاث صفوف

drugId , dose, route

و تربط drugId ب Id الدواء المقابل

و عندما تختار الدواء رقم واحد مثلا، تظهر الجرعات الخاصة به و عندما تختار جرعة ما فتظر تلقائيا طريقة الاعطاء لهذه الجرعة

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


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - Doctor GME - 30-03-20

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


RE: تعديل فى ربط قاعدة بيانات أكسس مع Combobox - WaeLx - 30-03-20

(30-03-20, 01:44 PM)Doctor GME كتب : شكراً لاقتراحك أخى
قام الأخ ابراهيم ايبو مشكوراً بتصميم اقتراح مشابه تجده فى الردود بالأعلى
ولكنه لا ينفذ الفكرة المطلوبة
كل ما أفكر به حالياً هو كود يكتب فى مهام ال combobox الأخير
ويجعله يقسم ما يأتيه من قاعدة البيانات عند إيجاده رمز &

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

هتحتاج تربط textbox ب Dose، و textbox اخر ب Route

و يكون الكود الل يملأ ال combobox الخاص ب  Dose  كالتالي

PHP كود :
Dim DoseArray() As String TextBox1.Text.Split("&"c)

ComboBox1.Items.Clear()
 
       
For As Integer 0 To DoseArray.GetUpperBound(0)

 
  ComboBox1.Items.Add(DoseArray(i))

Next 


و هكذا