تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] ربط قاعدة بيانات أكسس مع Combobox
#1
باختصار أصمم برنامج لتسجيل الأدوية الطبية بهذا الشكل



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



وضعت كود يجعل محتويات العمود المسمى Analgesics يظهر فى combobox المسمى Name
أريد كود لجعل النص داخل العمود الثانى يظهر بالترتيب كل نص يفصله (-) يظهر ك item منفرد فى combobox المسمى Dose
ويظهر النص فقط الذى يقابله تماماً فى الموضع من العمود الثالث داخل ال combobox المسمى route
الرد }}
تم الشكر بواسطة:
#2
هل ما تقوم به هو عرض البيانات فقط فى هذا الفورم
ام انه يسقوم بعد ذلك باتمام حفظ البيانات طبقاً لما تم اختياره

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

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

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

فكرة ان يتم توزيع 50-75-100 الى ان يكون كل رقم لك فى سطر الامر سهل 
وبسيط جداً ولا يوجد به اى تعقيد
ولكن ما ستواجه انت هو عملية حفظ البيانات بالنهاية اذا كانت الامر الحفظ بنفس الجدول
قد تصل بكتابة العديد من الاكواد حتى تقوم بالحفظ وما شبه

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

فاليك ما تريده من كود
كود :
       Dim ss As String = "50-75-100"
       Dim kk As String() = ss.Split("-")
       For ii As Integer = 0 To kk.Count - 1
           ComboBox1.Items.Add(kk(ii))
       Next

كل ما عليك حذف سطر 
كود :
Dim ss As String = "50-75-100"

واستبدال الجملة 
كود :
ss.Split("-")

بنتائج جلب بيانات الـ Dose ليصبح كمثال
كود :
DT(0)("Doses").Split("-")


اتمنى ان يكون الكود بسيط لك
ويمكنك التعامل معه بكل سهولة

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
تم الشكر بواسطة: Done , Done , Doctor GME , kebboud
#3
أخى العزيز أشكرك أولاً على الرد ومحاولة المساعدة
البرنامج متعدد المراحل وهذه فقط مرحلة لم أستطع حلها
يوجد جزء آخر منه خاص بقياس الوزن والجرعة ولكن هذا الجزء مثل قاموس
يستحضر أسماء الأدوية المتداولة سوقياً وجرعاتها وبالتالى لن يتم التعديل فيه أو الكتابة عليه
إلا من خلال قاعدة البيانات وهذا أمر سهل
واجهت مشكلة فى تطبيق الكود للأسف ولهذا سأحاول التوضيح لك أكثر
هناك 3 من combobox كما فى الصورة

لنفترض أن أسمائهم بالترتيب Combobox1,Combobox2,Combobox3
وهناك 3 أعمدة فى قاعدة البيانات كما فى الصورة

أسماء الأدوية ستكون مسجلة فى combobox1
أريد من البرنامج أن يطابق المكتوب فى combobox1 بقاعدة البيانات
ويستحضر ما يقابله من العمود dose ويكتبه فى combobox2 على أن يفصل بين
كل جرعة وأخرى (-) أى كل item داخل ال combobox مفصول ب (-) فى قاعدة البيانات
ثم الجزء الأخير
الجرعة التى يتم اختيارها فى combobox2 يتم استحضار ما يقابلها فى المكان
وإضافته هو فقط داخل combobox3
وبهذا أكون قد أوضحت فائدة البرنامج هو عدم الخلط عل الطبيب فقط فى كتابة جرعة دواء غير متاحه فى السوق
أى مثلاً العقار الفلانى يكون متاح منه جرعات 50 و 60 و 70 وطريقى تعاطى كل واحدة ترافقها
وأكون شاكراً لو كان لك أى آراء فى وضع قاعدة بيانات أفضل
الرد }}
تم الشكر بواسطة:
#4
(26-07-18, 10:38 PM)Doctor GME كتب : أخى العزيز أشكرك أولاً على الرد ومحاولة المساعدة
البرنامج متعدد المراحل وهذه فقط مرحلة لم أستطع حلها
يوجد جزء آخر منه خاص بقياس الوزن والجرعة ولكن هذا الجزء مثل قاموس
يستحضر أسماء الأدوية المتداولة سوقياً وجرعاتها وبالتالى لن يتم التعديل فيه أو الكتابة عليه
إلا من خلال قاعدة البيانات وهذا أمر سهل
واجهت مشكلة فى تطبيق الكود للأسف ولهذا سأحاول التوضيح لك أكثر
هناك 3 من combobox كما فى الصورة

لنفترض أن أسمائهم بالترتيب Combobox1,Combobox2,Combobox3
وهناك 3 أعمدة فى قاعدة البيانات كما فى الصورة

