تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] ظهور رسالة خطأ فى كود إعادة الترقيم التلقائى
#11
من وجهة نظري :
كلمة ALTER لا تستخدم ابداً من داخل البرنامج
الا اذا كان برنامجك هدفة التعديل على هيكل قواعد البيانات ( يعني اداه للمطورين تساعدهم على التعديل على قاعدة البيانات )

اما غير ذلك فهذا غير مقبول برمجياً : انا اكتب لك وحاط يدي فوق راسي من هول الفكرة التي ريد تطبيقها, الا اذا فهمت غلط!!!

وظيفة الحقل الرقمي ID الذي يتصف بالمفتاح الأساسي هو لخلق علامة فريدة تميزة عن جميع السجلات ولمنع التكرار ولدواعي التحديث على السجل.
فقط وفقط وفقط وفقط لاغير. ( هو ليس مصمم لغرض التسلسل نهائياً وأبداً انسى الفكرة )

اذا كنت تريد رقم متسلسل قم بإنشاء حقل آخر يخدم مبتاك, ولا تقترب من المفتاح الأساسي لأهداف أخرى. 

اذا كنت تريد رقم متسلسل فقط يظهر على الشاشة مع كل سجل لغرض الترتيب على الشاشة فقط قم بانشاء حقل في البرنامج وليس في قاعدة البيانات واعطة القيمة التي تناسبك لعرضها , عامود جديد في الـ DataGridView يكفي. حلول كثيرة جداُ في هذا الجانب.

اذا كنت فعلاً في بداية التطوير ومع عمل اختبارات كثيرة على البرنامج مما ينتج عنه انشاء سجلات في قاعدة البيانات لأغراض الإختبار والتجربة  , والآن تريد تصفير المفاتيح الأساسية لأنك انتهيت من التطوير وتريد تحزيم البرنامج للعمل الحقيقي.
هنا نعم يمكنك تصفير المفاتيح الأساسية ولكن من خلال قاعدة البيانات نفسها وليس من البرناج, ( وأيضاً ليس بحذف العامود أبداً )
تقوم بحذف جميع السجلات التجريبية وافراغ الجداول ثم تصفير المفاتيح الأساسية.
بوضع الأمر التالي في نافذة استعلام في الـ SqlServer ( لكل جدول تحتاج تصفيرة ) ( وليس بحذف العامود )
سيقوم هذا الامر بإعادة الرقم إلى صفر ( هذا يعني ان اول طلب ادخال جديد سيأخذ الرقم 1 )
كود :
DBCC CHECKIDENT ('[TestTable]', RESEED, 0);
GO
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , ابراهيم ايبو
#12
(02-05-20, 12:31 PM)عبدالله الدوسري كتب : من وجهة نظري :
كلمة ALTER لا تستخدم ابداً من داخل البرنامج
الا اذا كان برنامجك هدفة التعديل على هيكل قواعد البيانات ( يعني اداه للمطورين تساعدهم على التعديل على قاعدة البيانات )

اما غير ذلك فهذا غير مقبول برمجياً : انا اكتب لك وحاط يدي فوق راسي من هول الفكرة التي ريد تطبيقها, الا اذا فهمت غلط!!!

وظيفة الحقل الرقمي ID الذي يتصف بالمفتاح الأساسي هو لخلق علامة فريدة تميزة عن جميع السجلات ولمنع التكرار ولدواعي التحديث على السجل.
فقط وفقط وفقط وفقط لاغير. ( هو ليس مصمم لغرض التسلسل نهائياً وأبداً انسى الفكرة )

اذا كنت تريد رقم متسلسل قم بإنشاء حقل آخر يخدم مبتاك, ولا تقترب من المفتاح الأساسي لأهداف أخرى. 

اذا كنت تريد رقم متسلسل فقط يظهر على الشاشة مع كل سجل لغرض الترتيب على الشاشة فقط قم بانشاء حقل في البرنامج وليس في قاعدة البيانات واعطة القيمة التي تناسبك لعرضها , عامود جديد في الـ DataGridView يكفي. حلول كثيرة جداُ في هذا الجانب.

اذا كنت فعلاً في بداية التطوير ومع عمل اختبارات كثيرة على البرنامج مما ينتج عنه انشاء سجلات في قاعدة البيانات لأغراض الإختبار والتجربة  , والآن تريد تصفير المفاتيح الأساسية لأنك انتهيت من التطوير وتريد تحزيم البرنامج للعمل الحقيقي.
هنا نعم يمكنك تصفير المفاتيح الأساسية ولكن من خلال قاعدة البيانات نفسها وليس من البرناج, ( وأيضاً ليس بحذف العامود أبداً )
تقوم بحذف جميع السجلات التجريبية وافراغ الجداول ثم تصفير المفاتيح الأساسية.
بوضع الأمر التالي في نافذة استعلام في الـ SqlServer ( لكل جدول تحتاج تصفيرة ) ( وليس بحذف العامود )
سيقوم هذا الامر بإعادة الرقم إلى صفر ( هذا يعني ان اول طلب ادخال جديد سيأخذ الرقم 1 )
كود :
DBCC CHECKIDENT ('[TestTable]', RESEED, 0);
GO

