31-03-2020, 03:06 PM
(31-03-2020, 01:32 PM)medreg كتب : لقد حذفت كل ما تحته خط ولكن المشكلة لازالت قائمة
بارك الله فيكم
وعليكم السلام ورحمة الله تعالى وبركاته
1- حذف DM هو من ناحية المقروئية وعدم التكرار لأنك استخدمت with DM do
2- الكود الذي وضعته الخوارزمية خاطئة حيث عوض أن تتفحص كل سجل وتقارنه كان بإمكانك إستخدام Table2.Locate
والخطأ الثاني أنك تقوم بملأ الحقل في Table1 بقيمة موجودة في Table2 وهذا بعد القيام بمقارنة واحدة أي أنك لم تقم بمقارنة كل السجلات في Table2
Table1.fieldvalues['Mle']:= DM.Table2.fieldvalues['Mle'];
ملاحظة:
-إذا كانت Table1 و Table2 يقومان بقراءة نفس الجدول فمن الأفضل أن تجعل الحقل Mle مفتاح حيث قاعدة البيانات (SGBDR) هي التي تقوم بالمراقبة ولا تسمح بإضافة نفس الرقم وتحدث exception وكل ما عليك هو إعتراضها وإظهار التنبيه
-كتابة الكود بتنسيقه وكتابة المتغيرات بأسماء مفهومة تساعد على مقروئية الكود وفهمه عليك بقراءة كتاب Clean code
إليك الكود التالي جربه
كود :
procedure TFrmAjoute.Button3Click(Sender: TObject);
var
fch: TFrmFichier;
fAfc: TFrmAffiche;
begin
fch:=TFrmFichier.create(self);
fAfc:=TFrmAffiche.create(self);
with DM do
begin
Table2.Open;
if Table2.Locate('Mle', Table1.fieldvalues['Mle'], []) then
begin
ArabShowMessage('هذا الرقم موجود من قبل ');
fAfc.showModal;
fAfc.free;
end
else
begin
Table1.Insert;
Table1.fieldvalues['Mle']:= NouvelleValeur; //DM.Table2.fieldvalues['Mle'];
Table1.Post;
fch.ShowModal;
fch.Free;
end;
Table2.Close;
Table1.Refresh;
end;
end;
