delphi4arab منتديات دلفي للعرب

نسخة كاملة : ترقيم تلقائي لحقل نصي
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

استخدم دلفي 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
.
.
و شكرا
وعليكم السلام ورحمة الله
استخدم السمة code لعرض الكود
أين الخلل/السؤال؟ وضح.
السلام عليكم

كيفية إضافة حقل جديد في الجدول a و كانت القيمة من الجدول b هي jk
بحيث تكون قيمة الحقل الجديد jk003 ؟؟؟
عملت سابقاً على شيء مشابه وكان الجدول للمواد حيث تتكون المادة من أربع حروف + 4 أرقام، ويتم تخزينهم مباشرة ضمن حقل واحد، لكن في حال ما أردت أن أحصل على الرقم التالي لمادة معينة أقوم بذلك مباشرة من خلال Sql server

PHP كود :
select max(convert(int, SUBSTRING (f1,5,4))+1) from mytable; 

هنا اعتمدت في دالة substrign أن أقوم بأخذ 4 أرقام من الموضع الخامس، وعليك تغييره حسب المستخدم لديك

ايضاً يمكن ارجع القيمة بشكل 0003 اذا اردت بجملة اعقد قليلاً

PHP كود :
select right(replicate('0',8) + cast(max(convert(int, SUBSTRING (f1,5,4))+1) as varchar(8)),4) 

ومن ثم تضيف الحروف المطلوبة للناتج السابق من الجملة