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

هذا السلوك شائع في معظم قواعد البيانات التي تدعم نمط بيانات AUTO_INCREMENT
والحقيقة أن هذا تصرف سليم، إذ يوحي بأن هناك سجلات محذوفة (هذا إن فرضنا أنه يظهر للمستخدم)، نوع من الـ Traceability إن شئت

غالبا هناك طرق ملتوية لإعادة الترقيم التسلسلي (تختلف الطريقة لكل قاعدة بيانات عن أخرى...)
في MS Access يمكن ضغط وإصلاح قاعدة البيانات (Compact And Repair) لتحصل على ترقيم تسلسلي جديد
استخدم للبحث الكلمات المفتاحية: reset auto increment (وأضف اسم قاعدة البيانات)

بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#3
شكرا اخي الكريم
السؤال هو هل استغني عن AutoIncrement في برنامجي؟
وهل هناك كود لعمل AutoIncrement برمجيا؟
ممكن مثال بارك الله فيك
الرد
#4
السؤال هو هل استغني عن AutoIncrement في برنامجي؟
الأمر يرجع إليك، لا توجد قواعد ثابتة في ذلك.
عموما (في MS Access): إن كان للمستخدم ترقيم خاص (ID وحيد يميّز السجلات) فيمكنك الاستغناء عن AutoInc واستخدم هذا الـ ID. غير ذلك يمكنك أن تريح نفسك من عناء تسيير الترقيم واستخدم AutoInc ثم لقّنهُ للمستخدم.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
[-] كل من 1 user says قال شكرا ل kachwahed على المشاركة المفيدة
  • wadoud
الرد
#5
(27-02-2016, 11:42 AM)kachwahed كتب : السؤال هو هل استغني عن AutoIncrement في برنامجي؟
الأمر يرجع إليك، لا توجد قواعد ثابتة في ذلك.
عموما (في MS Access): إن كان للمستخدم ترقيم خاص (ID وحيد يميّز السجلات) فيمكنك الاستغناء عن AutoInc واستخدم هذا الـ ID. غير ذلك يمكنك أن تريح نفسك من عناء تسيير الترقيم واستخدم AutoInc ثم لقّنهُ للمستخدم.
------------------------------------------ 
السلام عليكم 
الفكرة عملية وسليمة حيث في حالة إذا أردت استعادة سجل محذوف لن يتعارض مع رقم السجل وتقع في Violation de clé 
واذا اردت التخلص من الترقيم التلقائي اليك هذه الدالة كنت بحاجة اليها في ذات يوم : 

كود :
procedure TForm1.Table1AfterInsert(DataSet: TDataSet); begin               NewCode(DataSet,' fieldName key'); end; FUNCTION newcode(dataset: Tdataset ;champ:string):integer;                 {-----------------------------------------} var   qry : TQuery;      _var : integer;  BEGIN       TRY           qry:= TQuery.Create(nil);           qry.sql.clear;           qry.Active := false;           qry.DatabaseName := (dataset as ttable).DatabaseName;           qry.sql.Clear;           qry.sql.Add('select max ('+champ+') as maxcode from '+ (dataset as TTable).TableName);           qry.Active := true;           _var  := qry.fieldbyname('maxcode').asinteger + 1;           IF dataset.State = dsinsert THEN           (dataset as ttable).fieldByName(champ).asinteger := _var;       FINALLY           qry.free;       END;        result := _var;  END;
حتى لو فشلت يكفيك شرف المحاولة....
الرد
#6
و عليكم الاسلام أخي
وقعت في المشكل و حللته عبر
حذف الحقل 'حقل الترقيم التلقائي 'نهائيا و إعادة إنشائه بكل بساطة و سيكون هناك ترقيم جديد و مرتب و هذا هو أفضل و أسهل حل وجدته و الأنجع فقط في حالة لم يكن هناك تأثير على حذف الحقل
الرد


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


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