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

كود الاضافة بحاجة الى بعض التعديل - LINQ

بدأه kafi في 2 أغسطس 2013 · 20 رد · 883 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

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

 

هذه اول محاولة لي لاستخدام تقنية LINQ

 

قمت بانشاء جدول بسيط عبارة عن اسماء المواد مؤلف من ( اسم المادة - سعر الشراء - سعر المبيع - ملاحظات )

 

ومن ثم وضعت الكود اللازم لانشاء قاعدة البيانات

 

ومن ثم تم كتابة اول كود متعلق باضافة اسم مادة

Dim beda As New DB.Beda()
        beda.Beda_Name = txt_beda.Text
        beda.Shra_Price = txt_shra.Text
        beda.Mabee_Price = txt_Mabee.Text
        beda.Beda_Note = txt_Note.Text

        DB.Bedas.InsertAllOnSubmit(beda)
        DB.SubmitChanges()

        MessageBox.Show("تم إضافة المستخدم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

        txt_beda.Text = ""
        txt_Mabee.Text = ""
        txt_shra.Text = ""
        txt_Note.Text = ""

الا ان احد اسطر الكود فيه خطأ

 

ارجو تعديل المثال المرفق، والاشارة الى مكمن الخطأ

 

والف الف شكر

 

Material_LINQ.rar

#2

من أجل إدراج سجل واحد استخدم المنهج

InsertOnSubmit

 

أما الذي تستخدمه الآن

InsertAllOnSubmit

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

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#3

الف شكر

اخي ابو احمد على اجابتك

 

زال الخطأ

 

اخي ابو احمد

وضعت كود حتى يتم املاء الداتا جريد فيو، من اجل رؤية ما تم ادخاله

  Private Sub GetData()
        Try
            Dim x = From d In DB.Beda
                      Select d


            Dim bsn As New BindingSource()
            bsn.DataSource = x


            ' استعراض البيانات

            DGV.DataSource = Nothing
            DGV.Columns.Clear()
            DGV.AutoGenerateColumns = False
            DGV.ColumnCount = 4
            DGV.DataSource = bsn
            DGV.Columns(0).HeaderText = "اســـم المـــــادة"
            DGV.Columns(1).HeaderText = "ســعر الشــراء"
            DGV.Columns(2).HeaderText = "ســـعر المبيــع"
            DGV.Columns(3).HeaderText = "ملاحظــــات"

            DGV.Columns(0).DataPropertyName = "Beda_Name"
            DGV.Columns(1).DataPropertyName = "shra_Price"
            DGV.Columns(2).DataPropertyName = "Mabee_Price"
            DGV.Columns(3).DataPropertyName = "Beda_Note"

        Catch
        End Try
    End Sub


    Private Sub Beda_List_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        GetData()
    End Sub
End Class

الا ان هناك خطأ

 

ارجو ارشادي الى مكمن الخطأ

والف الف شكر

 

Material_LINQ A.rar

#4

أنت تستخدم الكلاس مباشرة

والصحيح أن تنشيء منه كائن ثم تستخدمه

 

يعني استبدل أول سطرين بالتالي

            Dim xDB As New DB.Data_BedaDataContext
            Dim beda = From d In xDB.Bedas
                      Select d
1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#5

الف شكر

اخي ابو احمد المبرمج على تواصلك معي

 

الحمد لله، الى حد الآن تعلمت الاضافة وكيفية اظهار البيانات بالداتا جريد فيو

 

قمت بتصميم شاشة حذف، وكتبت الكود  التالي

 Private Sub btn_Delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Delete.Click
        Dim DeleteData As New DB.Data_BedaDataContext

        Dim x = From Beda In DeleteData.Bedas _
                    Where Beda.Beda_id = txt_beda_id.Text

        DeleteData.Bedas.DeleteOnSubmit(x)


        Try
            DeleteData.SubmitChanges()

            MsgBox("Data Deleted")
        Catch
            ' Handle exception.
        End Try

    End Sub
End Class

الا ان هناك رسالة خطأ تظهر

 

ارجو من فضلك مساعدتي في اصلاح الكود، والاشارة الى مكمن الخطأ

بارك الله فيك

Material_LINQ b.rar

post-32358-0-69046800-1375552610_thumb.j

تم تعديل هذه المشاركة بواسطة kafi في 3 أغسطس 2013 في 20:57

#6

أخي أنت لم تكمل الاستفسار

يجب أن تضع بعد سطر where

عبارة select Beda

لكي يختار السجل أو مجموعة السجلات التي تحقق الشرط

وبما أن عملية الحذف تكون لسجل واحد في كل مرة

فيجب وضعها ضمن حلقة كائنية

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

وعليه لا يجوز أن تضع x  في تعليمة الحذف لأنه تنفع في حالة وتولد خطأ في الحالتين الباقيتين

أما إذا وضعتها ضمن حلقة ForEach

حينها تضمن أن سينفذ الحذف من أجل كل سجل على حدا

وفي حال لا يوجد سجلات فلن يدخل الحلقة أصلا

        Dim DeleteData As New DB.Data_BedaDataContext

        Dim x = From Beda In DeleteData.Bedas _
                    Where Beda.Beda_id = txt_beda_id.Text
                    Select Beda

        For Each item In x
            DeleteData.Bedas.DeleteOnSubmit(item)
        Next

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#7

السلام عليكم

شكرا اخي ابو احمد المبرمج على تواصلك معي

 

صادفت مشكلة بادخال القيم، تتمثل في حال قام المستثمر بادخال اسم المادة دون القيام بادخال قيم في خانة سعر الشراء او في خانة سعر المبيع، عندئد لا يتم حفظ السجل

 

اي ان المستخدم مجبر على ادخال القيم في خانة سعر الشراء وسعر المبيع حتى يتم قبول ادخال السجل، مع ملاحظة انني وضعت لحقل سعر الشراء ولحقل سعر المبيع الخاصية Nullable= true

 

حاولت الالتفاف على الموضوع، بفحص قيمة حقل سعر الشراء او سعر المبيع، ووضعت الكود التالي

'.Mabee_Price = IIf(txt_Mabee.Text = "", System.DBNull.Value, txt_Mabee.Text)
                '.Shra_Price = IIf(txt_shra.Text = "", System.DBNull.Value, txt_shra.Text)

الا ان الامر لم ينجح، واصبح البرنامج يجمد.

 

وفيما يلي كود الادخال كاملا

        Try
            Dim Tabl As DB.Beda = New DB.Beda

            With Tabl
                .Beda_Name = txt_beda.Text
                .Beda_Note = txt_Note.Text
                '.Mabee_Price = IIf(txt_Mabee.Text = "", System.DBNull.Value, txt_Mabee.Text)
                '.Shra_Price = IIf(txt_shra.Text = "", System.DBNull.Value, txt_shra.Text)
                .Mabee_Price = txt_Mabee.Text
                .Shra_Price = txt_shra.Text

            End With

            _AddingNew(Tabl)
            MessageBox.Show("Saved Successfull >>>>> ", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Broom()

        Catch ex As Exception

        End Try

الا ان البرنامج اصبح يجمد في حال استخدام عبارة IIf الشرطية مع حقل سعر الشراء وسعر المبيع

 

ارجو تصويب كود الادخال، بحيث الا نجبر المستثمر على ادخال سعر الشراء او سعر المبيع

 

والف شكر

Material_LINQ 6.rar

تم تعديل هذه المشاركة بواسطة kafi في 5 أغسطس 2013 في 01:12

#8

خانة سعر الشراء والمبيع هي قيم رقمية صحيحة

ولا يمكن إعطائها قيمة نصية فراغ ""

أي يجب فحص قيمة التيكست ومحاولة ترجمته إلى رقم صحيح وفي حال كان فارغ تعطي صفر

 

فكونك وضعت خاصية Nullable=True هذا يعني إما لا شيء وإما قيمة عددية كرقم صحيح من النوع Integer

ولا يجوز أن تضع فيه قيمة التيكست مباشرة سواء كانت فارغة أو تحوي رقم لأن التيكست ما يحويه سلسلة رمزية وليست رقم صحيح

                Dim mabee As Integer
                If Integer.TryParse(txt_Mabee.Text, mabee) Then
                    .Mabee_Price = mabee
                Else
                    .Mabee_Price = 0
                End If

ونفس الأمر للشراء

 

في حال أردت أن تكون قيمة الخانة Null  فاستبدل ال 0 ب Null

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

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 6 أغسطس 2013 في 20:48

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#9

الف شكر اخي

ابو احمد المبرمج

 

على اجابتك الكريمة، والتي فيها شرح تفصيلي

 

اخي الكريم

 

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

Dim mabee As Integer
If Integer.TryParse(txt_Mabee.Text, mabee) Then
.Mabee_Price = mabee
Else
.Mabee_Price = 0
End If

ولكــــــــــــــــــــــــن

للاسف، في حال اردت اسناد قيمة فارغة للحقل وليس قيمة صفر،

Dim mabee As Integer
If Integer.TryParse(txt_Mabee.Text, mabee) Then
.Mabee_Price = mabee
Else
.Mabee_Price = Null
End If

الا ان تعبير Null تم رفضه، واعطى ارشاد باستخدام

System.DBNull

وايضا تم رفضه

 

ارجو توجيهي الى كيفية تخزين اسم المادة بدون ان اسند قيمة الصفر الى حقلى سعر المبيع او حقل سعر الشراء ( في حال كانا فارغين)

 

والف شكر

Material_LINQ8.rar

post-32358-0-74764700-1375821458_thumb.j

تم تعديل هذه المشاركة بواسطة kafi في 6 أغسطس 2013 في 23:38

#10

ماذا لو تجاهلته بالمرة

أي لا تضع فيه أي قيمة

هل يظهر خطأ أيضا

 

وفي حال ظهر صور لي رسالة الخطأ وضعها هنا

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#11

اخي ابو احمد

 

كتبت مايلي 

 If Integer.TryParse(txt_Mabee.Text, mabee) Then
                    .Mabee_Price = mabee
                Else
                    .Mabee_Price = ""
                End If

الا ان الكود اصبح يجمد !!!!!!!!!!!!!!

#12

لا قصد الغي السطر(قسم Else) نهائي ولا تعطيه قيمة

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#13

كل عام وانتم بخير

 

اخي ابو احمد
 

اقتباس

 

لا قصد الغي السطر(قسم Else) نهائي ولا تعطيه قيمة

 

 

تم اخي الغاء السطر قسم Else  نهائي ولم يتم اعطاءه قيمة

 

مازالت المشكلة هي ذاتها

 

الف شكر على استمراك بالتواصل معي

 

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

post-32358-0-22491600-1375897306_thumb.j

#14

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

فلو استطعت أن ترفقها مع البرنامج أو ضع لنا السكربت لإنشاءها والتجريب

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#15

شكرا اخي ابو احمد

على تواصلك

 

اقتباس

 

فلو استطعت أن ترفقها مع البرنامج أو ضع لنا السكربت لإنشاءها والتجريب

 

 

وانا كنت متسغرب طوال مدة المشاركة، كيف انك لم تجرب المثال، حيث ارسلت المثال اكثر من مرة

معلش اصلي مبتدى بالموضوع، وفي المرات القادمة ان شاء الله سوف اقوم بارسال ملف الداتا

 

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

 

والف الف شكر

 

وكل عام وانت بخير

 

 

 

 

Data_Beda.rar

#16

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

 

أما الآن أصبحت المشكلة متعلة بقاعدة البيانات نفسها ولكي أستطيع التتبع

 

المشكلة لديك في قسم الاستفسار ضمن دالة _AddingNew

والذي يعيد القيمة Single

وهذا خطأ لأنه في بعض الأحيان تكون النتيجة لا تحوي سجلات وبالتالي الدالة  ستولد خطأ

والأصح أن تستخدم FirstOrDefault بدلا منها لإنها ستعيد أول سجل أو الحالة الافتراضية وهي Null

ومن جهة أخرى لا داعي للاستفسار والمقارنة وإعادة القيمة

فالتي مررتها هي نفسها التي ستعود

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

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#17

السلام عليكم

 

اخي ابو احمد تم تعديل الاكواد، بناء على توجيهاتك، على النحو التالي

Public Sub _AddingNew(ByVal Tab As DB.Beda)
        db.Bedas.InsertOnSubmit(Tab)
        db.SubmitChanges()
    End Sub

وكذلك

Private Sub btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Save.Click

        Dim mabee, shra As Integer


        Try
            Dim Tabl As DB.Beda = New DB.Beda

            With Tabl
                .Beda_Name = txt_beda.Text
                .Beda_Note = txt_Note.Text

                If Integer.TryParse(txt_Mabee.Text, mabee) Then
                    .Mabee_Price = mabee
                Else
                    .Mabee_Price = ""
                End If

                If Integer.TryParse(txt_shra.Text, shra) Then
                    .Shra_Price = shra
                Else
                    .Shra_Price = ""
                End If

            End With

            _AddingNew(Tabl)
            MessageBox.Show("Saved Successfull >>>>> ", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Broom()

        Catch ex As Exception

        End Try
    End Sub

وكذلك

 Sub Broom()
        For Each c As Control In Me.Controls
            If TypeOf c Is TextBox Then
                c.Text = vbNullString
            End If
        Next
    End Sub

الا ان المشكلة مازالت موجودة، وهي عدم القدرة على جعل حقول سعر الشراء او سعر المبيع عبارة عن قيم فارغة تسجل في قاعدة البيانات عندما يتم حفظ السجل

في حال لم يقم المستثمر بوضع قيم فيها

 

هل الحل الوحيد لهذه المشكلة، هو بتخزين قيم صفرية.

 

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

 

 

 

Material_LINQ9.rar

#18

قم بإزالة قسم Else من الشراء لأن وضع قيمة نصية في حقل رقمي غير مسموح ولهذا يبقى Null

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

                If Integer.TryParse(txt_Mabee.Text, mabee) Then
                    .Mabee_Price = mabee
                Else
                    .Mabee_Price = 0
                End If

                If Integer.TryParse(txt_shra.Text, shra) Then
                    .Shra_Price = shra
                End If

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#19

الف شكر
اخي ابو احمد المبرمج
على صبرك علي، وعلى تواصلك معي


 


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

و تفاجئت بان كلا الحقلين، خصائهما متماثلة مائة بالمائة

ماهي اسم الخاصية العائدة لحقل المبيع حتى اقوم بتعديلها، واجعلها تقبل NULL ؟؟؟؟؟

والف شكر


 

post-32358-0-14559300-1376121779_thumb.p

post-32358-0-12537300-1376121818_thumb.p

تم تعديل هذه المشاركة بواسطة kafi في 10 أغسطس 2013 في 11:13

#20

ليس من هنا وإنما من تصميم الجدول الأساسي في ملف قاعدة البانات

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#21

الف الف شكر

اخي ابو احمد المبرمج

على تصويبك لاخطائي

الحمد لله نجحت في تغيير خاصية حقل المبيع

واصبحت لدي القدرة على تخزين اسم المادة

بدون الاضطرار الى تخزين قيم صفرية في حقل المبيع

او حقل الشراء

بارك الله فيك

ما قصرت

post-32358-0-25301100-1376150357_thumb.j

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

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

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

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

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