كيف أعيد قيمة index عند حذف سطر؟
#1
السلام عليكم: شرعت في برمجة مشروع بسيط مستعملا قاعدة بيانات absolute database، في البداية أدرجت 5 مستخدمين للبرنامج، وأنهيت المكونات الأخرى على المشروع، بعدها جربت حذف مستخدمين إثنين، تمت عملية الحذف، لكن قاعدة البيانات لازالت تحتفظ بخمسة مستخدمين في table.itemindex.
فكيف يتم تصحيح عدد الأسطر عند الحذف؟
الرد
#2
حسب فهمي لما كتبته في سؤالك

قم بتصليح قاعدة البيانات (Database -> Repair Database)

[صورة: attachment.php?aid=3813]


الملفات المرفقة
.gif   Untitled-1.gif (الحجم : 31.34 ك ب / التحميلات : 99)
[-] كل من 1 user says قال شكرا ل merouane على المشاركة المفيدة
  • belnono
الرد
#3
أخي مروان: شكرا على الرد، إلا أنني قمت بذلك مسبقا عدة مرات، ولازالت تحتفظ بالعدد الأول من الأسطر.
لا أعلم أين الخلل.
الصورة الأولى لقاعدة البيانات قبل الحذف :
https://c.top4top.net/p_93659lk11.gif
الصورة للقاعدة بعد الحذف :
https://d.top4top.net/p_936dn5ec1.gif
بعدها قمت بـ repair database
-------------------------------------------
الكود في الرز بعد الحذف :
showmessage(inttostr(dtmdl.TABLE1utilisateur.Index));
والنتيجة :
https://f.top4top.net/p_936hznel1.gif
الرد
#4
أرفق المثال (إذا أمكن).

أسهل طريقة - بدون تعقيدات - يمكن أن أفكر فيها هي:

تغيير N إلى Integer (إنشاء حقل آخر اسمه id يكون AUTOINC)
عبر تعليمة SQL بسطر وحيد يمكن معرفة آخر N في الجدول.
ولأن الإضافة في البداية ستعتمد على هذه التعليمة ستكون N مرتبة تصاعديا، بعد الحذف لن يكون هناك تكرار في الأرقام المعطاة للحقل (ستكون هناك فجوات بدون تكرار: مثل 1.2.3.5.7.13.25).

كود :
procedure addNewUser; var  LastN: Integer; const  SQLText = 'SELECT top 1,1 N FROM securite ORDER BY N DESC;'; begin  ABSQuery1.SQL.Clear;  ABSQuery1.SQL.Text := SQLText;  ABSQuery1.Active := True;  LastN := ABSQuery1.Fields[0].AsInteger;  ABSTable1.Append;  ABSTable1.FieldByName('N').AsInteger := LastN + 1;  ABSTable1.FieldByName('Utilisateur').AsString := 'BlaBla';  ABSTable1.Post; end;
[-] كل من 1 user says قال شكرا ل merouane على المشاركة المفيدة
  • belnono
الرد
#5
بارك الله فيك أخي مروان، لقد تم الحل لو لا أنك وضعت الكود الخاص بـ index
من خلال المثال الذي وضعته أنت عرفت أنني كنت في واد آخر.
إذن index هي خاصة بعدد الأعمدة، وليس الأسطر
لقد بحثت منذ قليل فوجدت أن الأسطر يرمز لها بـ record count.
--------------------------------------------------------------------------------
المصادفة هي التي تركتني في هذه الإشكالية: إذ في تطبيقي للمرة الأولى
كان عدد الأعمدة 5 وكذلك عدد الأسطر في المستخدمين 5
فكان الحذف يتم من الأسطر، والخطأ أنني كنت استعمل الأعمدة في التحقق.
---------------------------------------------------------------------------------
شكرا
الرد
#6
رُب مصادفة خير من ألف ميعاد كما يقال.
من قال حاد عن أصله أو قال مات فقد كذب
الرد


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


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