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

سؤال:مشكلة في ربط برنامجي بالأكسس

مغلق
بدأه farah_979 في 26 سبتمبر 2005 · 47 رد · 4,009 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

Imports System.Drawing.Drawing2D
Imports System.Data.OleDb
Public Class Form1
    Inherits System.Windows.Forms.Form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.BackgroundImage = getgraphicsobject(Me.Width, Me.Height)
        Dim n As New OleDbCommand()
        Dim r As OleDbDataReader
        n.Connection = OleDbConnection1
        n.CommandText = "select*from Employee"
        OleDbConnection1.Open()
        r = n.ExecuteReader()
        If r.Read Then
            txtID.Text = r.GetString(0)
            txtName.Text = r.GetString(1)
            txtPhone.Text = r.GetString(2)
            txtSalary.Text = r.GetValue(3)
        End If
        OleDbConnection1.Close()
        r.Close()
    End Sub
    Public Function getgraphicsobject(ByVal w As Int16, ByVal h As Int16) As Image
        Dim bmp As Bitmap = New Bitmap(w, h)
        Dim g As Graphics = Graphics.FromImage(bmp)
        Dim r As New RectangleF(0, 0, w, h)
        Dim startcolor As Color = Color.LightBlue
        Dim endcolor As Color = Color.DarkBlue
        Dim lgbrush As New System.Drawing.Drawing2D.LinearGradientBrush(r, startcolor, endcolor, LinearGradientMode.ForwardDiagonal)
        g.FillRectangle(lgbrush, New Rectangle(0, 0, w, h))
        Return bmp
    End Function

    Private Sub btnclear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnclear.Click
        clear()
    End Sub
    Private Sub clear()
        txtID.Clear()
        txtName.Clear()
        txtPhone.Clear()
        txtSalary.Clear()
    End Sub

    Private Sub btnsearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsearch.Click
        Dim sercom As New OleDbCommand()
        Dim DR As OleDbDataReader
        sercom.Connection = OleDbConnection1
        sercom.CommandText = "select*from Employee where(ID=" & txtID.Text & ")"
        OleDbConnection1.Open()
       DR = sercom.ExecuteReader()
        If DR.Read Then
            txtID.Text = DR.GetString(0)
            txtName.Text = DR.GetString(1)
            txtPhone.Text = DR.GetString(2)
            txtSalary.TabIndex = DR.GetValue(3)
        Else
            MsgBox("لايوجد موظف يحمل هذا الرقم")
        End If
        OleDbConnection1.Close()
        DR.Close()

    End Sub

    Private Sub btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnadd.Click
        Dim addcom As New OleDbCommand()
        addcom.CommandText = "insert into Employee(ID,Name,Phon,Salary)values(" & txtID.Text & "," & txtName.Text & "," & txtPhone.Text & "," & txtSalary.Text & ")"
        addcom.Connection = OleDbConnection1
        OleDbConnection1.Open()
     addcom.ExecuteNonQuery()
        OleDbConnection1.Close()
        MsgBox("تم اضافة الموظف بنجاح")
        clear()
    End Sub

    Private Sub btndel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndel.Click
        Dim delcom As New OleDbCommand()
        delcom.CommandText = "delete from Employee where ID=" & txtID.Text
        delcom.Connection = OleDbConnection1
        OleDbConnection1.Open()
        delcom.ExecuteNonQuery()
        OleDbConnection1.Close()
        MsgBox("تم حذف سجل الموظف بنجاح")
        clear()
    End Sub

    Private Sub btnupdat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnupdat.Click
        Dim updatecom As New OleDbCommand()
        updatecom.CommandText = "update Employee set ID=" & txtID.Text & ",Name=" & txtName.Text & ",Phone=" & txtPhone.Text & ",Salary=" & txtSalary.Text
        OleDbConnection1.Open()
        updatecom.ExecuteNonQuery()
        OleDbConnection1.Close()
        MsgBox("تم تعديل سجل الموظف")
        clear()
    End Sub

    Private Sub btnend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnend.Click
        End
    End Sub
End Class

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

ويظهر الخطا في الامرين

