منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - نسخة قابلة للطباعة

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



كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - Emam emam - 22-04-22

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

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

المطلوب اضافة الكودين معا وفي حالة حدوث خطأ يتم الغاء العمليه ولا يتم اضافة الكودين
PHP كود :
Dim cmd As New SqlCommand
    Dim Trans 
As SqlTransaction


    Public Sub Insert_Sallaries
(ByVal EmpName As StringByVal Job As StringByVal NetSallary As Double)
 
             Dim cmd As New SqlCommand("Insert into Sallaries_Table (EmpName,Job,NetSallary)
                                   values (@EmpName,@Job,@NetSallary)"
connSQL)
 
       cmd.Parameters.Add("EmpName"SqlDbType.NVarChar).Value EmpName
        cmd
.Parameters.Add("Job"SqlDbType.NVarChar).Value Job
        cmd
.Parameters.Add("NetSallary"SqlDbType.Decimal).Value NetSallary
        cmd
.ExecuteNonQuery()
 
   End Sub


    Public Sub Insert_Employee
(ByVal Employee_Name As StringByVal Employee_Job As String)
 
              Dim cmd As New SqlCommand("Insert into Employee_Table (Employee_Name,Employee_Job)
                                   values (@Employee_Name,@Employee_Job)"
connSQL)
 
       cmd.Parameters.Add("Employee_Name"SqlDbType.NVarChar).Value Employee_Name
        cmd
.Parameters.Add("Employee_Job"SqlDbType.NVarChar).Value Employee_Job
        cmd
.ExecuteNonQuery()
 
   End Sub


    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        connSQL
.Open()
 
       Trans connSQL.BeginTransaction
        cmd
.Connection connSQL
        cmd
.Transaction Trans

        Insert_Employee
(TextBox1.TextTextBox2.Text)
 
       Insert_Sallaries(TextBox1.TextTextBox2.TextTextBox3.Text)

 
       Trans.Commit()
 
       connSQL.Close()
 
   End Sub 

ده الكود المستخدم ارجو من الاخوه التعديل عليه ولكم جزيل الشكر.


RE: كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - ابراهيم ايبو - 23-04-22

السلام عليكم ورحمة الله وبركاته
أخي الكريم إمام
انشأت لك مثال في قسم الاسئلة حول عملية الـ Transaction مع الاكسس
وستجد الشرح للاكواد
http://vb4arb.com/vb/showthread.php?tid=41236


RE: كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - Emam emam - 25-04-22

