السلام عليكم
في برنامج فاتورة مطعم أقوم بتتابع
1- طبع الفاتورة في ورقة من خلال داتاغريد
2- نقص كمية المنتوجات من قاعدة البيانات
3- حفض رأس الفاتورة
4- حفض منتوجات الفاتورة
5- إفراغ الداتاغريد
في بعض الأحيان يحدث خطأ في الشبكة فلا يتم الوصول لقاعدة البيانات
فيتم طباعة الفاتورة دون الوصول لإفراغ الفاتورة
كيف أعالج هذا المشكل ب TRANSACTION
جزاكم الله خيرا
لا أريد طباعة الورقة إذا لم يتم حفضها في القاعدة
قبل الطباعة اعمل استعلام برقم الفاتورة إذا الرقم موجود قم بالطباعة او الغي امر الطباعة .
شكرا أخي
لكني من باب سرعة البرنامج
أقوم بالطباعة قبل حفض الفاتورة
كما وضحت في التسلسل
كما أنه كيف أعرف رقم الفاتورة و هي لم تحفض في القاعدة
فهناك عدة عملاء يحفضون في القاعدة في نفس الوقت و أخاف أن يقع أي تعارض
----------------
لو تكرمت أخي و تضع لي كود TRANSACTION هنا
سأكن شاااكرا لك
كود :
Using cmd As New OleDbCommand("UPDATE ", cn)
cmd.ExecuteNonQuery()
End Using
Using cmd As New OleDbCommand("INSERT ", cn)
cmd.ExecuteNonQuery()
End Using
Using cmd As New OleDbCommand("Delete ", cn)
cmd.ExecuteNonQuery()
End Using
كل الامر انك بحاجة لعمل كود تحقق وليكن كاستعلام لجلب قيمة واحدة مثلاً كالتالى لو بتستخدم Sql
كود :
sql select top 1 id from aaa
الاستعلام صغير وخفيفة ومش هياخد ولا هيسبب اى تاخر فى الطباعة
وبحيث اذا كان الاستعلام جلب نتيجة الـ ID اى كانت رقمها يتم الطباعة واعتماد الاضافة بعد الطباعة
بكده تكون تم تجنب مشكلة الطباعة وعدم تمكنه بالاتصال بقاعدة البيانات
انت بتقول "
لا أريد طباعة الورقة إذا لم يتم حفضها في القاعدة "
بعد الحفظ يتم جلب رقم الفاتورة مباشرة ،،
ثم طباعة الفاتورة في حال جلب رقم الفاتورة .
هذا مثال لحفظ سجل في قاعدة بيانات اكسس وجلب ID للسجل نفسه ،، يمكنك التحقق من القيمة وتنفيذ امر بعد التحقق .
كود :
Dim connect As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=True;"
متغير يحمل قيمة الترقيم التلقائي Dim ID As Integer
Using conn As New OleDbConnection(connect)
Using cmd As New SqlCommand("insert Into Categories (CategoryName) Values (@CategoryName)", conn)
cmd.Parameters.AddWithValue("@CategoryName", Category.Text)
conn.Open()
cmd.ExecuteNonquery()
cmd.Commandtext="select @@Identity"
ID = cmd.ExecuteScalar()
MsgBox(ID)
If ID <> "" or ID <> Nothing then
ضع كود الطباعة هنا سواء بإستعلام برقم الآيدي أو من الداتاقريدفيو كما عملت انت
End If
conn.close()
End Using
End Using
(06-10-19, 06:52 PM)kiki كتب : [ -> ]
كود :
sql select top 1 id from aaa
شكرا لك أخي
KIKI سأحاول إستخدام الفكرة
جزاك الله كل خير
(06-10-19, 09:13 PM)حريف برمجة كتب : [ -> ]حريف برمجة
كود :
Dim connect As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=True;"
متغير يحمل قيمة الترقيم التلقائي Dim ID As Integer
Using conn As New OleDbConnection(connect)
Using cmd As New SqlCommand("insert Into Categories (CategoryName) Values (@CategoryName)", conn)
cmd.Parameters.AddWithValue("@CategoryName", Category.Text)
conn.Open()
cmd.ExecuteNonquery()
cmd.Commandtext="select @@Identity"
ID = cmd.ExecuteScalar()
MsgBox(ID)
If ID <> "" or ID <> Nothing then
ضع كود الطباعة هنا سواء بإستعلام برقم الآيدي أو من الداتاقريدفيو كما عملت انت
End If
conn.close()
End Using
End Using
نعم أخي
حريف برمجة فهمت الفكرة
سأحاول تطوير هذه الطريقة
شكرا كثيرا و جزاك الله على تعبك