DR = sercom.ExecuteReader()

addcom.ExecuteNonQuery()

ملاحظه:

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

تم تعديل هذه المشاركة بواسطة crazy-man في 26 سبتمبر 2005 في 20:52

#2

الأخت الكريمة

هل تستخدمين الربط عن طريق المعالج (wizard)؟؟

لاني لم اجد اوامر الربط ولا خصائصه؟

واليكي مثال

dim Conn As New OleDb.OleDbConnection
    ' declare the connection string 
    dim ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source =" & Application.StartupPath & "\DatabaseNameHere.mdb;" & _
                  "Persist Security Info=False"
' open connection
 Conn.ConnectionString = ConnStr
Conn.Open()

طبعا على افتراض ان قاعدة البيانات موجودة في مجلد bin داخل المشروع

وللمعلومية يفضل ان تكون اوامر الاتصال بقاعدة البيانات في الـmodule لكي يسهل استدعائها.

تم تعديل هذه المشاركة بواسطة Romantic_touch في 26 سبتمبر 2005 في 20:43

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#3

السلام عليكم

نعم قمت بعمل الاتصال بواسطة المعالج وربطة الحقل مع الـ TextBox الذي يقابله عن طريق الخاصية DataBindings واختيار الحقل المناسب

ولكن لم ينجح الامر

#4

بصراحة لم استوعب الفكرة ولكن اتمنى لو ترسلي الملف كامل لكي اتمكن من فهم ماترمين اليه

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#5

اخي الكريم

هذا الملف كامل

p61.rar

#6

السلام عليكم

أخي الكريم , بصراحة لديك كم هائل من المشاكل

أولاً قاعدة البيانات, يفترض أن تكون في المجلد bin folder

ثانياً اسماء العناصر عندك oledbConnection يفترض ان يكون cnn كاسم متعارف عليه ووو..

ثالثاً اسماء عناصر الاستخدام كالازرار مثلاً فهي btnEnd وليس btnend فهذا غير مقروء.

رابعاً زر الاضافة يفترض أن يقوم بإضافة صف في الـ DataSet وليس في DataBase

لان هذا شأن زر التحديث وليس شأن زر الاضافة .

خامساً لم أجد ما يعرف بـ currencyManager أو BindingManagerBase لأجل الابحار في الـ DataSet

ولا حتى حتى DataRow كبديل عن الابحار , وفقاً لنمط المشروع

سادساً كأفضلية يفترض أن يتم تعريف قيم الاتصال عبر الكود وليس عبر الـ Wizard على العموم

بعد وضع قاعدة البيانات في المجلد, قم بتعديل النصوص البرمجية التالية في حدث التحميل Form Load Event بهذا الشكل

 Me.OleDbConnection1.ConnectionString = _
                   "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                    Application.StartupPath & "\compnyDB.mdb"

        Me.BackgroundImage = getgraphicsobject(Me.Width, Me.Height)
        Dim n As New OleDbCommand()
        Dim r As OleDbDataReader
        n.Connection = OleDbConnection1
        n.CommandText = "select*from Employee"
        OleDbConnection1.Open()
        r = n.ExecuteReader()
        If r.Read Then
            txtID.Text = r.GetString(0)
            txtName.Text = r.GetString(1)
            txtPhone.Text = r.GetString(2)
            txtSalary.Text = r.GetValue(3)
        End If
        OleDbConnection1.Close()
        r.Close()

ثم في البحث يفترض أن تستخدم علامة التنصيص المفردة ' لانك تتعامل مع عامود نصي بهذا الشكل

  sercom.CommandText = "SELECT * FROM Employee WHERE ID='" & txtID.Text & "'"

تم إصلاح عملية البحث ,,, لكن تم تحويل المشروع وفقاً للنمطين 1.0 و 1.1

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

بقواعد البيانات,......... بالتوفيق إن شاء الله.

company.zip

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

#7

كما يقول المثل

اذا حضر الماء بطل التيمم :)

إن شاء الله يكون الاخ الخبير الغملاسي صال وجال وأوفى لك المكيال

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#8

السلام عليكم

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

يالله شد حيلك و توكل على الله.

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

