![]() |
|
فيما يخص البحث والمقارنة - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : فيما يخص البحث والمقارنة (/showthread.php?tid=10728) الصفحات:
1
2
|
فيما يخص البحث والمقارنة - medreg - 30-03-2020 السلام عليكم ورحمة الله تعالى وبركاته لدي جدولين ومفتاحهما الحقل المسمى Mle عندما اضيف سجل يجب ان يبحث في الجدول table1 اذا تم ايجاد نفس الرقم يتم التنبيه على ان رقم هذا السجل موجود مسبقا ولا يمكن اضافة سجل اخر بنفس الرقم والذي يحصل معي هو كالتالي اذا اضفت سجل رقم 1 مثلا واعدت اضافة سجل بنفس الرقم يتم تنبيهي بان رقم السجل موجود مسبقا ثم اضيف سجل يحمل رقم 2 الى هنا العملية تمام لكن اذا اضفت سجل ثالث برقم 1 يقبله رغم ان الرقم موجود مسبقا الكود الذي استعمله هو كالتالي : كود : procedure TFrmAjoute.Button3Click(Sender: TObject);
var fch: TFrmFichier;
fAfc: TFrmAffiche;
begin
fch:=TFrmFichier.create(self);
fAfc:=TFrmAffiche.create(self);
with DM do
begin
DM.Table2.Open;
DM.Table2.First;
While not DM.Table2.Eof do
begin
if DM.Table1.fieldvalues['Mle']=DM.Table2.fieldvalues['Mle']then
begin
ArabShowMessage('هذا الرقم موجود من قبل ');
fAfc.showModal;
fAfc.free;
end else
begin
DM.Table1.Insert;
DM.Table1.fieldvalues['Mle']:=DM.Table2.fieldvalues['Mle'];
DM.Table1.Post;
fch.ShowModal;
fch.Free;
end;
DM.Table2.Next;
close;
end;
DM.Table1.refresh;
end;
end;
هل هناك خطأ في الكودRE: فيما يخص البحث والمقارنة - larbiparadox - 31-03-2020 وعليك السلام و رحمة الله و بركاته كملاحظة سريعة لم اجرب كود احذف ما تحته خط
RE: فيما يخص البحث والمقارنة - medreg - 31-03-2020 لقد حذفت كل ما تحته خط ولكن المشكلة لازالت قائمة بارك الله فيكم RE: فيما يخص البحث والمقارنة - ghostdz - 31-03-2020 (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;RE: فيما يخص البحث والمقارنة - medreg - 31-03-2020 اخي العزيز ماذا تقصد بـ NouvelleValeur RE: فيما يخص البحث والمقارنة - ghostdz - 31-03-2020 (31-03-2020, 04:06 PM)medreg كتب : اخي العزيز ماذا تقصد بـ NouvelleValeur القيمة التي ترغب في إدخالها أي القيمة التي يتم البحث عنها في Table2 RE: فيما يخص البحث والمقارنة - medreg - 31-03-2020 اخي العزيز للتوضيح فقط table2 يحتوي على حقل واحد فقط والمسمى Mle من نوع Float استعملته عوض عن المكون edit لأن المكون edit لم استطع التحكم فيه مع العلم ان القيمة التي يجب البحث عنها تكون مطابقة للقيمة الموجودة في الجدول مثلا اذا ادخلت القيمة في المكون edit بهذا الشكل 0125340 والقيمة الموجودة سابقا بهذا الشكل 125340 لا يعتبرها نفس القيمة لهذا السبب استعملت جدوا اخر لإدخال القيمة وجعلته من نوع float في هذه الحالة لو كان هناك طريقة أخرى باستعمال المكون edit افدنا به جزاك الله عنا كل خير عالما ان القيمة تصل الى 12 رقم RE: فيما يخص البحث والمقارنة - ghostdz - 31-03-2020 (31-03-2020, 04:37 PM)medreg كتب : اخي العزيز للتوضيح فقط لم أستطع فهم ما تريد من خلال هذه الجداول لكن يبدو أنه يوجد خلل في التصميم على العموم يمكنك إستخدام longint عوضا عن float فهو يقبل أكثر من 12 رقم في المكون edit يمكنك التحكم بالحد الأقصى للأرقام التي يقبلها بتغيير MaxLength:= 12 وجعل NumbersOnly:= true عذرا إستخدم int64 عوضا عن longint وعند القيام بالتغيير إستخدم StrToInt64 عوضا عن StrToInt RE: فيما يخص البحث والمقارنة - medreg - 31-03-2020 المقصود بما اريد هو كالتالي لدي جدول table1 يحتوي على ثلاث حقول Mle = مفتاح Nom prenom المطلوب هو في حالة اضافة بواسطة المكون edit1 يجب التنبيه بان السجل موجود مسبقا في table1 اذا كان فعلا موجود ولا يقبل نفس الرقم قيمة الحقل mle واذا لم يكن موجود ينفذ الاضافة هذا ما ارت قصده اليك المرفق لتعدل عليه كل ما في الامر اذا تم ايجاد السجل مسبقا ينتقل مباشرة الى form4 لإظهار السجل بجميع معلوماته واذا لم يتم ايجاده ينتقل الى form2 لإتمام المعلومات هذا ما اقصده جزاكم الله عنا كل خير [attachment=4194] RE: فيما يخص البحث والمقارنة - حسن لطفى - 31-03-2020 ذكرت ان لديك جدول table1 على اى نوعية من قواعد البيانات انشأته ؟ لا تضع العربة امام الحصان قم باعادة هيكلة هذا الجدول مع وضع خاصية unique على الحقل المطلوب فهذا عمل محرك قاعده البيانات و ليس الدلفى مجرد رأى تحياتى |