أسماء الأدوية ستكون مسجلة فى combobox1
أريد من البرنامج أن يطابق المكتوب فى combobox1 بقاعدة البيانات
ويستحضر ما يقابله من العمود dose ويكتبه فى combobox2 على أن يفصل بين
كل جرعة وأخرى (-) أى كل item داخل ال combobox مفصول ب (-) فى قاعدة البيانات
ثم الجزء الأخير
الجرعة التى يتم اختيارها فى combobox2 يتم استحضار ما يقابلها فى المكان
وإضافته هو فقط داخل combobox3
وبهذا أكون قد أوضحت فائدة البرنامج هو عدم الخلط عل الطبيب فقط فى كتابة جرعة دواء غير متاحه فى السوق
أى مثلاً العقار الفلانى يكون متاح منه جرعات 50 و 60 و 70 وطريقى تعاطى كل واحدة ترافقها
وأكون شاكراً لو كان لك أى آراء فى وضع قاعدة بيانات أفضل


لا عليك اخى Doctor GME


حتى اسهل الامر عليك اكتر وان تقوم استخدام الكود مباشراً
كا ما ساحتاج منك وضع السورس هنا او وضع كود الاستعلام الذى تستخدمه كاملاً

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

وكل ما ساقوم باضافته لك عن الكود السابق
هو كود الاستعلام عند تحديد اسم الدواء من combobox1


ليقوم بجلب بيانات كلاً من
dose - route
وتنفيذ الكود المدرج فى ردى السابق ليعرض النتائج فى كلاً من
combobox2 combobox3

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
تم الشكر بواسطة: Done , Done , kebboud
#5
شكراً جزيلاً لاهتمامك
هذه الواجهه الرئيسية



وهذه قاعدة البيانات



وكما تلاحظ الكود الذى وضعته فقط لإضافة قائمة أسماء نوعين من الأدوية
إلى combobox المسمى MedType
عندما يتم اختيار Analgesics مثلاً يظهر داخل combobox2 المسمى MedName
القائمة التى داخل قاعدة البيانات
يتبقى فقط ما يحدث عند اختيار دواء فى MedName أى ظهور جرعاته
داخل combobox3 المسمى MedDose كما سبق وشرحت لك
وأخيراً ما يحدث عند اختيار جرعة من MedDose وظهور فقط الطريقة المقابله لها (وليس كل الطرق)
فى آخر combobox والمسمى MedRoute

كود البرنامج

كود :
Imports System.Data.OleDb
Public Class Medication


   Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Medication.accdb")
   Dim cmd As New OleDbCommand
   Private Sub MedType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MedType.SelectedIndexChanged
       cnn.Open()
       cmd.Connection = cnn
       MedName.Items.Clear()

       If MedType.SelectedItem = ("Analgesics") Then

           cmd.CommandText = "select Analgesics from Analgesics"
           Dim dr As OleDbDataReader = cmd.ExecuteReader
           While dr.Read
               MedName.Items.Add(dr.Item(0))
           End While
           dr.Close()

       End If

       If MedType.SelectedItem = ("Antibiotics") Then

           cmd.CommandText = "select Antibiotics from Antibiotics"
           Dim dr As OleDbDataReader = cmd.ExecuteReader
           While dr.Read
               MedName.Items.Add(dr.Item(0))
           End While
           dr.Close()

       End If



   End Sub

   Private Sub MedName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MedName.SelectedIndexChanged



   End Sub
  Private Sub MedDose_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MedDose.SelectedIndexChanged

   End Sub

End Class
الرد }}
تم الشكر بواسطة:
#6
قم فقط باستبدال منطقة MedType_SelectedIndexChanged بالكود التالى
كود :
   Private Sub MedType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MedType.SelectedIndexChanged
       cnn.Open()
       cmd.Connection = cnn
       MedName.Items.Clear()

       If MedType.SelectedItem = ("Analgesics") Then

           cmd.CommandText = "select * from Analgesics"
           Dim dr As OleDbDataReader = cmd.ExecuteReader
           While dr.Read
               MedName.Items.Add(dr.Item(1))
           End While

           Dim doses As String = dr.Item(2)
           Dim dose As String() = doses.Split("-")
           For ii As Integer = 0 To dose.Count - 1
               ComboBox1.Items.Add(dose(ii))
           Next

           Dim routes As String = dr.Item(3)
           Dim route As String() = routes.Split("-")
           For ii As Integer = 0 To route.Count - 1
               ComboBox1.Items.Add(route(ii))
           Next

           dr.Close()

       End If

       If MedType.SelectedItem = ("Antibiotics") Then

           cmd.CommandText = "select * from Antibiotics"
           Dim dr As OleDbDataReader = cmd.ExecuteReader
           While dr.Read
               MedName.Items.Add(dr.Item(1))
           End While

           Dim doses As String = dr.Item(2)
           Dim dose As String() = doses.Split("-")
           For ii As Integer = 0 To dose.Count - 1
               ComboBox1.Items.Add(dose(ii))
           Next

           Dim routes As String = dr.Item(3)
           Dim route As String() = routes.Split("-")
           For ii As Integer = 0 To route.Count - 1
               ComboBox1.Items.Add(route(ii))
           Next

           dr.Close()

       End If



   End Sub

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

