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

نسخة كاملة : ترقيم
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
(12-07-2021, 12:07 PM)embarcadero كتب : [ -> ]إحذف الحقل القديم و أعد إضافته من جديد بترقيم التلقائي

[صورة: 549708525.png]

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

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


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

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

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

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



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

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

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

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

[صورة: zp7BTwU.gif]
فعلا انا لم اقصد SUM ولكن يبدو انني مشوش وايضا Count لن تفيد ويجب استخدام MAX
فهي سوف تعيد اكبر قيمة موجودة
عودة من جديد
بحثت في المنتدى وتوصلت الى

إضافة الدالة :
كود :
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]
الموضوع اخد اكثر من حجمه نقاش مع انه بسيط جدا .

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

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

كود :
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;


بالنسبة لرسالة الحذف انا لا افهم الفرنسية للاسف
الصفحات : 1 2