delphi4arab منتديات دلفي للعرب
ترقيم - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ترقيم (/showthread.php?tid=11432)

الصفحات: 1 2


RE: ترقيم - أبو معاذ - 14-07-2021

(12-07-2021, 12:07 PM)embarcadero كتب : إحذف الحقل القديم و أعد إضافته من جديد بترقيم التلقائي

[صورة: 549708525.png]

و حذف هذا السطر

dm.BenefisTable.FieldByName('Num_Dosier').Value:=dm.BenefisTable.RecordCount+1;


* النتيجة ستكون كما طلبت

هل فعلا قمت بنفس التعليمات مثل ما قال  أخونا   embarcadero؟


RE: ترقيم - العيد1403 - 14-07-2021

[quote pid="53523" dateline="1626035522"]
حقل الترقيم ليس تلقائي بل من نوع Numerique
استعمل الكود
dm.BenefisTable.Insert;
dm.BenefisTable.FieldByName('Num_Dosier').Value:=dm.BenefisTable.RecordCount+1;

واحهتني عدة مشاكل عند جعل حقل الترقيم NumAuto في access
[/quote]

حاول أن تجعل حقل في جدول ثاني يحمل أخر رقم قمت بإدخاله ويزيد عليه في كل مرة تقوم بإدخال سجل جديد


RE: ترقيم - Delphi4Us - 16-07-2021

إقتباس :حاول أن تجعل حقل في جدول ثاني يحمل أخر رقم قمت بإدخاله ويزيد عليه في كل مرة تقوم بإدخال سجل جديد



فكرة جدول اخر يحمل الرقم لا احبذها
مع ان مشكلته بسيطة وهي الحل الذي عرضه الاخوة الا انه وبحال عدم القدرة على تطبيق حلهم استخدام استعلام للحصول على اخر رقم يكون افضل

كود :
Select Sum(FiledNum) + 1 As Sum from TableName



RE: ترقيم - FiREWORKS - 16-07-2021

إقتباس :
كود :
Select Sum(FiledNum) + 1 As Sum from TableName
 يبدو انك تقصد COUNT و ليس SUM لانه كما تعلم اخي ان SUM تجلب مجموع قيم التسجيلات و ليس عددها...

على كل حال، الاعتماد على عدد التسجيلات للحصول على الترقيم التسلسلي ليست فكرة فعالة لان العدد يتغير بحذف التسجيلات الموجدة و يحدث استثناء عند تطابق رقم موجود مسبقا بعدد التسجيلات بعد الحذف...

الصورة المتحركة تظهر احد الطرق الموجودة للحصول على ارقام تسلسلية لا تتأثر بحذف التسجيلات...

[صورة: zp7BTwU.gif]


RE: ترقيم - Delphi4Us - 16-07-2021

فعلا انا لم اقصد SUM ولكن يبدو انني مشوش وايضا Count لن تفيد ويجب استخدام MAX
فهي سوف تعيد اكبر قيمة موجودة


RE: ترقيم - appakar - 22-07-2021

عودة من جديد
بحثت في المنتدى وتوصلت الى

إضافة الدالة :
كود :
function code_suiv(x:string):string; var y,c:string; t,i:integer; begin y:=inttostr(strtoint(x)+1); t:=length(y); c:=''; for i:= 1 to length(x)-t do c:=c+'0'; code_suiv:=c+y; end;

ثم في زر الإضافة
كود :
procedure TForm3.BitBtn1Click(Sender: TObject); var  :     x,string; if dm.BenefisTable.RowsAffected = 0 then         begin         dm.BenefisTable.Insert;         dm.BenefisTable.FieldByName('Num_EXNais').AsString :='';         dm.BenefisTable.FieldByName('Num_Dosier').Value:=dm.BenefisTable.RecordCount+1;         end         else dm.BenefisTable.Last; x:= dm.BenefisTable.FieldValues['Num_Dosier']; dm.BenefisTable.Insert; dm.BenefisTable.FieldValues['Num_Dosier']:=code_suiv(x);

اصبح الترقيم تلقائي
لكن ظهرت لي مشكلة في رز الحذف
[صورة: p_2029cb5361.jpg]


RE: ترقيم - Delphi4Us - 24-07-2021

الموضوع اخد اكثر من حجمه نقاش مع انه بسيط جدا .

اولا : لو رفعت قاعدة البيانات لجعلنا لك لها حقل ترقيم تلقائي ولو فيها بيانات لاتريد ان يراها احد خد نسخها منها واحذف كل ما فيها وارفعها للمعاينة

ثانيا : الموضوع لا يستحق كل هذه اللفة الطويلة التي طرحتها مؤخرا خاصة بالانتقال الى اخر قاعدة البيانات لجلب اخر رقم فهذه الطريقة غير عملية
وافضل حل لك بحال لا تريد انشاء حقل ترقيم تلقائي هو :

كود :
Select MAX(FiledNum) + 1 As MAXSum from TableName

هذا الاستعلام اسرع بكثير استخدمه في اجراء منفصل واستدعيه للحصول على الرقم المطلوب

كود :
Function GetMAX:Integer Begin QryMax.Sql.clear; QryMax.sql.add('Select MaX(FiledNum)+1 As MaxSum from TableName'); QryMax.open; result:=QryMax.FiledByname('MaxSum').Value; QryMax.close; End;


بالنسبة لرسالة الحذف انا لا افهم الفرنسية للاسف