![]() |
|
ترقيم تلقائي لحقل نصي - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : ترقيم تلقائي لحقل نصي (/showthread.php?tid=2453) |
ترقيم تلقائي لحقل نصي - thebestbenz - 30-09-2010 السلام عليكم استخدم دلفي 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 . . و شكرا ترقيم تلقائي لحقل نصي - kachwahed - 30-09-2010 وعليكم السلام ورحمة الله استخدم السمة code لعرض الكود أين الخلل/السؤال؟ وضح. ترقيم تلقائي لحقل نصي - thebestbenz - 30-09-2010 السلام عليكم كيفية إضافة حقل جديد في الجدول a و كانت القيمة من الجدول b هي jk بحيث تكون قيمة الحقل الجديد jk003 ؟؟؟ ترقيم تلقائي لحقل نصي - محمد نسمان - 04-10-2010 عملت سابقاً على شيء مشابه وكان الجدول للمواد حيث تتكون المادة من أربع حروف + 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) ومن ثم تضيف الحروف المطلوبة للناتج السابق من الجملة |