كلمة ALTER يمكن استخدامها من داخل البرنامج ولا داعى ان تضع يدك على رأسك 
والدليل ان جملة 

كود :
ALTER TABLE Tab1 DROP CONSTRAINT PrimaryKey

تعمل فى حال كانت قاعدة البيانات من نوع Access 
اما فى حال كانت قاعدة البيانات من نوع SQL يظهر الخطأ المشار اليه فى سؤالى 
الرد }}}
#13
السلام عليكم ورحمة الله وبركاته
اخي واستاذي المحترم عبد الله الدوسري جزاك الله كل خير على ماتقدمه من علم وخبرة لكل اعضاء المنتدى 
كلامك حول اعادة الترقيم صحيح من حيث عدم حذف الحقل ويجب اعادة تصفيره من داخل  sqlserver وفق الدالة المذكورة
والمهم هو الا يمكننا تنفيذ هذه الدالة من خلال فيجوال ستوديو؟
هنا اخذت نفسا عميقا وقلت في نفسي لم لا اجرب!!! فالتجربة خير برهان وهي الفيصل في صحة ماهو مطلوب 
وفعلا قمت بكتابة الكود ووضعته في بوتون في برنامجي في فيجوال ستوديو والذي فيه انشئ قاعدة البيانات  من نوع sqlserver والجداول و premarykey وغيرها 
قمت اولا بحذف 4 من الصفوف الاخيرة من الجدول في Sqlserver حيث كان الترقيم يقف عند 10فاصبح لدي 6 صفوف ويجب بعد تنفيذ الدالة ان يبدأ الترقيم من رقم 7
ونفذت الدالة وكانت ناجحة حيث اعاد الترقيم وبدأ الترقيم من رقم 7 وصاعدا
لذلك قمت بهذا الرد ليستفيد منه كل من يريد الاستيضاح والمعرفة واليكم الكود حسب المسميات التي عندي
السيرفر - قاعدة البيانات - اسم الجدول وهو موجود في مربع نص Txt_TblName حقل الترقيم 
كود :
.\SQLSERVER2014 - Ciwan - Cv_Personal - ID

وهذا هو الكود الذي استخدمته لذلك
كود :
 Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
       If Cmb_ServerName.Text = String.Empty Then
           MsgBox("الرجاء تحديد اسم السيرفير  ", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading, "")
           Exit Sub
       ElseIf CmDBname.Text = String.Empty Then
           MsgBox("الرجاء كتابة اسم قاعدة البيانات ", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading, "")
           Exit Sub
       End If
       If Txt_TblName.Text = String.Empty Then
           MsgBox("اختر اسم الجدول المراد اعادة ترقيمه", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading, "")
           Exit Sub
       End If
       Try
           If Prd.FindDatabases(Cmb_ServerName, Cmb_Database, CmDBname) > 0 Then ' التحقق من اسم السيرفر واسم قاعدة البيانات
               If MessageBox.Show("هل انت متأكد من اعادة ترقيم الجدول", "تأكيد ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                   Dim StrSQL As String = "DBCC CHECKIDENT ('" & Txt_TblName.Text & "', RESEED, 0);"
                   Dim cn As New SqlClient.SqlConnection("Server =" & Cmb_ServerName.Text & ";database=" & Cmb_Database.Text & ";integrated security=True")
                   Dim StrTableName As String = "Txt_TblName"
                   Dim da As New SqlClient.SqlDataAdapter(StrSQL, cn)
                   Dim dt As New DataSet
                   da.Fill(dt, StrTableName)
                   MsgBox(" تم اعادة ترقيم الجدول   {" & Txt_TblName.Text & "}بنجاح ", MsgBoxStyle.Information + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading)
               End If
           End If
       Catch ex As Exception

       End Try

   End Sub
اخي مصطفى كلنا نتعلم من بعض نتميز عن بعضنا بتجربة كل واحد منا عن الاخر اضافة للمعلومات والخبرة التي اكتسبها  
سعداء ان شاء الله بأي معلومة جديدة
دمتم بألف خير
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: asemshahen5 , عبدالله الدوسري
#14
أخي مصطفى_ظيمة
لتوصيل الفكرة التي أقصدها
من داخل البرنامج لديك إمكانية عمل كل شيء تقريباً على قاعدة البيانات , بإمكانك تدمير قاعدة البيانات لو أردت
بإمكانك تنفيذ الأوامر كلها على قاعدة البيانات
ليس هذا هو القصد
أنا قمت بإنشاء حقل مفتاح أساسي , لماذا اقوم بحذفة وإعادة إنشائة أو إزالة المفتاح الأساسي من الحقل من خلال البرنامج أو حتى من قاعدة البيانات؟؟؟؟ ( فقط لأعيد التسلسل!!! )
الإمكانية نعم لديك !! لكن هذا الإجراء خطاء .
لا تتم الأمور بهذة الطريقة.
خطاء شائع إستخدام المتاح الأساسي كترقيم متسلسل
( لو كان المفتاح الأساسي ينطق لقال لك أنا لست مصمم لهذا الغرض أبداً ) إستخدم حقل آخر مثلاً ( SortOrder ) وأعد تسلسل هذا الحقل كيفما تشاء.
الرد }}}
#15
إعادة ترتيب حقل الـID هو من اكبر الكبائر البرمجية.
الرد }}}
#16
عايز أعمل اتصال للفيجوال بيسك بقاعدة بيانات أكسيل بس مع الاخذ في الاعتبار إن يكون ملف الاكسيل مشفر .ولكم جزيل الشكر
الرد }}}
تم الشكر بواسطة: asemshahen5
#17
(11-05-20, 05:45 PM)أبوبكر سويدان كتب : إعادة ترتيب حقل الـID هو من اكبر الكبائر البرمجية.

