08-02-25, 08:11 PM
وعليكم السلام ورحمة الله وبركاته
رقم الكود = ID
حد الأستلام = MAXRECEIVE
الأستلام = RECEIVED
التاريخ = DATE
يمكنك استخدام الكود التالي:
**شرح الكود:**
1. **الاتصال بقاعدة البيانات:** يتم تحديد سلسلة الاتصال بقاعدة بيانات Access الخاصة بك. يجب عليك استبدال `"YourDatabaseName.accdb"` باسم ملف قاعدة البيانات الفعلي، وتأكد من أن لديك المكتبة المناسبة لـ OleDB مثبتة.
2. **استعلام SQL:** يتم تحديد استعلام SQL لاسترداد البيانات من الجدول الخاص بك. يجب عليك استبدال `"YourTableName"` باسم الجدول الفعلي.
3. **قراءة البيانات:** يقوم الكود بقراءة البيانات من قاعدة البيانات باستخدام `OleDbDataReader`.
4. **حساب الفرق:** يتم حساب الفرق بين `MAXRECEIVE` و `RECEIVED`.
5. **التحقق من الفرق:** إذا كان الفرق أقل من أو يساوي الصفر، يتم عرض رسالة تنبيه ويتم تنفيذ إجراءات إضافية (مثل تعطيل عناصر التحكم).
6. **إعادة تعيين `RECEIVED`:** في بداية كل شهر (اليوم = 1)، يتم تحديث قيمة `RECEIVED` إلى الصفر في قاعدة البيانات باستخدام الدالة `ResetReceived`.
7. **معالجة الأخطاء:** يتم استخدام `Try...Catch` للتعامل مع أي أخطاء قد تحدث أثناء تنفيذ الكود.
**ملاحظات:**
* تأكد من استبدال `"YourDatabaseName.accdb"` و `"YourTableName"` بالأسماء الفعلية لقاعدة البيانات والجدول الخاص بك.
* يجب عليك إضافة `Imports System.Data.OleDb` في بداية الكود.
* يمكنك تعديل الكود لتعطيل عناصر التحكم في واجهة المستخدم الخاصة بك حسب الحاجة.
* يجب إضافة زر (Button1) على الفورم الخاص بك واستدعاء الدالة `ProcessData` عند النقر فوقه.
* تأكد من تنسيق حقلي `MAXRECEIVE` و `RECEIVED` كعملة (Currency) في قاعدة بيانات Access[6]. يمكنك أيضاً تحويل أي رقم إلى عملة باستخدام الكود المناسب في VB.NET[4].
آمل أن يكون هذا الكود مفيدًا لك!
ملاحظة الكود منقول مع التعديل عليه وليس من كتابتي بالكامل للأمانة
رقم الكود = ID
حد الأستلام = MAXRECEIVE
الأستلام = RECEIVED
التاريخ = DATE
يمكنك استخدام الكود التالي:
كود :
Imports System.Data.OleDb
Public Class Form1
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=YourDatabaseName.accdb" ' استبدل YourDatabaseName.accdb باسم قاعدة البيانات الخاصة بك
Dim tableName As String = "YourTableName" ' استبدل YourTableName باسم الجدول الخاص بك
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ProcessData()
End Sub
Private Sub ProcessData()
Dim query As String = "SELECT ID, MAXRECEIVE, RECEIVED, DATE FROM {tableName}"
Using conn As New OleDbConnection(connString)
Using cmd As New OleDbCommand(query, conn)
Try
conn.Open()
Dim reader As OleDbDataReader = cmd.ExecuteReader()
While reader.Read()
Dim ID As Integer = Convert.ToInt32(reader("ID"))
Dim MAXRECEIVE As Decimal = Convert.ToDecimal(reader("MAXRECEIVE"))
Dim RECEIVED As Decimal = Convert.ToDecimal(reader("RECEIVED"))
Dim DATE_OPR As Date = Convert.ToDateTime(reader("DATE"))
' حساب الفرق
Dim difference As Decimal = MAXRECEIVE - RECEIVED
' التحقق من الفرق
If difference <= 0 Then
' إيقاف عمليات الاستلام
MessageBox.Show("تم الوصول إلى الحد الأقصى للاستلام للرقم المرجعي: {ID}", "تنبيه")
' هنا يمكنك إضافة كود لتعطيل عناصر التحكم في واجهة المستخدم لمنع المزيد من الاستلام
' For example:
' TextBox_Receive.Enabled = False
' Button_Receive.Enabled = False
Else
' يمكنك هنا إضافة كود لتحديث قيمة الاستلام في قاعدة البيانات
' وتفعيل عناصر التحكم في واجهة المستخدم إذا كانت معطلة
End If
' إعادة تعيين الاستلام في بداية كل شهر
If DateTime.Now.Day = 1 Then
' تحديث قيمة الاستلام إلى صفر في قاعدة البيانات
ResetReceived(ID, conn)
End If
End While
reader.Close()
Catch ex As Exception
MessageBox.Show("Error: " & ex.Message)
End Try
End Using
End Using
End Sub
Private Sub ResetReceived(ID As Integer, conn As OleDbConnection)
Dim updateQuery As String = "UPDATE {tableName} SET RECEIVED = 0 WHERE ID = {ID}"
Using updateCmd As New OleDbCommand(updateQuery, conn)
updateCmd.ExecuteNonQuery()
End Using
End Sub
End Class**شرح الكود:**
1. **الاتصال بقاعدة البيانات:** يتم تحديد سلسلة الاتصال بقاعدة بيانات Access الخاصة بك. يجب عليك استبدال `"YourDatabaseName.accdb"` باسم ملف قاعدة البيانات الفعلي، وتأكد من أن لديك المكتبة المناسبة لـ OleDB مثبتة.
2. **استعلام SQL:** يتم تحديد استعلام SQL لاسترداد البيانات من الجدول الخاص بك. يجب عليك استبدال `"YourTableName"` باسم الجدول الفعلي.
3. **قراءة البيانات:** يقوم الكود بقراءة البيانات من قاعدة البيانات باستخدام `OleDbDataReader`.
4. **حساب الفرق:** يتم حساب الفرق بين `MAXRECEIVE` و `RECEIVED`.
5. **التحقق من الفرق:** إذا كان الفرق أقل من أو يساوي الصفر، يتم عرض رسالة تنبيه ويتم تنفيذ إجراءات إضافية (مثل تعطيل عناصر التحكم).
6. **إعادة تعيين `RECEIVED`:** في بداية كل شهر (اليوم = 1)، يتم تحديث قيمة `RECEIVED` إلى الصفر في قاعدة البيانات باستخدام الدالة `ResetReceived`.
7. **معالجة الأخطاء:** يتم استخدام `Try...Catch` للتعامل مع أي أخطاء قد تحدث أثناء تنفيذ الكود.
**ملاحظات:**
* تأكد من استبدال `"YourDatabaseName.accdb"` و `"YourTableName"` بالأسماء الفعلية لقاعدة البيانات والجدول الخاص بك.
* يجب عليك إضافة `Imports System.Data.OleDb` في بداية الكود.
* يمكنك تعديل الكود لتعطيل عناصر التحكم في واجهة المستخدم الخاصة بك حسب الحاجة.
* يجب إضافة زر (Button1) على الفورم الخاص بك واستدعاء الدالة `ProcessData` عند النقر فوقه.
* تأكد من تنسيق حقلي `MAXRECEIVE` و `RECEIVED` كعملة (Currency) في قاعدة بيانات Access[6]. يمكنك أيضاً تحويل أي رقم إلى عملة باستخدام الكود المناسب في VB.NET[4].
آمل أن يكون هذا الكود مفيدًا لك!
ملاحظة الكود منقول مع التعديل عليه وليس من كتابتي بالكامل للأمانة
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي

