تخريج قيمة تلقائية للحقول التعريفية
#7
إقتباس :حسنا ساساعدك لايجاد الحل دون اعطائك اياه (تجده بنفسك)
بارك الله فيك أستاذ وجزاك خيرا، سأفعل ما بوسعي.

شكرا كثيرا محمد نسمان على التدخل، مع افتراض استعمال TADOTable (باستبعاد الاستعلامات SQL) ودون استعمال محرك SQL Server (أي لا توجد Stored Proc).
شكرا كثيرا أخي Prince على الدالة (ينقصها DisableControls و EnableControls لتسريع الفحص Big Grin) ، لكن انتبه في استعمال First و Next عند استدعاء الدالة في BeforePost أو ما يشبهها، كود تفحص الجدول بهذه الطريقة هو آخر حل، كتبت دالة CheckKeyID(DataSet: TDataSet): Boolean بنفس الطريقة، للتحقق من وجود المفتاح ثم حذفتها Big Grin.

حسنا...
إقتباس : إنسى RecordCount ولاتستخدمها - فكر
يبقى لدينا:
1- استعمال RecNo بدلا عنها Big Grin، بشيء مثل:
PHP كود :
private
    
MaxRec: Integer;
...
procedure TForm2.ADOTable1BeforeInsert(DataSet: TDataSet);
begin
  MaxRec 
:= DataSet.RecNo + 1;
end;

procedure TForm2.ADOTable1BeforePost(DataSet: TDataSet);
begin
  
if not (DataSet.State = dsInsert) then Exit;
  
DataSet.FieldByName('BookID').AsString := 'BK'+ Format('%0.4d',[MaxRec+1]);
end; 
لكن في هذه الحالة يبقى لدينا نفس المشكل، مع مشكل جديد، هو رسالة خطأ عند إضافة (Insert) تسجيل في وسط الجدول، لأن RecNo ستأخذ حتما قيمة مكررة بخلاف RecordCount.

2- حساب أكبر قيمة بشكل يدوي، مثال ( MaxRec هو integer لتخزين أعلى قيمة):
PHP كود :
procedure TForm2.ADOTable1BeforeInsert(DataSet: TDataSet);
begin
  MaxRec 
:= StrToInt(Copy(DataSet.fieldbyname('BookID').asString, 3,5));
end;

procedure TForm2.ADOTable1BeforePost(DataSet: TDataSet);
begin
  DataSet
.FieldByName('BookID').AsString := 'BK'+ Format('%0.4d',[MaxRec+1]);
end; 
هناك من يستعمل الحدث OnNewRecord عوضا عن BeforePost.
في هذه الحالة نكون قد تخلصنا من إشكالية تكرار نفس القيمة عند حذف قيم سابقة، لأن الخلية ستأخذ العدد الموالي لآخر عدد في الجدول، يبقى إشكال صغير وهو عند إضافة تسجيل عند وسط الجدول، هذا يمكن تفاديه بإضافة DataSet.Last في الحدث BeforeInsert، وبذلك نجبر المستعمل على إضافة تسجيلاته في آخر الجدول.
وبهذا أظن المشكلة حلت، لكن ماذا لو أراد المستعمل إضافة تسجيل في وسط الجدول :confused: هل سنقنعه بألا يفعل ذلك Big Grin
شكرا كثيرا لكم، بارك الله فيكم جميعا، وجزاك الله خيرا أستاذ.
الرد


الردود في هذا الموضوع
تخريج قيمة تلقائية للحقول التعريفية - بواسطة kachwahed - 24-06-2009, 04:45 PM

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


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