سؤال

وأود أن تغيير سلوك زر إدراج على شريط DBNavigator القياسية، من ادخال بيانات لإلحاق.

ويمكن أن أقوله فخ انقر فوق زر في حال BeforeAction، تفعل إلحاقي، وما إلى ذلك؛ ثم في الحدث OnClick إجهاض إدراج الأصلي، ولكن هذا يبدو قليلا من الإختراق. أي أفكار أفضل؟ أنا باستخدام D6 (500،000 كيلومترا في الساعة، وكان لا يزال قويا ...).

وشكرا لأية نصيحة

والتحيات،

وPhilW.

هل كانت مفيدة؟

المحلول

هل يمكن اشتقاق الفئة الخاصة بك من TDBNavigator وتجاوز أسلوب BtnClick. أو، عن حل سريع وقذرة، هل يمكن أن تغيير زر إدراج وانقر معالج في وقت التشغيل، منها مثلا:

type
  THackDBNavigator = class(TDBNavigator);

procedure TForm1.DBNavigatorInsertClick(Sender: TObject);
var
  DBNavigator: TDBNavigator;
begin
  DBNavigator := ((Sender as TControl).Parent as TDBNavigator);
  if Assigned(DBNavigator.DataSource) and (DBNavigator.DataSource.State <> dsInactive) then
  begin
    if Assigned(DBNavigator.BeforeAction) then
      DBNavigator.BeforeAction(DBNavigator, nbInsert);

    DBNavigator.DataSource.DataSet.Append;

    if Assigned(DBNavigator.OnClick) then
      DBNavigator.OnClick(DBNavigator, nbInsert);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  THackDBNavigator(DBNavigator1).Buttons[nbInsert].OnClick := DBNavigatorInsertClick;
end;

نصائح أخرى

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

وقواعد البيانات بدلا من ذلك القيام إلحاقي، الذي يكتب البيانات إلى نهاية الملف البدني، وترتيب فهرس يسيطر على الطريقة التي يظهر الصف إلى وضعه في المكان الصحيح في الملف.

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

ويمكنك التحقق من ذلك للتأكد من صحتها عن طريق إنشاء قاعدة بيانات دون فهرس، ومحاولة القيام على حد سواء إدراج وإلحاق عدة مرات، ودراسة البيانات بدقة بعد كل عملية.

وTOndrej: عظيم! أنا لم تقدر هذه التقنية. شكرا!

وKen الأبيض: أنا أفهم وجهة نظرك، ولكن بصريا للمستخدمين لي أنه يحدث فرقا - وDBNavigator تسيطر على DBGrid حيث، في معظم الحالات، وهناك الكثير من الصفوف غير المستخدمة في الشبكة. يبدو أن أكثر اتساقا لديهم سجلات جديدة تظهر في الجزء السفلي من الشبكة بدلا من مجرد فوق أي وقت مضى حيث السجل الحالي هو في تلك اللحظة. ولكن شكرا لجوابك.

والتحيات، PhilW.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top