#9

أبشر غالي والطلب رخيص

قيد التحميل والتعديل في اللبس

ولو اني طلبت منك ذا ت مرة ان توضح لي شي ولم تفعل :(

بخصوص استخدام ملف dataset.xsd مالفائدة منه ومن هذا القبيل ولم تجبني حتى الان !!!!

سوف اراجع وارد لك خبر

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#10

السلام عليكم

عزيزي الـ DataSet عبارة عن نسخة مصغرة لـ Database أما DataSet.xsd فهي وثيقة XML يتم فيها تعريف بيانات الـDataSet وهي تُعرف ب بيانات عن البيانات

Data about data كذلك تعرف بـ MetaData اي مثلاً انواع الحقول و المفاتيح و الـ Indexes و كل ما يتعلق بشكل الـ Database الاصلية فهي مخطط قاعدة البيانات الاصلية Schema of DataSource

وعلى فكرة يا صاحبي ان إنشأ DataSet.xsd أفضل بكثير من إنشأ الـ DataSet بدون هذا الملف, لما له من افضلية في سرعة المعالجة و جلب القيم.

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

مثلاً عندما نستنسخ عنصر من الـ DataSet يكون عادة بالاسم DataSet1

الان بعد كتابة الاسم DataSet1 في اي حدث, ستجد كل الجداول و الاعمدة

و العلاقات متوفرة و مشاهدة, بينما لا تتوفر تلك الميزة عند الربط أثناء التشغيل ,

وجود الـ DataSet.XSD يعرف بـ Bounded DataSet وهي أحكم وأفضل الطرق و اسلمها من حيث

ما يعرف بـ Disconnected Environment المحيط المنفصل ( اي إتصل ثم اجلب البيانات ثم افصل الاتصال) هذا بشكل مختصر و معتصر عن الملف XSD.

يتم إنشاء ملف ذو إمتداد XSD سواءً عبر الاتصال عن طريق المساعدة Wizard

كإدراج عنصر DataAdapter من قائمة الادوات Tool Box أو عن طريق الامر التالي

Me.Ds1.WriteXmlSchema("Dataset.xsd")

و الاول هو الافضل لتلاشي الاخطاء .

بالتوفيق إن شاء الله.

تم تعديل هذه المشاركة بواسطة الغملاسي في 30 سبتمبر 2005 في 13:41

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

#11

شكرا للجميع على المساعده

وارجوا ان تتحملوني فانا مبتدئه يعني لساتني مبرمجه صغير ه توها تتعلم :rolleyes:

#12

الف شكر الاخ غملاسي

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

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

وإن شاء الله ناخذ بيدك ونقفزك معانا بس لو انك متينه الله يعين اللي بعدك راح يلاقي الطريق كلها حفر هههههههههه

امزح معليش لو فيه مجاغة :)

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#13

انا استفدت كثير لما دخلت المنتدى لانه رائع بالفعل يمكن لان عندي ادمان برمجه :D

إن شاء الله اقفز معاكم واصير مبرمجه ناجحه .... وبدون ما اترك حفر وراي :)

#14

الأخ غملاسي ممكن اذا تكرمت تشرح كيف يمكن انشاء dataset.xsd يدويا ؟؟

لاني حاولت ان انشئه ولكن اعتقد احتاج الى تغير كود كتير ولا ادري اذا كانت هيه هذه الطريقة الصحيحة

حيث اني باستخدام الويزرد واجهت صعوبة في ربط dataadabter مع جملة الconnectionString التي قد عملتها في ملف الـmodule

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#15

السلام عليكم

أنت في الطريق الصحيح, فقط أزل قيمة الاتصال من العنصر وفي أعلى النموذج اسند القيمة التي في الـ Module للعنصر الجديد بهذا الشكل

cnn.ConnectionString = modlcnn

بالتوفيق.

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

#16

اخ غملاسي هل هذي الطريقة اي استخدما ملف xsd هيه احد انواع مايسمى بالاتصال المنفصل؟؟

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

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#17

السلام عليكم

متى ماستخدمت العنصر DataSet فإنت تستخدم تقنية الاتصال المنفصل, سواءً كانت Bounded DataSet

