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


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


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


لا أطيل عليكم اخوتي 


تم عمل جدول لقاعدة بيانات وذكرته سابقا واسماء الحقول كالتالي 


nump رقم الصنف 
namep  اسم الصنف 
unitp الوحدة للصنف 
nowp الكمية المتاحة 


واسم الجدول ككل products


تم عمل فاتورة طلب بسيطة حيث انني اعمل في منظمة غير ربحية او تجارية انما هي لطلبات الأقسام من المواد القرطاسية والعهدة وغيرها 


الفورم مكون من رقم الصنف حيث بمجرد ما ادخل الرقم يتم اظهار البيانات الباقية في تيسكت بوكس وهي اسم الصنف والوحدة والكمية المتاحة
ويبتقى فراغ واحد وهو الكمية المطلوبة   التي سوف ادخلها يدويا 


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


وسؤال اخر وهو اريد طباعة محتويات الفورم اي طباعة الفاتورة حيث انني لم اعمل جدول للفواتير لأنها لا تهمني لاني احتفظ بنماذج جاهزة من قبل الأقسام حسب أوامر المسؤولين للرجوع لها وقت الحاجة 

توضيح لشكل الفورم 



وجزاكم الله خير 
الرد }}}
تم الشكر بواسطة:
#2

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

هذه دالة QuantityDiscount لإجراء الخصم من المستودعات ترسل لها رقم الصنف الكمية المطلوبة، إن شاء الله يكون تمام
PHP كود :
Dim connString As String "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = Database1.accdb;"
Dim conn As New OleDbConnection(connString)

Private 
Sub Button2_Click(sender As System.ObjectAs System.EventArgsHandles Button2.Click
    QuantityDiscount
(Val(Me.TextBox1.Text), Val(Me.TextBox2.Text))
End Sub

' خصم الكمية المطلوبة من المستودعات '
Public Function QuantityDiscount(nump As Integerqty As Integer) As Boolean

    
' التأكد من صحة الأرقام المدخلة '
    
If (nump <= 0) Or (qty <= 0Then Exit Function

    
'----------------------------------------'

    
Using con As New OleDbConnection(connString)
        
con.Open()

        
'---------- التأكد من توفر الكمية المطلوبة ----------'
        
Using comm As New OleDbCommand(" SELECT [nowp] FROM [products] WHERE [nump] = @nump "con)
            
comm.Parameters.AddWithValue("@nump"nump)
            If 
comm.ExecuteScalar qty Then
                MsgBox
("الكمية المطلوبة غير متوفرة في المستودعات"_
                       MsgBoxStyle
.Critical MsgBoxStyle.MsgBoxRtlReading MsgBoxStyle.MsgBoxRight)
                Return 
False
            End 
If
        
End Using

        
'---------- خصم الكمية المطلوبة من المستودعات ----------'
        
Dim result As Integer
        Using comm 
As New OleDbCommand(" UPDATE [products] SET [nowp] = [nowp] - @qty "con)
            
comm.Parameters.AddWithValue("@qty"qty)
            
result comm.ExecuteNonQuery()
        
End Using

        
'---------- التأكد من نتيجة عملية الخصم ----------'
        
If result 0 Then
            MsgBox
("تم خصم الكمية المطلوبة من المستودعات"_
                    MsgBoxStyle
.Information MsgBoxStyle.MsgBoxRtlReading MsgBoxStyle.MsgBoxRight)
            Return 
True
        End 
If

        
con.Close()
    
End Using

End 
Function 

الرد }}}
تم الشكر بواسطة: العزابي
#3
اسعدك الله اخي الوليد

مكن شرح للأكواد السابقة

مع شرط هذا الكود Using con As New OleDbConnection(connString)

لأنه الوحيد اللي فيه خطأ

وهل لابد من اضافة عمود للكمية المطلوبة في قاعدة البيانات ؟.؟؟ لأنها غير مضافة
الرد }}}
تم الشكر بواسطة:
#4

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

بالنسبة للخطأ يبدو أنك لم تضف السطر الأول connString

عمود الكمية المطلوبة يفترض وجوده في جدول الفواتير،
لأن الكود الحالي يختص بالعمل على جدول المستودعات

الرد }}}
تم الشكر بواسطة:
#5
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
QuantityDiscount(Val(Me.TextBox1.Text), Val(Me.TextBox2.Text))
End Sup

بماا اعوض عن التكست في الكود السابق

وما فهمت يعني هل لابد من اضافة جدول اخر بالفواتير لأني لم أفعل
الرد }}}
تم الشكر بواسطة:
#6

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

الدالة QuantityDiscount تحتاج معاملين الأول رقم الصنف والثاني الكمية المطلوبة

أقصد مستقبلاً عند عمل جدول الفواتير عندها يمكنك إضافة عمود الكمية المطلوبة فيه

الرد }}}
تم الشكر بواسطة:
#7
والله لا اعلم اين الخطا اخوي الوليد 

عموما هذا كود الفورم بالكامل 


حيث ان الكمية المطلوبة تأخذ textbox13

PHP كود :
Imports System.Data
Imports System
.Data.OleDb
Public Class Form6
    Inherits System
.Windows.Forms.Form

    Dim con 
As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=storemng.accdb")


 
   Dim connString As String "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=storemng.accdb;"
 
   Dim conn As New OleDbConnection(connString)


 
   Private Sub Form6_Load(sender As ObjectAs EventArgsHandles MyBase.Load
  

    End Sub

    Private Sub Button5_Click
(sender As ObjectAs EventArgsHandles Button5.Click 'الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود

        Dim row As DataRow = GetItemInfo(Val(Me.txtno1.Text))
        Me.txtname1.Clear()
        Me.txtunit1.Clear()
        Me.txtq1.Clear()
        If row IsNot Nothing Then
            Me.txtname1.Text = row("namep")
            Me.txtunit1.Text = row("uintp")
            Me.txtq1.Text = row("nowp")
        End If
    End Sub

    ' 
قراءة بيانات المادة من رقمها وتأتي على شكل سطر بيانات وليس جدول '
    Public Function GetItemInfo(id As Integer) As DataRow
        Try
            Using da As New OleDbDataAdapter("SELECT * FROM [products] WHERE [nump] = @nump ", con)
                da.SelectCommand.Parameters.AddWithValue("@nump", id)
                Using myDatatable As New DataTable
                    If da.Fill(myDatatable) > 0 Then Return myDatatable.Rows(0)
                End Using
            End Using
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Function



    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '
الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود

        Dim row 
As DataRow GetItemInfo(Val(Me.txtno2.Text))
 
       Me.txtname2.Clear()
 
       Me.txtunit2.Clear()
 
       Me.txtq2.Clear()
 
       If row IsNot Nothing Then
            Me
.txtname2.Text row("namep")
 
           Me.txtunit2.Text row("uintp")
 
           Me.txtq2.Text row("nowp")
 
       End If
 
   End Sub

    Private Sub Button7_Click
(sender As ObjectAs EventArgsHandles Button7.Click 'الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود
        Dim row As DataRow = GetItemInfo(Val(Me.txtno3.Text))
        Me.txtname3.Clear()
        Me.txtunit3.Clear()
        Me.txtq3.Clear()
        If row IsNot Nothing Then
            Me.txtname3.Text = row("namep")
            Me.txtunit3.Text = row("uintp")
            Me.txtq3.Text = row("nowp")
        End If
    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '
الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود
        Dim row 
As DataRow GetItemInfo(Val(Me.txtno4.Text))
 
       Me.txtname4.Clear()
 
       Me.txtunit4.Clear()
 
       Me.txtq4.Clear()
 
       If row IsNot Nothing Then
            Me
.txtname4.Text row("namep")
 
           Me.txtunit4.Text row("uintp")
 
           Me.txtq4.Text row("nowp")
 
       End If
 
   End Sub

    Private Sub Button9_Click
(sender As ObjectAs EventArgsHandles Button9.Click 'الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود
        Dim row As DataRow = GetItemInfo(Val(Me.txtno5.Text))
        Me.txtname5.Clear()
        Me.txtunit5.Clear()
        Me.txtq5.Clear()
        If row IsNot Nothing Then
            Me.txtname5.Text = row("namep")
            Me.txtunit5.Text = row("uintp")
            Me.txtq5.Text = row("nowp")
        End If
    End Sub

    Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click '
الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود
        Dim row 
As DataRow GetItemInfo(Val(Me.txtno6.Text))
 
       Me.txtname6.Clear()
 
       Me.txtunit6.Clear()
 
       Me.txtq6.Clear()
 
       If row IsNot Nothing Then
            Me
.txtname6.Text row("namep")
 
           Me.txtunit6.Text row("uintp")
 
           Me.txtq6.Text row("nowp")
 
       End If
 
   End Sub

    Private Sub Button11_Click
(sender As ObjectAs EventArgsHandles Button11.Click 'الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود
        Dim row As DataRow = GetItemInfo(Val(Me.txtno7.Text))
        Me.txtname7.Clear()
        Me.txtunit7.Clear()
        Me.txtq7.Clear()
        If row IsNot Nothing Then
            Me.txtname7.Text = row("namep")
            Me.txtunit7.Text = row("uintp")
            Me.txtq7.Text = row("nowp")
        End If
    End Sub

    Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click '
الزر الخاص بإظهار عناصر الصنف بعد اضافة الكود
        Dim row 
As DataRow GetItemInfo(Val(Me.txtno8.Text))
 
       Me.txtname8.Clear()
 
       Me.txtunit8.Clear()
 
       Me.txtq8.Clear()
 
       If row IsNot Nothing Then
            Me
.txtname8.Text row("namep")
 
           Me.txtunit8.Text row("uintp")
 
           Me.txtq8.Text row("nowp")
 
       End If
 
   End Sub



  


    
' خصم الكمية المطلوبة من المستودعات '
 
   Public Function QuantityDiscount(nump As Integerqty As Integer) As Boolean

        
' التأكد من صحة الأرقام المدخلة '
 
       If (nump <= 0) Or (qty <= 0Then Exit Function

 
       '----------------------------------------'

 
       Using con As New OleDbConnection(connstring)
 
           con.Open()

 
           '---------- التأكد من توفر الكمية المطلوبة ----------'
 
           Using comm As New OleDbCommand(" SELECT [nowp] FROM [products] WHERE [nump] = @nump "con)
 
               comm.Parameters.AddWithValue("@nump"nump)
 
               If comm.ExecuteScalar qty Then
                    MsgBox
("الكمية المطلوبة غير متوفرة في المستودعات"_
                           MsgBoxStyle
.Critical MsgBoxStyle.MsgBoxRtlReading MsgBoxStyle.MsgBoxRight)
 
                   Return False
                End 
If
 
           End Using

            
'---------- خصم الكمية المطلوبة من المستودعات ----------'
 
           Dim result As Integer
            Using comm 
As New OleDbCommand(" UPDATE [products] SET [nowp] = [nowp] - @qty "con)
 
               comm.Parameters.AddWithValue("@qty"qty)
 
               result comm.ExecuteNonQuery()
 
           End Using

            
'---------- التأكد من نتيجة عملية الخصم ----------'
 
           If result 0 Then
                MsgBox
("تم خصم الكمية المطلوبة من المستودعات"_
                        MsgBoxStyle
.Information MsgBoxStyle.MsgBoxRtlReading MsgBoxStyle.MsgBoxRight)
 
               Return True
            End 
If

 
           con.Close()
 
       End Using

    End 
Function

 
   Private Sub Button2_Click(sender As ObjectAs EventArgsHandles Button2.Click

    End Sub

    Private Sub Button4_Click
(sender As ObjectAs EventArgsHandles Button4.Click

    End Sub
End 
Class 
الرد }}}
تم الشكر بواسطة:
#8

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

إذا كنت مبتدأ فالأفضل عدم الزام نفسك ببرنامج يترتب عليه بيانات العمل حتى تكون متمكن من البرمجة

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

لاحظت أنك أضفت الدالة QuantityDiscount ولكنك لم تستخدمها
لاحظت أنك وضعت كائن اتصال باسم con وآخر باسم conn فياليت تكتفي بواحد عشان لا تربك نفسك

طريقة عمل البرنامج بالنسبة لي غامضة حسب الصورة المرفقة الصورة

الرد }}}
تم الشكر بواسطة: أبووسم
#9
اخي الوليد ،،، نحب أن نكمل من المكان الذي توقف إليه الآخرون

فنحب أن نبدع ،، مثل ما قلت سابقا بأن المنظمة ليست ربحية بل حكومية وليس بها أنظمة أو برامج بل تتعامل بشكل يدوي

أما في قسمي الذي اديره أحب ان اغير هذا النظام لكي يسهل علي العمل

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

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

فالتعلم بالعمل وكسب الفائدة من امثالك

اخي الوليد اشكرك على وقوفك جانبي في هذا البرنامج وتذكر بأنني لن انساك

نجح الكود بعد ما اخذ بطريقتك وعمل فورم ومعرفة اين الخطأ وكان في الاتصال بالقاعدة

والان بقي طلبي الاخر وهو كود لطباعة محتويات الفورم على ورق
الرد }}}
تم الشكر بواسطة:
#10

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

التقارير يمكنك استخدام ReportViewer وهو لا يأتي مع إصدار Express المجانية
ويمكنك استخدام CrystalReport وهو برنامج لا يركب على إصدار Express أيضاً

وقد توجد برامج أخرى للتقارير

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] حل مشكلة الاتصال بقواعد البيانات access loay775 2 158 25-02-24, 06:29 AM
آخر رد: loay775
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 249 11-02-24, 08:43 PM
آخر رد: assuhimi
  امثلة و اكواد ربما تفيدك AHMED213 0 190 04-02-24, 11:07 PM
آخر رد: AHMED213
  [VB.NET] منع تكرار البيانات في عند الادخال مبرمج صغير 1 2 255 24-01-24, 05:18 PM
آخر رد: مبرمج صغير 1
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 274 18-01-24, 05:04 PM
آخر رد: loay775
  [VB.NET] إعادة استدعاء البيانات من قاعدة بيانات اكسس والاهم الصورة مبرمج صغير 1 1 273 13-01-24, 01:17 PM
آخر رد: مبرمج صغير 1
  سؤال بسيط يا احبتى فى الله خالد كامل1 4 314 07-01-24, 12:55 AM
آخر رد: Mujahef
  اريد مساعدة في العملية الحسابية melad2002 3 406 29-12-23, 09:10 PM
آخر رد: melad2002
  [كود] اريد كود إرسال البيانات من الفيجوال بيسك إلىPDF issamsaidd 10 5,829 25-12-23, 06:30 PM
آخر رد: الحزين اليماني
  جملة الاتصال بقاعدة البيانات اكسس محمد خيري 4 362 12-12-23, 03:14 AM
آخر رد: محمد خيري

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم