الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن معالجة مشكلة حذف سجل من جدول

مغلق
بدأه aymansoft في 5 يونيو 2005 · 7 رد · 2,976 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف يمكن معالجة مشكلة حذف سجل من جدول يعتمد على الترقيم التلقائي في حقل من الحقول وهو المفتاح الرئيسي للجدول

بمعنى لو كان عندي السجلات التالية

1

2

3

4

لو حذفنا سجل رقم 2 سوف يكون هناك فجوة في الجدول ولا يمكن معالجتها

ياريت طريقة صحيحة في تنظيم مثل هذه الجداول التي تعتمد على حذف سجلات

#2

привет дружёк

أعتقد ان المشكلة تحل بهذه الطريقة

اصنع حقلا في الجدول للاعداد الصحيحة مثلا mykey

لا داعي ان تجعله يأخذ قيمة تلقائية ولكن عند اضافة سجل جديد دعه ياخذ قيمة عدد السجلات في الجدول الحالي

procedure TForm1.insertClick(Sender: TObject);
begin
 with Table1 do
 begin

 Insert;
 Table1MyKey.ReadOnly:=false;
 FieldByName('MyKey').AsInteger:=Table1.RecordCount+1;
 FieldByName('Name').AsString:='hi';
 Post;
 Table1MyKey.ReadOnly:=true;
 end;

end;

لاتسمح للمستخدم ان يغير قيمة الحقل وذلك لجعل الحقل يبدو تلقائيا.

اجعل لهذا الحقل الخاصية Readonly=true; يعني في الحدث onCreate للفورم اكتب

 
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1MyKey.ReadOnly:=true;
end;

ضع زرا على الفورم وسمه مثلا Delete

Table1.Delete;
 Table1.Active:=true;
Table1MyKey.ReadOnly:=false;
 while not Table1.Eof do
   begin
    Table1.Edit;
    Table1.FieldByName('MyKey').AsInteger:=Table1.RecNo;
    Table1.Post;
    Table1.Next;
   end;
   Table1MyKey.ReadOnly:=true;

انا جربت الطريقة ومشي الحال منتظر ردودك خيه

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#3

شكرا لك أخي الكريم على اجابتك

ولكن الإجابة ليست كافية

على حسب مافهمت الكود الخاص بزر حذف يقوم بعمل تعديل على أرقام السجلات السابقة بحيث يعيد ترتيب الأرقام ولكن تعتبر هذه مشكلة بحيث أن بعض السجلات مأرشفة على الأرقام السابقة ونقطة أخرى أن هذا الجدول مرتبط بجدول أخر بنفس الحقل فإذا تم تغير الحقل فإن العلاقة سوف تتدمر

الرجو النظر وحل المشكلة اخواني الكرام

#4

من المفترض أن لا تقوم بتغير هذا الترتيب، فهو الصحيح، واغلب قواعد البيانات التى تحتوى على ترقيم تلقائي لن تقوم بعملية بداية الترقيم من اخر رقم موجود في قاعدة البيانات، بل من اخر رقم تم إستخدامه حتى لو تم الغائها

لانه في كثير من الأحيان يكون لديك جدول متصل بالعديد من الجداول وعملية التغيير سوف تتطلب التغير في جميع الجداول، وحسب ما ذكرت يا أيمن فلو كان لديك جدول به 10000 سجل ومتصل بعدة جداول، ولغيت السجل رقم 5، فهل سوف تقوم بإزاجة 9995 سجل في الجدول وتغير القيم في جميع الجداول الأخرى؟؟؟

هذا اعتبره تصميم سيئ للبرنامج :)

−1

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#5

شكرا أخي محمد نسمان

1

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#6

السلام عليكم

1- ضع حقل الترقيم الاساسي primary key بدون ترقيم تلقائي ويجب عليك انت ان تعطي كل سجل تضيفه انت الرقم التلقائي

لو فرضنا ان اسم الحقل هو ID فتحضر اكبر قيمة و تضيف عليه ا واحد في الجدول (Select Max(ID)+1 from TBL Name)

هذه الطريقة تعمل مثل الرقم التلقائي

2- لاسترجاع رقم محذوف واضافة رقم تلقائي بنفس الرقم هناك طريقتين استخدمتهم وكل منهم ناجح ولكن ليست طريقة مثلة

أ - عند حذف رقم تقوم باضافة هذا الرقم الى جدول اخر مثلاً (DelNumbers) وعند اضافة سجلات تقوم بفحص وجود اي سجل

في هذا الجدول (DelNumbers) فاذا كان هناك سجلات تقوم باخذ اصغرها مثلا ثم وضعه كرقم تلقائي

واذا كان الجدول فارغا تقوم بعمل الخطوة الاولى

1

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7

السلام عليكم

يجب أخى الكريم عندما يحذف سجل يحذف جميع ما يتعلق بهذا السجل من حركات او بيانات أخرى التى لها علاقة معة و أيضا يجب منع الحذف للسجل التى يكون له بيانات معلقة بجداول أخرى حتى لا تحصل بالسجلات الجديدة مشكلة

و شى عادى و طبيعى أنك تحذف رقم 2 من أصل رقم 1 :2 : 3

و التنقل بين السجلات إستخدم خاصية Locate وكأنى أعرف انك تريد التنقل بين السجلات من خلال Max Number

طبعا ستحصل مشكلة فعلا او فجوة

هذا رأى بالتوفيق

Sami@mtcgaza.com

1
#8

تكميل الرد ----

ممكن أن تسخدم بدل كود FieldByName('MyKey').AsInteger:=Table1.RecordCount+1;

أعلى قيمة بالحقل +1 وهكذا لا يمكن ان يكون سجل مكان سجل أخر

و مع احترامى و تقديري إلى الأخ الفاضل الذى طرح الحل

1

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…