delphi4arab منتديات دلفي للعرب

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

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

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

بالتوفيق.
شكرا اخي الكريم
السؤال هو هل استغني عن AutoIncrement في برنامجي؟
وهل هناك كود لعمل AutoIncrement برمجيا؟
ممكن مثال بارك الله فيك
السؤال هو هل استغني عن AutoIncrement في برنامجي؟
الأمر يرجع إليك، لا توجد قواعد ثابتة في ذلك.
عموما (في MS Access): إن كان للمستخدم ترقيم خاص (ID وحيد يميّز السجلات) فيمكنك الاستغناء عن AutoInc واستخدم هذا الـ ID. غير ذلك يمكنك أن تريح نفسك من عناء تسيير الترقيم واستخدم AutoInc ثم لقّنهُ للمستخدم.
(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;
و عليكم الاسلام أخي
وقعت في المشكل و حللته عبر
حذف الحقل 'حقل الترقيم التلقائي 'نهائيا و إعادة إنشائه بكل بساطة و سيكون هناك ترقيم جديد و مرتب و هذا هو أفضل و أسهل حل وجدته و الأنجع فقط في حالة لم يكن هناك تأثير على حذف الحقل