السلام عليكم ورحمة الله تعالى وبركاته
لدي مشكلة في حذف سجل من قاعدة Absolute
وضعت هذا الكود
PHP كود :
ABSTable1.delete;
ABSTable1.Refreshe;
لكن عندما اصيف سجل أخر يعطيني الرقم الموالي للرقم الذي حذف
بمعنى إذا كان الرقم الذي تم حذفه هو رقم 2
عندما اضيف سجل جديد يعطيني رقم 3
علما ان نوع الحقل المسمى Numero هو Autoinc
وهل الكود الذي وضعته لللإضافة على زر الإضافة صحيح ولا ينقصه شيء وهو كالآتي
PHP كود :
ABSTable1.edit;
ABSTable1.Insert;
ABSTable1.Post;
وما الكود الذي اضعه لتفادي تكرار رقم السجل وأين أضعه
وجزاكم الله عنا كل خير
وعليكم السلام
اولا الكود الثاني خطا
انت تقوم بتعديل سجل/ثم اضافة/ثم حفظ دون كتابة قيم الحقول
بالنسبة لسؤالك لا يمكن باستعمال حقل Autoinc
ان اردت لاخر سجل ان يكوةن كما تريد:
قبل اضافة سجل خذ قيمة السجل الاخير
ضف لها واحد واستخدمها كقيمة للحقل
طبعا غير النوع من AutoInc الى حقب ععدي
وبالتوفيق
B.M.AbdelAziZ كتب :
وعليكم السلام
اولا الكود الثاني خطا
انت تقوم بتعديل سجل/ثم اضافة/ثم حفظ دون كتابة قيم الحقول
بالنسبة لسؤالك لا يمكن باستعمال حقل Autoinc
ان اردت لاخر سجل ان يكوةن كما تريد:
قبل اضافة سجل خذ قيمة السجل الاخير
ضف لها واحد واستخدمها كقيمة للحقل
طبعا غير النوع من AutoInc الى حقب ععدي
وبالتوفيق
شكرً جزيلاً
كنت استعمل هذا الكود مع قاعدة البيانات PARADOX
لكن عندما انتقلت الى Absolute
لم يعد يعمل ولا اعرف ما السبب
اليك الكود الذي كنت استعمله قبل تنقلي للAbsolute
للإضافة التلقائة ونوع الحقل SMALLINT
الكود
كود :
InsertType:string;
TCde: Char;
implementation
uses UModule;
{$R *.dfm}
procedure TFormRT4_FCT.FormActivate(Sender: TObject);
begin
TCde:=#0;
InsertType:='Insert';
with DM.Table1 do begin
SetKey;
EditKey;
ActiveControl:=Cde;
Cde.text:=IntToStr(DM.Table1.RecordCount+1);
end;
end;
procedure TFormRT4_FCT.CdeKeyPress(Sender: TObject; var Key: Char);
var KeyValue:Integer;
cKeyValue:String;
begin
if key=#13 then DBEdit7.setfocus;
begin
if InsertType='FindKey' then begin
with DM.Table1 do begin
if Cde.text='' then Cde.text:='0';
EditKey;
DM.Table1['OR']:=StrToInt(Cde.text);
if not GotoKey then begin
end;
end;
end;
if InsertType='Insert' then begin
with DM.Table1 do begin
if Cde.text='' then Cde.text:='0';
EditKey;
DM.Table1['OR']:=StrToInt(Cde.text);
cKeyValue:=Cde.text;
try
KeyValue:=StrToInt(cKeyValue)
except
KeyValue:=0
end;
if not GotoKey then begin
DM3.Table1.Insert;
DM.Table1['OR']:=KeyValue;
DM.Table1.Post;
DM.Table1.Edit;
end;
end;
end;
end;
B.M.AbdelAziZ كتب :
الامر ابسط
افعل كما قلت لك
وتعمل على Paradox و Absolute او اي قاعدة!
أخر سجل
خذ قيمة الحقل
ضف لها واحد
ضف سجل جديد
ضع به القيمة
كود :
x:=0;
Table1.Last;
x:=Table1.FieldByName('code').AsInteger;
x:=x+1;
Table1.Insert;
Table1.FieldByName('code').AsInteger:=x;
يمكن ان تستخدم Query ، اظنك لا تحبها 
وبالتوفيق
مشكور يا اخي معك حق والله كلما رأيت هذه الكلمة Query يزيد تشاؤمي منها
ولا أعرف سبب ذلك ربما لعدم تعاملي معها بقواعدها
سافعل ما اشرت علي به وسأرد عليك
ووفقك الله
لقد نجحت العملية شكرًا جزيلاً هذا الكود افضل من الأول واصغر وابسط من الكود الذي كنت استعمله
جزاكم الله عنا كل خير
ينقصني الآن وضع رسالة لتخبرني إن كان رقم التسجيل موجود مسبقًا في حالة الإضافة اليدوية في الديبقريد مثلاً
فكيف ذلك
b.m.abdelaziz كتب :امنع التعديل به بتغيير readonly الى true
هل يمكنني إستعمال الكود في الديبقريد من دون ان استعمل زر للإضافة
واين اضعه
يعني كلما انتقلت من السطر الى السطر الموالي يضيف الرقم التلقائ من دون استعمال زر
امنع الكتابة في الDBGrid يتغيير الخاصية ReadOnly
واترك المستخدم يستعمل DBEdit أو Edit فقط