المشاركات : 259
المواضيع 35
:
: 383
الإنتساب : Feb 2011
السلام عليكم
عندما احذف سجل من قاعدة بيانات اكسس عن طريق دلفي لاحظت ان الترقيم التسلسلي يتواصل اي عند حذف رقم 2 و بعدها ادخل سجل جديد يبدا الترقيم من 3 و ليس 2
هل من حل؟
هل ألغي الترقيم التلقائي؟ وما هو البديل الأحسن ؟
شكرا.
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
وعليكم السلام ورحمة الله وبركاته،
هذا السلوك شائع في معظم قواعد البيانات التي تدعم نمط بيانات AUTO_INCREMENT
والحقيقة أن هذا تصرف سليم، إذ يوحي بأن هناك سجلات محذوفة (هذا إن فرضنا أنه يظهر للمستخدم)، نوع من الـ Traceability إن شئت
غالبا هناك طرق ملتوية لإعادة الترقيم التسلسلي (تختلف الطريقة لكل قاعدة بيانات عن أخرى...)
في MS Access يمكن ضغط وإصلاح قاعدة البيانات (Compact And Repair) لتحصل على ترقيم تسلسلي جديد
استخدم للبحث الكلمات المفتاحية: reset auto increment (وأضف اسم قاعدة البيانات)
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
المشاركات : 259
المواضيع 35
:
: 383
الإنتساب : Feb 2011
شكرا اخي الكريم
السؤال هو هل استغني عن AutoIncrement في برنامجي؟
وهل هناك كود لعمل AutoIncrement برمجيا؟
ممكن مثال بارك الله فيك
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
27-02-2016, 11:42 AM
(آخر تعديل لهذه المشاركة: 27-02-2016, 11:43 AM بواسطة kachwahed.)
السؤال هو هل استغني عن AutoIncrement في برنامجي؟
الأمر يرجع إليك، لا توجد قواعد ثابتة في ذلك.
عموما (في MS Access): إن كان للمستخدم ترقيم خاص (ID وحيد يميّز السجلات) فيمكنك الاستغناء عن AutoInc واستخدم هذا الـ ID. غير ذلك يمكنك أن تريح نفسك من عناء تسيير الترقيم واستخدم AutoInc ثم لقّنهُ للمستخدم.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
المشاركات : 35
المواضيع 6
:
: 1
الإنتساب : Mar 2008
(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;
حتى لو فشلت يكفيك شرف المحاولة....
المشاركات : 531
المواضيع 96
:
: 118
الإنتساب : Jun 2014
و عليكم الاسلام أخي
وقعت في المشكل و حللته عبر
حذف الحقل 'حقل الترقيم التلقائي 'نهائيا و إعادة إنشائه بكل بساطة و سيكون هناك ترقيم جديد و مرتب و هذا هو أفضل و أسهل حل وجدته و الأنجع فقط في حالة لم يكن هناك تأثير على حذف الحقل