ملحوظة: بخصوص جدول (Analgesics) و (Antibiotics)
يجب ان يكون كلاهما ترتيبهم كما فى الصورة لديك وهو
0:ID
1:Ana/Ant 
2:Doses 
3:Routes

حيث ان التالى المقصود به عمود ( Antibiotics Analgesics ) وهو الـ Name
كود :
dr.Item(1)

حيث ان التالى المقصود به عمود ( Doses ) والمقصود به Dose
كود :
dr.Item(2)

حيث ان التالى المقصود به عمود ( Routes ) والمقصود به Route
كود :
dr.Item(3)

اتمنى الصورة كاملاً وضحت لك
والكود هنا سيقوم باخد نتائج الاولى فقط لكلا من Doses و Routes وسيقوم بعرضها
حيث ان المدخل الاول فارغ لم يقوم بعرض اى شئ وتم عمل الكود بنائاً على الصورة
فيجب ان كلا من الجداول يتشابه النتائج للمدخل الاول...

ولضمان عرض نتائج الجدول بترتيب تصاعدى حيث من A:Z
اجعل كود الاستعلام بدلاً من 
كود :
select * from Analgesics

اجعله
كود :
select * from Analgesics ORDER BY ID ASC

وطبق ذلك ايضاً فى الاستعلام الاخر..
اتمنى ان الصورة مكتملة لك ومبسطة

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
تم الشكر بواسطة: Doctor GME , kebboud
#7
للأسف لم يعمل
وهذا كود الخطأ



كما أننى حاولت مع الصيغتين
select * from Analgesics
select * from Analgesics ORDER BY ID ASC
ولم ينجح الأمر
وقمت بتعديل قاعدة البيانات ونسخ القيم داخل جميع الخانات حتى لا تكون هناك خانة فارغة



ومازال نفس الخطأ
كما أنك أسأت فهمى قليلاً فى التطبيق
فأنا أريد أن يمتلئ ال combobox الخاص بال Dose بعد أن يتم اختيار الدواء فى ال combobox الخاص بال name
ويظل ال combobox الخاص بال route فارغاً حتى يتم اختيار الجرعة من combobox ال Dose
وعندها عند الضغط عليه يظهر ال item الوحيد المقابل للجرعة التى تم اختيارها
أما الكود الذى وضعته فهو يملأ كل ال combobox فى وقت واحد
وشكراً لمجهودك ومثابرتك
الرد }}
تم الشكر بواسطة:
#8
(27-07-18, 06:18 AM)Doctor GME كتب : للأسف لم يعمل
وهذا كود الخطأ



كما أننى حاولت مع الصيغتين
select * from Analgesics
select * from Analgesics ORDER BY ID ASC
ولم ينجح الأمر
وقمت بتعديل قاعدة البيانات ونسخ القيم داخل جميع الخانات حتى لا تكون هناك خانة فارغة



ومازال نفس الخطأ
كما أنك أسأت فهمى قليلاً فى التطبيق
فأنا أريد أن يمتلئ ال combobox الخاص بال Dose بعد أن يتم اختيار الدواء فى ال combobox الخاص بال name
ويظل ال combobox الخاص بال route فارغاً حتى يتم اختيار الجرعة من combobox ال Dose
وعندها عند الضغط عليه يظهر ال item الوحيد المقابل للجرعة التى تم اختيارها
أما الكود الذى وضعته فهو يملأ كل ال combobox فى وقت واحد
وشكراً لمجهودك ومثابرتك

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

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
تم الشكر بواسطة:
#9
ها هو البرنامج كامل بقاعدة بياناته
https://files.fm/u/zkpu5qzt
واستخدمت صيغتين مختلفتين كما سبق وقلت ولكن نفس الخطأ يظهر
وقاعدة البيانات مرفقة فى مجلد debug
الرد }}
تم الشكر بواسطة:
#10
يبدو ان الموقع المستخدم يوجد به بعض الفيروسات
فبرنامج الحماية  يقوم بحظر الموقع عند اتمام التحميل

او قم برفق السورس بالمرفقات

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


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



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم