المشاركات : 516
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1435
تم شكره 417 مرات في 120 مشاركات
09-04-16, 03:16 AM
(آخر تعديل لهذه المشاركة : 09-04-16, 03:18 AM {2} بواسطة الماجيك مسعد.)
السلام عليكم
واجهت مشكلة غريبة بعض الشئ مش عارف انا كاتب الكود غلط ولا منين المشكلة
سمى الله اولا
المشروع تبعى نسخة طبق الاصل من هذه الصورة
ولكن مع تغير الاسامى فقط
مشكلة المشروع هى
المفروض انى اكتب الكمية المراد بيعها ثم اضغط على زر بيع
وبعد ضغط زر بيع
يتم الاتى
زيادة الكمية الى اتباعت على الكمية المباعة
نقص الكمية الى اتباعت من الكمية المتبقية
حاولت بالطريقة العادية الى دايما بستخدمها
soldcount += tosale
remain -= tosale
ولكن لم تنفع ولا اعرف السبب
وهذا رابط تحميل المشروع للتعديل عليه
http://up.dev-point.com/download264781.html
وهذا الكود كامل الخاص بزر البيع
لم يريد تعديل الكود فقط بدون ان يرى المشروع
Private Sub d_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles d.CellClick
If e.ColumnIndex = 8 Then
cmdb = New OleDb.OleDbCommandBuilder(da)
Dim founded As String = d.Rows(e.RowIndex).Cells("founded").Value '"الكمية الموجودة"
Dim soldcount As String = d.Rows(e.RowIndex).Cells("soldcount").Value '"الكمية المباعة"
Dim remain As String = d.Rows(e.RowIndex).Cells("remain").Value '"الكمية المتبقية"
Dim tosale As String = d.Rows(e.RowIndex).Cells("tosold").Value '"الكمية المطلوب بيعها"
Dim price As Integer = d.Rows(e.RowIndex).Cells("price").Value '"السعر"
If IsNothing(tosale) Then MsgBox("يجب كتابة قيمة في الكمية المراد بيعها قبل النقر هنا", MsgBoxStyle.Critical, "") : Exit Sub
founded += tosale
dt.Rows(e.RowIndex).Item("founded") = founded
soldcount += tosale
remain -= tosale
dt.Rows(e.RowIndex).Item("soldcount") = soldcount
dt.Rows(e.RowIndex).Item("remain") = remain
Dim pricesale As String = "اجمالى السعر = " & tosale * price
MsgBox("العدد = " & tosale & nl & "سعر القطعة = " & price & nl & pricesale)
da.Update(dt)
Form1_Load(Nothing, Nothing)
End If
End Sub
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
09-04-16, 04:35 AM
(آخر تعديل لهذه المشاركة : 09-04-16, 04:35 AM {2} بواسطة silverlight.)
حاول تستخدم Integer.Parse مع totalSale و تحولها لرقم و نفس الشي مع founded و بعد كده تقدر ترجعهم إلي String بسهولة
المشاركات : 516
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1435
تم شكره 417 مرات في 120 مشاركات
(09-04-16, 04:35 AM)silverlight كتب : حاول تستخدم Integer.Parse مع totalSale و تحولها لرقم و نفس الشي مع founded و بعد كده تقدر ترجعهم إلي String بسهولة
ممكن الطريقة يا غالى
لانى اول مرة اتعامل مع القواعد
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
09-04-16, 05:19 AM
(آخر تعديل لهذه المشاركة : 09-04-16, 08:35 AM {2} بواسطة silverlight.)
PHP كود :
Private Function ParseInteger(stringToParse As String) As Integer Return ParseInteger(stringToParse, False) End Function
Private Function ParseInteger(stringToParse As String, throwException As Boolean) As Integer Dim result As Integer = 0 If throwException Then result = Integer.Parse(stringToParse, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture) Else If Not Integer.TryParse(stringToParse, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture, result) Then Integer.TryParse(stringToParse, Globalization.NumberStyles.Any, Globalization.CultureInfo.CurrentCulture, result) End If End If
Return result End Function
اعمل مثال صغير لنفسك و الموضوع سوف يتضح لك فقط عليك ان تمرر قيمة String الذي هو في الاصل علي هيئة رقم الي الدالة الأولي
المشاركات : 516
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1435
تم شكره 417 مرات في 120 مشاركات
09-04-16, 05:42 AM
(آخر تعديل لهذه المشاركة : 09-04-16, 05:48 AM {2} بواسطة الماجيك مسعد.)
جربت يا غالى
ولم تنفع او انى استخدمتها غلط
استخدمتها كدا
dt.Rows(e.RowIndex).Item("soldcount") = ParseInteger(soldcount)
شكرا لكم جميعا
وجدت الحل باستخدم هذا الكود
Dim x As Integer = Val(soldcount) + Val(tosale)
dt.Rows(e.RowIndex).Item("soldcount") = x
ولكن كنت اتمنى ان اعرف ما هو سبب الخطأ فى الكود القديم
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
09-04-16, 08:44 AM
(آخر تعديل لهذه المشاركة : 09-04-16, 08:46 AM {2} بواسطة silverlight.)
هذا مثال صغير لتوضيح الفكرة
PHP كود :
Dim totalValue As String = "20" Dim founded As String = "10"
Dim total As Integer = ParseInteger(totalValue) Dim foundedValue As Integer = ParseInteger(founded)
total += foundedValue Label1.Text = total
في حالتك هنا أنت تستخدم المدخلات بشكل مباشر من الداتجريدفيو والمدخلات هنا في الداتجريد فيو يتم معاملتاه علي انها Object
حاول تمرر المدخلات علي هيئة Tostring
المشاركات : 516
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1435
تم شكره 417 مرات في 120 مشاركات
تمام يا غالى شكرا لك على توضيح سبب المشكلة
المشاركات : 7,391
المواضيع 803
الإنتساب : Sep 2013
السمعة :
846
الشكر: 13249
تم شكره 18795 مرات في 4414 مشاركات
(09-04-16, 08:58 AM)khodor1985 كتب : عذرا أخي لدي اعتراض على الطريقة أو الأسلوب، لماذا تنتهجون الطرق الطويلة في التفكير؟ لماذا تصعبون الأمور؟
لنفترض أن لديك 1000 صنف في الجدول كيف ستنفذ عملية البيع؟
ان كنت تقصد المثال الذي صممته فكما يقولون "الحاجة ام الاختراع" فلو جربت العدد الكبير فبلا شك سافكر بطريقة اسهل لكن الامر لم يتعدى سوى فكرة سريعة والرغبة في تطبيقها.
المرجو المساعدة بفكرة افضل.
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
الأخ الفاضل khodor
مع علاقة موضوع السؤال ب تساؤلك عن كيفية قراءة بيانات كثيرة لأني لست متابعا للأمر من بدايته
المشاركات : 516
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1435
تم شكره 417 مرات في 120 مشاركات
09-04-16, 03:16 PM
(آخر تعديل لهذه المشاركة : 09-04-16, 03:55 PM {2} بواسطة الماجيك مسعد.)
(09-04-16, 08:58 AM)khodor1985 كتب : عذرا أخي لدي اعتراض على الطريقة أو الأسلوب، لماذا تنتهجون الطرق الطويلة في التفكير؟ لماذا تصعبون الأمور؟
لنفترض أن لديك 1000 صنف في الجدول كيف ستنفذ عملية البيع؟
مرحبا اخى
الا اشكرك جدا على طرحك للافكار
لانى بالفعل طلبت طرح افكار اكتر
فى هذا الموضوع
http://vb4arb.com/vb/thread-15384-page-2.html
عن مثل هذه البرامج
وبالنسبة لهذا السؤال
لنفترض أن لديك 1000 صنف في الجدول كيف ستنفذ عملية البيع؟
لم افهم ما تقصده جيدا
على حد فهمى لو سؤالك دا معناه كيف هبيع كمية من الصنف
فالاخ سعود بارك الله فيه
ضايف خاصية جميلة جدا
وهى الكمية المراد بيعها
حيث اكتب فيها الكمية الى عايز ابعها
مثلا لو هبيع 1000 قطعة من صنف واحد
هكتب 1000 فى حقل الكمية المراد بيعها واضغط زر بيع
وانا عدلته قليلا بان ييظهر رسالة بعد ضغط بيع
يظهر فيها العدد المراد بيعه + سعر القطعة الواحدة +السعر الاجمالى لكل القطع المراد بيعها
لكن لو حضرتك تقصد شئ اخر بسؤالك يريت توضحلى اكتر
واتمنى ان تمدنا بالافكار هذا شئ يفرحنى جدا والله
(09-04-16, 01:15 PM)khodor1985 كتب : السلام عليكم أخي العزيز ورحمة الله وبركاته
لقد قمنا بالتعديل على مشروعكم من وجهة نظرنا ونحن بالتأكيد نحترم وجهة نظر الآخرين ونضعها على رأسنا ولكن التنوع والإختلاف في تقديم الأفكار والآراء يغني المشاركة ويثريها.
وأرجو من الله عز وجل أن أكون قد أصبت إنه سميع مجيب.
صور عن التعديلات :
المشروع بشكل عام :
لقد قمنا بإضافة زر جديد لتهيئة عناصر التحكم لاستقبال البيانات الجديدة يدويا، وقمنا بإضافة زر حفظ لادخال البيانات إلى قاعدة البيانات، وقمنا بإنشاء زر حذف لازالة البيانات التي لا نريدها، كما قمنا بإنشاء مجموعة من الأزرار بهدق التنقل بين السجلات.
إدخال صنف جديد :
نضغط أولا على زر جديد في حال كانت مربعات النوصوص معبئة ثم نقوم بتحرير البيانات داخل مربعات النصوص، وبعد أن ننتهي نضغط على الزر حفظ لإدخال البيانات إلى قاعدة البيانات :
إذا اردنا تنفيذ عملية بيع أنظر جيد ما الذي سيجري :
الأكواد :
قم بالإعلان عن المتغيرات التالية :
PHP كود :
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb") Dim cmd As OleDbCommand Dim cmb As OleDbCommandBuilder Dim da As OleDbDataAdapter Dim ds As DataSet Dim bs As BindingSource Dim sqlstr As String
تحميل البيانات من قاعدة البيانات وإظهارها في مربعات النصوص والداتا غريد للمستخدم النهائي وطبعا سوف نستدعي هذا الاجراء في الحدث Load للنموذج :
PHP كود :
Private Sub LoaddgvInventory() Try
con.Open() sqlstr = "Select ItmID as الرقم,ItmName as الصنف,ItmPrice as السعر,ItmIN as الوارد,ItmTotal as الإجمالي,ItmOut as الصادر, " & _ "ItmRemain as المتبقي From tblInventory Where ItmActv=1" cmd = New OleDbCommand(sqlstr, con) da = New OleDbDataAdapter(cmd) ds = New DataSet ds.Clear() da.Fill(ds, "tblInventory")
bs = New BindingSource bs.DataSource = ds.Tables("tblInventory")
ClearDataBinding()
txtID.DataBindings.Add("text", bs, "الرقم", 2, 2) txtItem.DataBindings.Add("text", bs, "الصنف", 2, 2) txtPrice.DataBindings.Add("text", bs, "السعر", 2, 2) txtIN.DataBindings.Add("text", bs, "الوارد", 2, 2) txtTotal.DataBindings.Add("text", bs, "الإجمالي", 2, 2) txtOut.DataBindings.Add("text", bs, "الصادر", 2, 2) txtRemain.DataBindings.Add("text", bs, "المتبقي", 2, 2)
dgvInventory.DataSource = bs CalTotal()
con.Close() Catch ex As Exception If con.State = ConnectionState.Open Then con.Close() MsgBox(ex.Message) End Try
End Sub
زر جديد :
PHP كود :
ClearDataBinding() txtID.Clear() txtItem.Clear() txtPrice.Clear() txtIN.Clear() txtTotal.Text = 0 txtOut.Text = 0 txtRemain.Text = 0 txtToOut.Text = 0
Dim Max As Integer Max = ds.Tables("tblInventory").Rows.Count txtID.Text += CStr(Max + 1)
زر الحفظ أو البيع :
PHP كود :
Private Sub SaveRecord() Try con.Open() sqlstr = "Select * From tblInventory Where ItmID=@ItmID" cmd = New OleDbCommand(sqlstr, con) cmd.Parameters.Add("@ItmID", OleDbType.Integer).Value = IIf(txtID.Text.Trim.Length = 0, System.DBNull.Value, txtID.Text)
If cmd.ExecuteScalar > 0 Then sqlstr = "Update tblInventory Set ItmName=@ItmName,ItmPrice=@ItmPrice,ItmIN=@ItmIN,ItmTotal=@ItmTotal,ItmOut=@ItmOut, " & _ "ItmRemain=@ItmRemain Where ItmID=@ItmID" cmd = New OleDbCommand(sqlstr, con) Dim Total As Integer = Val(txtOut.Text) + Val(txtToOut.Text) With cmd.Parameters .Add("@ItmName", OleDbType.VarWChar).Value = IIf(txtItem.Text.Trim.Length = 0, System.DBNull.Value, txtItem.Text) .Add("@ItmPrice", OleDbType.Integer).Value = IIf(txtPrice.Text.Trim.Length = 0, System.DBNull.Value, txtPrice.Text) .Add("@ItmIN", OleDbType.Integer).Value = IIf(txtIN.Text.Trim.Length = 0, System.DBNull.Value, txtIN.Text) .Add("@ItmTotal", OleDbType.Integer).Value = IIf(txtTotal.Text.Trim.Length = 0, System.DBNull.Value, txtTotal.Text) .Add("@ItmOut", OleDbType.Integer).Value = IIf(Len(Total) = 0, System.DBNull.Value, Total) .Add("@ItmRemain", OleDbType.Integer).Value = IIf(txtRemain.Text.Trim.Length = 0, System.DBNull.Value, txtRemain.Text) .Add("@ItmID", OleDbType.Integer).Value = IIf(txtID.Text.Trim.Length = 0, System.DBNull.Value, txtID.Text) End With cmd.ExecuteNonQuery() MsgBox("تمت عملية التحديث بنجاح", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Information, "إنتباه") Else sqlstr = "INSERT INTO tblInventory(ItmName,ItmPrice,ItmIN,ItmTotal,ItmOut,ItmRemain) " & _ "Values(@ItmName,@ItmPrice,@ItmIN,@ItmTotal,@ItmOut,@ItmRemain)"
cmd = New OleDbCommand(sqlstr, con)
With cmd.Parameters .Add("@ItmName", OleDbType.VarWChar).Value = IIf(txtItem.Text.Trim.Length = 0, System.DBNull.Value, txtItem.Text) .Add("@ItmPrice", OleDbType.Integer).Value = IIf(txtPrice.Text.Trim.Length = 0, System.DBNull.Value, txtPrice.Text) .Add("@ItmIN", OleDbType.Integer).Value = IIf(txtIN.Text.Trim.Length = 0, System.DBNull.Value, txtIN.Text) .Add("@ItmTotal", OleDbType.Integer).Value = IIf(txtTotal.Text.Trim.Length = 0, System.DBNull.Value, txtTotal.Text) .Add("@ItmOut", OleDbType.Integer).Value = IIf(txtToOut.Text.Trim.Length = 0, System.DBNull.Value, txtToOut.Text) .Add("@ItmRemain", OleDbType.Integer).Value = IIf(txtRemain.Text.Trim.Length = 0, System.DBNull.Value, txtRemain.Text)
cmd.ExecuteNonQuery() MsgBox("تمت عملية الإضافة بنجاح", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Information, "إنتباه")
End With End If
con.Close() LoaddgvInventory() Catch ex As Exception If con.State = ConnectionState.Open Then con.Close() MsgBox(ex.Message) End Try
وباقي الأكواد سوف تتطلع عليها في المشروع
المشروع بعد التعديل :
أتمنى لك التوفيق
السلام عليكم
اولا تسلم ايدك جدا يا استاذى الفاضل khodor1985
بالفعل انا حاولت التعديل لمايناسبنى وما هو افضل للمشروع
هذا تعديلى من امس كما فى الصور
وعجبنى طريقة تفكيرك جدا
وسوف احمل مشروعك
لسببين حتى
اتعلم التعامل مع القواعد وافهم الاكواد
ثانيا حتى
افهم ما تقصده اكتر واوصل لوجهة نظرك
ساعود بعد قراءة وفهم الاكواد جيدا
اخى لدى استفسار بسيط
بالنسبة لحقل الصادر = الكمية المباعة
طيب الوارد = ايه؟؟؟؟؟؟
|