ترقيم تلقائي لحقل نصي
#1
السلام عليكم

استخدم دلفي 2009 مربوطة بـ MS SQL Server بـواسطة DBExpress

لدي حقل Primary Key في أحد الجداول مثلا A نوعه Varchar8 أي Text
يتكون من حرفين و ثلاث أرقام
قيمة هذين الحرفين مربوطة ببيانات حقل أخر في جدول أخر لنقل B مثلا و الرقم تزايدي
فلو كان قيمة الحقل المحضرة من الجدول B هي SA مثلا
وعند إضافة حقل جديد في الجدول A يأخذ
SA مع أخر رقم موجود في الجدول A

مثال على بيانات الجدول A
PK_ID======Co_Name====Co_No

SU001=======hgsgs=======45
SU002======= sggsis=======34
SU003=======hgsgs=======65
SU004=======sggsis=======23
RP001======hgsgs========76
RP002======sggsis========12
JK001=======hgsgs========90
JK002======sggsis========48
و هكذا

عند إضافة حقل جديد في الجدول A و كانت القيمة من الجدول B هي JK
تكون قيمة الحقل الجديد JK003
و عند إضافة حقل جديد في الجدول A و كانت القيمة من الجدول B هي SU
تكون قيمة الحقل الجديد SU005
و هكذا


في جدول أخر عندي حقل Primary key لكنه رقمي يتكون من السنة + رقم تزايدي و لا مشكلة لدي فيه,
أستخدم هذه Procedure لإنشاء الرقم الجديد وهي تعمل جيدا
كود :
procedure TDM_Form.CdsOrdersAfterInsert(DataSet: TDataSet); var O_Year,O_Month,O_Day :Word; begin //Assuming that your table has been created with QryGeneral do begin Close; SQL.Clear; SQL.Add('Select Max(Order_No) as Max_No from Orders'); Open; if VarIsNull(FieldByName('Max_No').Value) then begin DecodeDate(Date, O_Year,O_Month,O_Day); CdsOrders.FieldByName('Order_No').Value :=(StrToInt(AnsiRightStr(IntToStr(O_Year), 2)))+001; end else begin CdsOrders.FieldByName('Order_No').AsInteger := FieldByName('Max_No').AsInteger+1; end; Close; end; end;

بيانات الحقل لسنة 2009 مثلا
09001
09002
.
.
بيانات الحقل لسنة 2010 مثلا
10001
10002
10003
.
.
و شكرا
الرد


الردود في هذا الموضوع
ترقيم تلقائي لحقل نصي - بواسطة thebestbenz - 30-09-2010, 11:45 AM
ترقيم تلقائي لحقل نصي - بواسطة kachwahed - 30-09-2010, 12:07 PM
ترقيم تلقائي لحقل نصي - بواسطة thebestbenz - 30-09-2010, 12:22 PM
ترقيم تلقائي لحقل نصي - بواسطة محمد نسمان - 04-10-2010, 04:10 PM

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


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