(23-04-22, 02:06 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
أخي الكريم إمام
انشأت لك مثال في قسم الاسئلة حول عملية الـ Transaction مع الاكسس
وستجد الشرح للاكواد
http://vb4arb.com/vb/showthread.php?tid=41236

الف شكر اخي ابراهيم
انا عاجز عن شكرك
بارك الله فيك وجعله الله في ميزان حسناتكم
الكود اشتغل تمام
ولكن اخي هل ينفع اعمل جملة ال Transaction علي كل كود اضافه لوحده 
انا جربتها ومنفعتش
ياريت لو تساعدني
وده الكود اللي انا جربت عليه 
PHP كود :
Public Sub insert_Employee_Table(Employee_Name As StringEmployee_Job As StringNetSallary As Double)
 
       Con.Open()
 
       Using Trans As OleDbTransaction Con.BeginTransaction
            Try
                Cmd 
= New OleDbCommand("insert into Employee_Table(Employee_Name,Employee_Job) Values(@Employee_Name,@Employee_Job)"Con)
 
               Cmd.Parameters.Add(New OleDbParameter("@Employee_Name"OleDbType.VarWChar)).Value Employee_Name
                Cmd
.Parameters.Add(New OleDbParameter("@Employee_Job"OleDbType.VarWChar)).Value Employee_Job
                Cmd
.Transaction Trans
                Cmd
.ExecuteNonQuery()
 
               Cmd.Parameters.Clear()
 
               Trans.Commit()
 
           Catch ex As Exception
                Trans
.Rollback()
 
               MessageBox.Show(ex.Message)
 
           End Try
 
       End Using
    End Sub

    Public Sub insert_Sallaries_Table
(Employee_Name As StringEmployee_Job As StringNetSallary As Double)
 
       Con.Open()
 
       Using Trans As OleDbTransaction Con.BeginTransaction
            Try
                Cmd 
= New OleDbCommand("insert into Sallaries_Table(EmpName,Job,NetSallary) Values(@EmpName,@Job,@NetSallary)"Con)
 
               Cmd.Parameters.Add(New OleDbParameter("@EmpName"OleDbType.VarWChar)).Value Txt_Employee_Name.Text
                Cmd
.Parameters.Add(New OleDbParameter("@Job"OleDbType.VarWChar)).Value Txt_Employee_Job.Text
                Cmd
.Parameters.Add(New OleDbParameter("@NetSallary"OleDbType.Numeric)).Value Convert.ToDouble(Txt_NetSallary.Text)
 
               Cmd.Transaction Trans
                Cmd
.ExecuteNonQuery()
 
               Trans.Commit()
 
           Catch ex As Exception
                Trans
.Rollback()
 
               MessageBox.Show(ex.Message)
 
           End Try
 
       End Using
    End Sub 



RE: كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - ابراهيم ايبو - 26-04-22

السلام عليكم ورحمة الله وبركاته
اخي الكريم امام
الغاية من جملة كود الـ  Transaction هو ربط تنفيذ اكثر من جملة حفظ او تعديل او حذف كلها اي ان يتحقق تنفيذ كل الاكواد بدون خطأ عندها يتم تنفيذ المطلوب على مستوى قاعدة البيانات وعند حذوث اي خطأ لاي سبب كان في احد الاكواد لن يتم تنقيذ اي كود على مستوى قاعدة البيانات حتى ولو كان الكود الاخر صحيحا
فهنا اما تنفيذ الكل او الغاء تنفيذ الكل 
اما تطبيقه على كود واحد لامعنى له اذ لديك جملة try catch فهي تفيد في تنفيذ  كود واحد ويمكن اظهار رسالة بالخطأ الممكن حصوله والخروج من الصب بدون تنفيذ اي كود او حدوث خطأ


RE: كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - ابو محمد محمد محمد - 26-04-22

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

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

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


RE: كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - Emam emam - 26-04-22

(26-04-22, 12:04 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
اخي الكريم امام
الغاية من جملة كود الـ  Transaction هو ربط تنفيذ اكثر من جملة حفظ او تعديل او حذف كلها اي ان يتحقق تنفيذ كل الاكواد بدون خطأ عندها يتم تنفيذ المطلوب على مستوى قاعدة البيانات وعند حذوث اي خطأ لاي سبب كان في احد الاكواد لن يتم تنقيذ اي كود على مستوى قاعدة البيانات حتى ولو كان الكود الاخر صحيحا
فهنا اما تنفيذ الكل او الغاء تنفيذ الكل 
اما تطبيقه على كود واحد لامعنى له اذ لديك جملة try catch فهي تفيد في تنفيذ  كود واحد ويمكن اظهار رسالة بالخطأ الممكن حصوله والخروج من الصب بدون تنفيذ اي كود او حدوث خطأ

بارك الله فيك اخي ابراهيم علي اهتمامك
واعتذر ان كنت لم اوضح المطلوب بشكل واضح
ولكن ما اقصده هو :
ان كود الاضافه هيكون في جملة public sub والتي تحتوي علي جملة insert وهتكون في module
ثم اقوم باستدعاء ال sub عند الضغط علي زر الاضافه واقوم باسناد القيم من ال textboxs 
وفي المثال اللي حضرتك عملته ال transaction معمول مع كودين اضافه
طب لو انا عندي مثلا 10 اكواد اضافه ومعاهم كودين حذف فكيف اقوم بتطبيق ال transaction عليهم
علشان كده انا طلبت ال transaction علي كل كود منفصل حتي استطيع ان اضيف عدد الاكواد اللي انا عاوزه
وممكن لو تكرمت انك تقوم بتطبيق ال transaction علي الكود الاخير اللي انا كتبته سابقا
اعتذر علي الاطاله وبارك الله فيكم

(26-04-22, 01:40 AM)ابو محمد محمد محمد كتب : وعليكم السلام ورحمة الله

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

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

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


RE: كيفية اضافة اكتر من عمليه في وقت واحد او إلغاءها في حالة حدوث خطأ - ابو محمد محمد محمد - 26-04-22

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

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

كود :
Cmd.Transaction = Trans

 بالجملة

كود :
Cmd.InsertText.Transaction = Trans

ابحث عن شئ كهذا