30-09-2010, 11:45 AM
السلام عليكم
استخدم دلفي 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 لإنشاء الرقم الجديد وهي تعمل جيدا
بيانات الحقل لسنة 2009 مثلا
09001
09002
.
.
بيانات الحقل لسنة 2010 مثلا
10001
10002
10003
.
.
و شكرا
استخدم دلفي 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
.
.
و شكرا