ما الكبيرة البرمجية فى إعادة ترتيب حقل ال ID اذا استدعت الضرورة ذلك ؟
الى جانب اذا كان هذا متاح فما الضرر ؟
الرد }}}
تم الشكر بواسطة: asemshahen5
#18
(25-05-20, 09:53 PM)مصطفى_ظيمة كتب :
(11-05-20, 05:45 PM)أبوبكر سويدان كتب : إعادة ترتيب حقل الـID هو من اكبر الكبائر البرمجية.

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

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

إذا اضطررت لترتيب السجلات فاعمل حقلاً رقمياً خاصا بالترتيب، وقم بتعديله عوضاً عن تعديل رقم الاي دي، ثم رتب السجلات بدلالته.

أعمل مبرمجاً منذ عشرين سنة، ولم أضطر في حياتي إلى ترتيب الاي دي.

فلماذا أظهر الاي دي أمام المستخدم أصلا؟

هذه شاشة إدارة الاصناف كمثال:

   

وهذا تقرير.. والترقيم موجود من ضمن إمكانيات التقرير وليس برقم الاي دي:

   
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , asemshahen5
#19
أعمل ID بتاعك من نوع Int يكون مفتاح اساسي
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  عدم القدرة على إغلاق البرنامج وظهور رسالة the operation could not be completed صالح عبدالله 2 63 12-04-24, 06:03 AM
آخر رد: صالح عبدالله
  [سؤال] مشكله كود TRansaction وحقل الترقيم التلقائي 01AHMED 0 120 09-02-24, 10:31 PM
آخر رد: 01AHMED
  [VB.NET] مشكلة ظهور textbox بعد حذفه من الفورم مبرمج صغير 1 1 231 27-01-24, 02:04 AM
آخر رد: مبرمج صغير 1
  [VB.NET] ظهور التاريخ غير مرتب بالأقدم في datagridview مبرمج صغير 1 4 309 26-01-24, 03:41 PM
آخر رد: atefkhalf2004
  الترقيم التلقائي محمد خيري 4 317 20-01-24, 03:12 AM
آخر رد: محمد خيري
  [VB.NET] إعادة استدعاء البيانات من قاعدة بيانات اكسس والاهم الصورة مبرمج صغير 1 1 282 13-01-24, 01:17 PM
آخر رد: مبرمج صغير 1
  [VB.NET] ارسال رسالة واتساب h2551996 0 203 07-01-24, 12:17 PM
آخر رد: h2551996
  [سؤال] كيفية تشغيل ملف باتش دون ظهور "نافذةالـ Consol "؟ AmeenRashed 9 685 14-12-23, 12:07 PM
آخر رد: asmarsou
  احتاج كود اعادة الترقيم في السنة الجديدة ranosh 3 465 27-11-23, 01:25 AM
آخر رد: justforit
  [VB.NET] كيف يمكن إخفاء ظهور الشاشة السوداء فى الـــ console AmeenRashed 2 324 15-11-23, 03:51 PM
آخر رد: justforit

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


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