اي مع الوثيقة XSD أو Unbounded DataSet اي تعريف الـ DataSet عبر الكود أو لنقل في وقت التشغيل .

والله أعلم.

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

#18

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

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

وياليت توضح لي الفرق بين انشاء الاتصال بواسطه المعالج و بواسطه الـ code من حيث المميزات والعيوب

#19

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

لنفرض ان لديك جدولين الأول به رقم المستخدم التسلسلي (primary key او مفتاح اساسي) و اسمه ورقم جنسيته ورقم الجنسية هذا مرتبط بجدول الجنسيات الذي فيه التالي الرقم التسلسلي للجنسية(primary key او مفتاح اساسي) واسم الجسنية

الان لنفترض اسماء الجدا,ل كالتالي

users - Nationality

اسماء حقول جدول الuser

(UserID - UserName - UserNationality)

اسماء حقول جدول الـnationality

(NatioID - NationName)

جملة الربط ستكون كالتالي

select UserID, UserName, NationName from  
users  INNER JOIN nationality 
ON users.UserNationality = nationality.NatioID

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

وشرح جملة الSQL كالتالي

اولا اختار الحقول التي اريد ان استخدمها لاظهار المعلومات وهي التي مابين جملة select و from

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

ثم اكتب from اي من الجداول واكتب كلمة Inner join وهي لتربط الجدولين مع بعض بشرط وهو مايأتي بعد كلمة ON اي بمعنى اربط الجدولين ببعض واحضر البيانات عندما يكون الشرط ان العمود الفلاني من الجدول الأول يساوي العمود الفلاني من الجدول الثاني وهنا شرطنا هو ON users.UserNationality = nationality.NatioID

طبعا ايضا يمكن اضافة جملة where ومابعدها طبيعي كأي جملة اخرى

وتفسير الجملة بالعامية يعني عندما تحضر البيانات من الجدول user احضر اسم الجنسية من الجدول nationality واعرض اسم الجنسية الذي رقمه يساوي الرقم الموجود في الصف في جدول ال user

إن شاء الله ياارب اكون شرحتها بطريقة جيدة

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#20

كيف راح اعرضها على الTextBox في الفيجول كل معلومة لوحد وليس باستخدام Data Grid

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

ورحت الفيجول وسويت اتصال وربطة TextBox من الخصائص مع اسماء الصفوف في الجدول عن طريق DataBindings==> Text ثم اسم الحقل

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

ExecuteNonQuery ولا اعلم لماذا

مرفق المشروع بطريقة الجدول الواحد

وبطريقة الجدولين

ملاحظة

تم عمل المشروع باصدار 2002 ماعندي 2003 :D

تم تعديل هذه المشاركة بواسطة farah_979 في 7 أكتوبر 2005 في 08:31

#21

البرنامج و الاسئلة

#22

البرنامج و الاسئلة

hnd.rar

hnd.rar

#23

باستخدام جدول واحد

ibenseana.rar

#24

باستخدام جدولين

hospital.rar

#25

الاخت فرحة

يعني مدرسة معهد العالمية تستخدم الويزرد؟؟؟؟

بصراحة انتي عندك نقاط كثير اتمنى ان تعمليها قبل اي شي

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

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

ثالثا اعملي جملة

try

catch

end try

فهذه الجملة تعطيك رسالة خطأ واضحة ومفهومة

واجعلي كل الأوامر بين try ... catch

كما يلي

Try

sConn()

' here your code

Catch ex As OleDb.OleDbException

MessageBox.Show(ex.Message)

End Try

Conn.Close()

والأفضل دائما ان تكون جملة اغلاق اتصال قاعدة البيانات خاج الtry اي بعد end try

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

لنفرض ان الاسم الافتراضي للاتصال عن طريق الويزرد هو oledbconnection1

اكتب الاتي في الحدث load

oledbconnection1.connectionstring="Provider = Microsoft.Jet.OLEDB.4.0;" & _

"Data Source =Application.StartupPath & "\databasename.mdb";" & _

"Persist Security Info=False"

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

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

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

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

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