الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

منع تكرار تسجيل

بدأه nassim في 25 أكتوبر 2008 · 5 رد · 2,289 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــة

عندي برنامج يوجد به DBedit1

اقوم بادخال اسماء اشخاص الى قاعدة البيانات

كيف يمكنني منع تكرار ادخال اسم شخص مرتين الى قاعدة البيانات

شكرا

#2

السلام عليكم

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

ولا أعتقد أن للبرمجة علاقة بهذا الخصوص إلا ما ندر (كأن نستخدم Edit وليس DBEdit من أجل التحقق من ذلك قبل الإدخال في قاعدة البيانات)

#3

ربما يا أخي الأسماء تتكرر لأن اسمك نسيم ويوجد العديد اسمهم نسيم

ولكن المفتاح الرئيسي يجب الا يتكرر والا يسببلك مشكل

واذا اردت عدم تكرار الاسم ممكن تستعمل خاصية البحث

والله اعلم

#4

افند ما قاله الاخوان الاسم من الممكن ان يتكرر ام المميز (المعرف) فذلك لا يمكن

لكن هناك فرضية ان نستخدم الاسم كمعرف في الجدول وعدم السماح بتكراره

لذلك ستخدم الكود التالي في الحدث OnExit للمكون DBedit

try
Table1.FindKey([DBEdit1.Text]);
Table1.Edit;
except
ShowMessage(' هذا الاسم موجود مسبقا ');
DBEdit1.SetFocus;

بالتوفيق

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#5

مجرد رأي أول نصيحة

أستخدم الأداة edit بدلا من dbedit لأنك لن تستطيع الكتابة في الـ dbedit حتى تكون عامل شجل جديد أو عامل تعديل على الجدول المربوط فيه الـ dbedit

و لما يكون هذا و قمت بالبحث عن أسم معين فسوف يجري 1 من 2

1- إلغاء كل ما أضفته من معلومات في الأدوات dbedit

2- حفظ السجل قبل تنفيذ عملية البحث بهذا نكون حفظنا قبل التأكد من تكرار الأسم

كأقتراح أقترح أستخدام الـ edit كما في الكود

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.filtered := false;
Table1.filter := 'name = '''+edit1.text+'''';
table1.filtered := true;
if table1.recordcount > 0 then
   showmessage('هذ الأسم موجود مسبقاً')
else
// أجراء الحفظ
   save;
end;

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#6

الأسماء تتشابه ... وأيا كانت الطريقة لعدم تكرار الإسم فإنها قد تكون غير فعالة

مثلا من الممكن ان يدخل الإسم

محمد أحمد عبدالله

محمد احمد عبدالله

محمد أحمد عبد الله

محمد احمد عبد الله

نفس الإسم وقد تم تكراره أربعة مرات ولا تعتبره قواعد البيانات مكررا لذلك أفضل إستخدام حقل رقمي كمفتاح أساسي

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

1- قم بإعلان عن متغيرات خاصة بنفس نوع بيانات الحقول المطلوبة على مستوى الكلاس كالتالي


{ Private declarations }
Old_Emp_No:INTEGER;
Old_Emp_Nm:STRING;
   private

تستخدم القيم المعلنه للمقارنة عند الخروج من الحقل المراد التشييك عليه كالتالي

عند الدخول للحقل


begin
inherited;
Old_Emp_No:=Emp_No.ItemIndex;
end;
procedure TForm.Emp_NoEnter(Sender: TObject);


begin
inherited;
IF (Old_Emp_No<>Emp_No.ItemIndex) THEN
ChkVals();
end;
procedure TForm.Emp_NoExit(Sender: TObject);

ونفس الإجرائين السابقين يكرروا للحقل الثاني الإسم مع مراعاه نوع البيانات

إستخدم البروسيدر التالي عند الخروج من الحقلين لفحص السجلات من وجود القيم المطلوبة من عدمه داخل الجدول


var
New_Emp_No:INTEGER;
New_Emp_Nm:string;
begin

//أولا تأكد من أن الحقول المطلوبة لاتحتوي على قيم خالية

IF (Emp_No.ItemIndex=-1)OR (Emp_Nm.Text='')THEN exit;
//القيم الجديدة للحقول المراد التشييك عليها
New_Emp_No:=Emp_No.ItemIndex;
New_Emp_Nm:=Emp_Nm.Text;
//كنسل عملية الإضافة الحالية
TABLE.Cancel;

//إذا كان السجل موجود فإن عملية الإضافة قد تم إلغائها وسيتم الوقوف وإستعراض السجل
IF NOT TABLE.Locate('Emp_No;Emp_Nm',VarArrayOf([New_Emp_No,New_Emp_Nm]),[]) THEN
//إن لم يتم العثور عليه ستتم إعادة عملية الإضافة كما كانت

BEGIN
TABLE.Append;
TABLE.FieldByName('Emp_No').AsString:=INTTOSTR(New_Emp_No);//
TABLE.FieldByName('Emp_Nm').Value:=New_Emp_Nm;
END;
procedure TForm.ChkVals();

أرجو أن يكون المثال واضح ومفيد تحياتي

مواضيع مشابهة