delphi4arab منتديات دلفي للعرب
كيف أعيد قيمة index عند حذف سطر؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف أعيد قيمة index عند حذف سطر؟ (/showthread.php?tid=9602)



كيف أعيد قيمة index عند حذف سطر؟ - belnono - 24-07-2018

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


RE: كيف أعيد قيمة index عند حذف سطر؟ - merouane - 25-07-2018

حسب فهمي لما كتبته في سؤالك

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

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


RE: كيف أعيد قيمة index عند حذف سطر؟ - belnono - 25-07-2018

أخي مروان: شكرا على الرد، إلا أنني قمت بذلك مسبقا عدة مرات، ولازالت تحتفظ بالعدد الأول من الأسطر.
لا أعلم أين الخلل.
الصورة الأولى لقاعدة البيانات قبل الحذف :
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


RE: كيف أعيد قيمة index عند حذف سطر؟ - merouane - 25-07-2018

أرفق المثال (إذا أمكن).

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

تغيير 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;



RE: كيف أعيد قيمة index عند حذف سطر؟ - belnono - 25-07-2018

بارك الله فيك أخي مروان، لقد تم الحل لو لا أنك وضعت الكود الخاص بـ index
من خلال المثال الذي وضعته أنت عرفت أنني كنت في واد آخر.
إذن index هي خاصة بعدد الأعمدة، وليس الأسطر
لقد بحثت منذ قليل فوجدت أن الأسطر يرمز لها بـ record count.
--------------------------------------------------------------------------------
المصادفة هي التي تركتني في هذه الإشكالية: إذ في تطبيقي للمرة الأولى
كان عدد الأعمدة 5 وكذلك عدد الأسطر في المستخدمين 5
فكان الحذف يتم من الأسطر، والخطأ أنني كنت استعمل الأعمدة في التحقق.
---------------------------------------------------------------------------------
شكرا


RE: كيف أعيد قيمة index عند حذف سطر؟ - h-farid - 26-07-2018

رُب مصادفة خير من ألف ميعاد كما يقال.