منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : خطا في الترقيم
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم.اخواني كيف اصلح هذا الخطا .لما تكون قاعدة البيانات فارغة تماما ما بها اي سجل يظهر الرسالة هذي

و لما اضيف الرقم 1 يدوي لقاعدة البيانات الترقيم يسير عادي.المشكلة الا المرة الاولى لما تكون قاعدة البيانات فارغة.بارك الله اخواني
اخي محمد خيري
قم بتغيير حقل SerialNo في قاعدة البيانات من رقم الى ترقيم تلقائي ثم قم بحذف اجراء Call serialno_generate من حدث اللود الخاصة بالفورم 2 ، بهذه الطريقة انت لست بحاجة الى توليد رقم للحقل 
 وسوف تحل المشكلة ان شاء الله
ما ضبطت اخي larbihamri كيف ما ذكرت.شكرا على كل حال
السّلام عليكم و رحمة الله و بركاته
إضافة لما قدّمه أخي العربي .. يمكن أن تقوم باستدعاء الكود التالي بحدث الفورم لود ..
كود :
   Public Sub Test_Max_Record()
       Call SNoNavigation()
       Dim InfoCommand As New OleDbCommand(" SELECT MAX(SerialNo) FROM Table1  ", OleCn)
       If OleCn.State = ConnectionState.Closed Then OleCn.Open()
       If InfoCommand.ExecuteScalar Is DBNull.Value Then
           txtSerialNo.Text = 1
       Else
           txtSerialNo.Text = InfoCommand.ExecuteScalar + 1
       End If
   End Sub

تحياتي
شكرا اخي عبد العزيز البسكري.ما عرفت اشغلو.هل يمكن اعدل فقط على الكود بملفي بارك الله فيك
انتظر اذن أخي الكريم .. الدواء الشافي من استاذنا   elgokr
تحياتي
(29-10-18, 06:21 PM)عبد العزيز البسكري كتب : [ -> ]انتظر اذن أخي الكريم .. الدواء الشافي من استاذنا   elgokr
تحياتي


هذه شهادة اعتز بها اخى وحبيبى عبدالعزيز البسكري
ولا اعلم ماذا اقول بعد كلامك هذا

بخصوص مشكلة الاخ محمد خيري
فتلك الرسالة تظهر بسبب عدم وجود اى بيانات بقاعدة بيانات
حيث انه يستخدم السطر التالى
كود :
a = Dst.Tables("Table1").Rows(i)("SerialNo").ToString + 1

لو وضعنا انفسنا مكان البرنامج لقراءة الكود
عند جزء
كود :
Rows(i)

والتى تعنى مثلاً
كود :
Rows(-1)

بنائاً على الكود فى المشروع
السؤال هنا تفتكر هو من الاساس هل الجدول يحتوى على اى من Rows طبعاً لا طيب
لذلك تظهر تلك الرسالة بان قيمة -1 غير صالحة هل تعتقد ان بداية العد فى Rows يبداء بـ -1
طيب حتى الان وضحنا سبب المشكلة كيف الان يمكن معالجة الامر 

هنا ناتى على الاسطر التالية من الكود فى المشروع
كود :
           i = Dst.Tables("Table1").rows.count - 1
           a = Dst.Tables("Table1").Rows(i)("SerialNo").ToString + 1
           txtSerialNo.Text = a

وفقط نستبدلها بالاسطر التالية
كود :
           If Dst.Tables("Table1").rows.count > 0 Then
' فى حالة ان الجدول يحتوى على بيانات سيقوم بتنفيذ هذا الكود
               i = Dst.Tables("Table1").rows.count - 1
               a = Dst.Tables("Table1").Rows(i)("SerialNo").ToString + 1
           Else
' فى حالة ان الجدول فارغ سيقوم بتنفيذ هذا الكود
               i = 0
               a = i + 1
           End If
           txtSerialNo.Text = a

طيب ايه اللى انا عملته وليه شرط التحقق
هنا انا بقول فى شرط التحقق اذا كان الجدول بقاعدة البيانات لا تحتوى على اى بيانات اى انها فارغة
قم بجعل القيم لكل من i و a ارقام افتراضية غير قابلة للمعادلة الحسابة اى قيمة ثابتة وهو 0 و +1 على قيمة 0
طيب وفى حالة ان الجدول اصبح يحتوى على بيانات فهنا سيقوم بتنفيذ الكود الذى كان سابقاً يقوم بعرض رسالة خطاء
لكن فى هذه المرة لم يعرضها لان اصبح الجدول تحتوى على بيانات فعلية وبدون اى مشكلة
اتمنى ان يكون الشرح مبسط وموضح به سبب المشكلة وان الامور بسيطة لحلها
تحياتى للجميع
وتمنياتى لكم التوفيق
كما قال اخي عبد العزيز
تدخلاتك دواء استاذ elgokr
الله ينور لك كل الطرق استاذ elgokr هذا المطلوب كلو تمام الله يبارك فيك ان شاء الله
أو يمكنك أن تجرب هذا الكود أسهل و أبسط من كل هذا :

كود :
Dim Dst = New DataSet
   Dim OleCn As New OleDbConnection
   Dim myDA As OleDbDataAdapter
   Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Try
           SNoNavigation()
           txtName.Focus()
           Me.KeyPreview = True
       Catch ex As Exception
           MsgBox(ex.Message(), MsgBoxStyle.Critical, "خطأ")
       End Try
   End Sub
   Private Sub SNoNavigation()
       Try
           OleCn.ConnectionString = "Provider=Microsoft.Jet.oledb.4.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\DATABASEDDF.mdb;Persist Security Info=False"
           If OleCn.State = ConnectionState.Closed Then OleCn.Open()
           myDA = New OleDbDataAdapter("Select IIF(Max(SerialNo) Is NULL,1,Max(SerialNo)+1) From Table1", OleCn)
           myDA.Fill(Dst, "Table1")
           txtSerialNo.Text = Dst.Tables("Table1").Rows(0)(0).ToString()
       Catch ex As Exception
           MsgBox(ex.Message(), MsgBoxStyle.Critical, "خطأ بالترقيم")
       End Try
   End Sub
الصفحات : 1 2