تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سؤال لو سمحتم احبتى فى الله
#1
السلام عليكم
احبتى فى الله
لو عندى جدول فى اكسس قيه 4 حقول
1-رقم الكود(رقم)
2-حد استلام (عمله)
3-استلام (عمله)
4-تاريخ(تاريخ ووقت)
 ما هو الكود لازم لحلب الفرق بين حد الاستلام والاستلام 
وعندما يصبح الفرق بين حد الاستلام والاستلام صفر وقف عمليات الاستلام ويخرج رساله بان الاستلام وصل لحد الاستلام
وعند اول شهر جديد يجعل الاستلام صفر ويبدأ من جديد

ارجو من حضراتكم ان تكونوا استوعبتم سؤالى وعرفت ان اوصل الفكره والسؤال لكم 

لكم منى اجمل تحيه وعرفان
الرد }}}
تم الشكر بواسطة:
#2
ارجو الرد احبتى بالله عليكم
الرد }}}
تم الشكر بواسطة:
#3
وعليكم السلام ورحمة الله وبركاته
رقم الكود = 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].


آمل أن يكون هذا الكود مفيدًا لك!

ملاحظة الكود منقول مع التعديل عليه وليس من كتابتي بالكامل للأمانة
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد }}}
تم الشكر بواسطة: خالد كامل1
#4
احسنت .؟ ولكنى اريد تعويض فى تلك الجزئيه     If DateTime.Now.Day = 1 Then بالتاريخ المسجل فى قاعده البيانات
الرد }}}
تم الشكر بواسطة:
#5
(08-02-25, 10:41 PM)خالد كامل1 كتب : احسنت .؟ ولكنى اريد تعويض فى تلك الجزئيه     If DateTime.Now.Day = 1 Then بالتاريخ المسجل فى قاعده البيانات

حضرتك الجزئية دي اللى طلبتها لأعادة تصفير الأستلام كل اول شهر
وكل أول شهر معناه يوم 1 في الشهر او اي يوم ممكن تحدده حسب الرغبة بمجرد استبدال رقم 1 الى اي رقم من 1 الى 31 عدد ايام الشهر والتاريخ بيتم البحث عنه بتاريخ الجهاز  وليس بتاريخ مسجل مسبقا في قاعدة البيانات 
ممكن أقدم لك لحضرتك دالة تجلب أي حقل تريده 
ولكن لا أعلم ماذا تريد بالظبط لأني الأن أفكر بأحتمالات كثيرة 

وأيضا اللى حضرتك طالبه الأن أعتقد شئ أخر فأعذرني إن لم أفهمك جيدا ارجو التوضيح أكثر حتى أستطيع تقديم المساعدة
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: