(12-07-2021, 12:07 PM)embarcadero كتب : [ -> ]إحذف الحقل القديم و أعد إضافته من جديد بترقيم التلقائي
![[صورة: 549708525.png]](https://www11.0zz0.com/2021/07/12/11/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]](https://i.imgur.com/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]](https://f.top4top.io/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;
بالنسبة لرسالة الحذف انا لا افهم الفرنسية للاسف