لا توجد سجلات إذا كانت FindKey تؤدي إلى خطأ؟

StackOverflow https://stackoverflow.com/questions/2532244

  •  22-09-2019
  •  | 
  •  

سؤال

باستخدام tdataset.findkekeke يمكنك تحديد موقع السجلات. عندما ينتج عن ذلك ، سيتم وضع مؤشر مجموعات البيانات في السجل الذي تم العثور عليه. عندما يؤدي إلى خطأ ، لا يتم نقل المؤشر. ينتج عن ذلك بيانات السجل قبل العثور على Key التي يتم عرضها في مكونات إدراك البيانات.

كيف يمكنني ترميز نتيجة FindKey لإرجاع سجل فارغ؟

    if Not tblSomeTable.FindKey([SomeSearchData]) then
    begin
        < code to return empty or move data cursor to neutral position >
    end;

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

    If Not tblSomeTable.FindKey([SomeSearchData]) then
    begin
        tblSomeTable.FindKey([-1,2010]);
    end

ما فعلته هو إنشاء سجل وهمية فارغ مع فهرس لا يمكن أن تكون عليه البيانات الفعلية أبدًا ، أي: لن تكون قيمة الفهرس الأولى -1. إذا ظهر البحث الأولي فارغًا ، فسيقوم FindKey بوضع المؤشر في هذا السجل الفارغ. هذا سيوفر التأثير البصري الذي كنت بعده.

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

المحلول

هذا غير ممكن بقدر ما أعرف. يجب أن يكون المؤشر دائمًا في سجل ما لم يكن BOF و EOF صحيحان (مجموعة بيانات فارغة).

نصائح أخرى

Tdataset ليس لديه "موقف محايد". ولكن كما هو الحال دائمًا لديك خيارات قليلة:

  1. اضبط مجموعة البيانات في وضع سجل الإدراج / إلحاقها. لذلك ، ستشاهد عناصر التحكم والرمز سجلًا فارغًا. كن حذرًا ، لأن شيئًا ما قد يعين بالمناسبة بيانات إلى حقل ، ثم قد يتم نشر السجل الجديد على DB.
  2. اعتمادًا على مكونات الوصول إلى البيانات ، يمكنك استخدامها ، يمكنك تعيين مجموعة البيانات على وضع التحديثات المخزنة مؤقتًا ، وإدراج سجل فارغ جديد ونشره في مجموعة البيانات ، وتمييز جميع التغييرات كما هو مطبق. ثم تعيين مرشح ، ورفض عادة هذا السجل الفارغ. ثم في الكود الخاص بك ، يجب عليك تبديل المرشح ، لذلك سوف يرفض جميع السجلات ، باستثناء هذا السجلات الفارغة.
  3. النظر في فصل tdataSource من مجموعة البيانات وتوصيله لاحقًا مرة أخرى.

لاحظ بالتأكيد ، ولكن ربما قد يكون هناك بعض الأساليب الأخرى :)

مرحبا،

استخدم setRange بدلاً من FindKey.

tblSomeTable.SetRange([SomeSearchData],[SomeSearchData]);
try
  while not tblSomeTable.Eof do begin
    <do something with the Record>
    tblSomeTable.Next;
  end;
finally
  tblSomeTable.CanelRange;
end;

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

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