وعليكم السلام ورحمة الله وبركاته
رقم الكود = 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].
آمل أن يكون هذا الكود مفيدًا لك!
ملاحظة الكود منقول مع التعديل عليه وليس من كتابتي بالكامل للأمانة