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

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

بدأه lمنى نور هدى في 19 يناير 2012 · 18 رد · 1,502 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد التحية و السلام

لدي مشكلة و أرجوا أن أجد ظالتي هنا معكم و جزاكم الله كل خيرا وفتح أبواب الخير عليكم

في المرفق ستجدون سؤالي قمت بتقسيمه إلى 4 أجزاء لأنني لم أستطيع تحميل كاملا Doc1,d1,d2,d3

هذا الجزء الأخير من سؤالي

أرجو الإجابة جزاكم الله خيرا

Doc1.rar

d1.rar

d2.rar

d3.rar

تم تعديل هذه المشاركة بواسطة lمنى نور هدى في 19 يناير 2012 في 21:53

#2

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

#3

السلام عليكم...لعدم تكرار معلومة مثلا رقم الكتاب ..هناك عدة طرق كل حسب تفكيره فالخوارز%

#4

السلام عليكم...لعدم تكرار معلومة مثلا رقم الكتاب ..هناك عدة طرق كل حسب تفكيره فالخوارزميات لها علاقة وطيدة بدلفي,كما ان لكل منا طريقته الخاصة في التحليل , فالبنسبة للسؤال المطروح بعدم تكرار مثلا رقم كتاب. لإدخال سجل جديد في الجدول يستوجب وضع شروط مسبقة قبل فتح append و insert وغيرها من التعليمات او الأوامر الخاصة بالتغيير في محتويات الجداول .

بالنسبة للشرط مثلا استخدمت edit1 لعرض الرقم و edit2 لعرض الإسم هنا استخدم الحدث المتعلق ب edit1 والذي هو onexit اي عند ادخال الرقم والإنتقال الى edit2 لإدخال الإسم, يقوم الخوارزمي الذي انشاته في هذا الحدث بفحص الجدول والبحث عن القيمة للرقم فان وجد يطبع رسالة بان الرقم موجود ضمن سجلات الجدول ........طبعا هذا حسب مااعرف.

#5

بعد التحية و السلام

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

if dbedit1.text=ADOtable1.fieldvalues['Num_client'] then showmessage('le client existe') h

else

if ADOtable1.state in [dsedit,dsinsert] then ADOtable1.post

أرجوا أن تقترح عليا خورزمية المناسبة و جزاك الله خيرا

#6

السلام عليكم طبعا:يطبع لكي رسالة بأن الرقم موجود ويسجلها ايضا لانكي استخدمتي في البداية التعليمة:if ADOtable1.state in [dsedit,dsinsert] thenADOtable1.insertوعندما تكون طريقة البحث عن الرقم من اول الجدول: اي اين يوجد الرقم طبعا سيجدها ويطبع رسالة بان الرقم موجود....اما بالنسبة للسجل الجديد تقومين بحدفه ايضا عند وجود الرقم ليعود الجدول الى حالته الأولى,هذه طريقة لم اجربها لكنني سارفق برنامج صغير يعكس هذه المشكلة..............كما ارجو اخواننا هنا ان يدلونا على حلول لنستفيد جميعا وشكرا...........

#7
hakimraho كتب:

السلام عليكم طبعا:يطبع لكي رسالة بأن الرقم موجود ويسجلها ايضا لانكي استخدمتي في البداية التعليمة:if ADOtable1.state in [dsedit,dsinsert] thenADOtable1.insertوعندما تكون طريقة البحث عن الرقم من اول الجدول: اي اين يوجد الرقم طبعا سيجدها ويطبع رسالة بان الرقم موجود....اما بالنسبة للسجل الجديد تقومين بحدفه ايضا عند وجود الرقم ليعود الجدول الى حالته الأولى,هذه طريقة لم اجربها لكنني سارفق برنامج صغير يعكس هذه المشكلة..............كما ارجو اخواننا هنا ان يدلونا على حلول لنستفيد جميعا وشكرا...........

بارك الله فيك أنا في إنتظار إقتراحك

#8

السلام عليكم...بالنسبة لحل مشكل: عند فتح التعليمةinsert و append وتعطيل تنفيدها قد وجدت هذا المرجع ربما قد يفيد ويوصل الى الحلول , اي عدم السماح لادخال معطيات جديدة في الجدول الا اذا كان Num_client غير موجود ضمن سجلات الجدول لمنع التكرار ...تحياتي للجميع.

post-249906-001041800 1327268201_thumb.j

post-249906-077498000 1327268220_thumb.j

post-249906-022979600 1327268239_thumb.j

post-249906-009267400 1327268261_thumb.j

المرفقات
img002.jpgimg007.jpgimg008.jpgimg009.jpg
#9

عدرا للجميع ..المرجع باللغة الفرنسية........

#10

السلام عليكم

اطلعت على المستندات على عجل .. فكرة عمل البرنامج ليست واضحة بالنسبة لكن اقول على ما فهمت

لديك ID للزبون يجب ان لا يتكرر - بالنسبة لي - اعمل باحدى طريقتين

1- جعل الحقل الــ AutoNo --> ID من قاعدة البانات وتريح عقلك من شغل برمجي كثير.

2- استخدام اي من طرق البحث للبحث عن الرقم كـالتعليمة Locate Or Find or .......

أو استخدام TAdoquery

xboolean:=True;
with dm.QMultiI do begin
  Close;
  SQL.Clear;
  SQL.Add('select FieldName from Table Name');
  SQL.Add('Where FieldName = '+Edit1.Text);
  Open;
  if (DM.QMultiI.RecordCount>0)And (not DM.QMultiI.FieldByName('FieldName').IsNull) then
   XBoolean:=False;
   Close;
end;
 if not XBoolean then
 begin

 end else
 begin

 end;

في الكود xboolean متغير من النوع Boolean

DM.QMulti هي TADOQuery

أرجو ان اكون قد أفدت

وأي ملاحظة أنا ان شاء حاضر

..... تحياتي

تم تعديل هذه المشاركة بواسطة c_vita في 23 يناير 2012 في 10:06

#11
c_vita كتب:

السلام عليكم

اطلعت على المستندات على عجل .. فكرة عمل البرنامج ليست واضحة بالنسبة لكن اقول على ما فهمت

لديك ID للزبون يجب ان لا يتكرر - بالنسبة لي - اعمل باحدى طريقتين

1- جعل الحقل الــ AutoNo --> ID من قاعدة البانات وتريح عقلك من شغل برمجي كثير.

2- استخدام اي من طرق البحث للبحث عن الرقم كـالتعليمة Locate Or Find or .......

أو استخدام TAdoquery

xboolean:=True;
with dm.QMultiI do begin
  Close;
  SQL.Clear;
  SQL.Add('select FieldName from Table Name');
  SQL.Add('Where FieldName = '+Edit1.Text);
  Open;
  if (DM.QMultiI.RecordCount>0)And (not DM.QMultiI.FieldByName('FieldName').IsNull) then
   XBoolean:=False;
   Close;
end;
 if not XBoolean then
 begin

 end else
 begin

 end;

في الكود xboolean متغير من النوع Boolean

DM.QMulti هي TADOQuery

أرجو ان اكون قد أفدت

وأي ملاحظة أنا ان شاء حاضر

..... تحياتي

بعد التحية و السلام

أنا مبتدئة في هذا المجال لم أفهم التعليمة التي كتبتها كيف أستعملها

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

لقد وضعت 2 ADOtable و ADOtable1 كليهما نفس TableName

ADOtable1 هي التي إضيف فيها البيانات dbedit1تابع لها و ADOtable2 يتم البحث فيها عن الزبون إن وجد و dbedit4 تابع له

المشكل رغم أنه يقول أن الزبون موجود إلا أنه يقوم بتسجيله في الجدول

أرجوا مساعدتي في إيجاد الخطأ

و بارك الله فيكم

تم تعديل هذه المشاركة بواسطة lمنى نور هدى في 23 يناير 2012 في 14:32

#12

السلام عليكم

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

وعلى أي حال يجب أن تكون الخاصية Filter في البداية = False وليس True

#13

هذه هي التعليمة التي إستعملتها

[/

Begin

if (dbedit1.Text <>'') then

begin

adoTable2.Filtered: = true;

adoTable2.Filter: = 'num_clients =' + QuotedStr (dbedit1.Text + '');

end;

if dbedit4.text ADOtable2.fieldvalues = ['num_clients'] then showmessge ('الزبون موجود')

else

if ADOtable1.state in [dsedit, dsinsert] then

begin

ADOtable1.post;

ADOtable2.Requery ([]);

end;

end

]

تم تعديل هذه المشاركة بواسطة lمنى نور هدى في 23 يناير 2012 في 14:40

#14

أتعرف إكتشفت أن المشكل ليس فيهذه التعليمة بل في تعليمة أخرى الذي وظعتها في زر آخر

[/ADOtable1.Insert ]

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

كيف يمكنني إقاف ذلك

تم تعديل هذه المشاركة بواسطة lمنى نور هدى في 23 يناير 2012 في 14:53

#15

الق نظرة على الكود التالي .. انا لم ازيد عليه غير ان عدلت شيئا

Begin

if (dbedit1.Text <>'') then

begin

 adoTable2.Filtered: = False;
        adoTable2.Filter: = 'num_clients =' + QuotedStr (dbedit1.Text + '');
 adoTable2.Filtered: = True;
     	end;

if dbedit4.text = ADOtable2.fieldvalues['num_clients'] then showmessge ('الزبون موجود')

else
if ADOtable1.state in [dsedit, dsinsert] then

begin
ADOtable1.post;
ADOtable2.Requery ([]);
end;

end

وما علاقة dbedit1 و dbedit4

تم تعديل هذه المشاركة بواسطة c_vita في 23 يناير 2012 في 14:51

#16
c_vita كتب:

الق نظرة على الكود التالي .. انا لم ازيد عليه غير ان عدلت شيئا

Begin

if (dbedit1.Text <>'') then

begin

 adoTable2.Filtered: = False;
        adoTable2.Filter: = 'num_clients =' + QuotedStr (dbedit1.Text + '');
 adoTable2.Filtered: = True;
 		end;

if dbedit4.text = ADOtable2.fieldvalues['num_clients'] then showmessge ('الزبون موجود')

else
if ADOtable1.state in [dsedit, dsinsert] then

begin
ADOtable1.post;
ADOtable2.Requery ([]);
end;

end

وما علاقة dbedit1 و dbedit4

dbedit1 هي التي أكتب فيها رقم الزبون الذي أريد أن أسجله بعد أن أظغط على زر الذي يحمل تعليمة ADOtable1.insert وهذا الزر الذي يعمل المشكل لأنه يقوم بالتسجيل بنفسه قبل أن أظغط على زر التسجيل المعلومات

أما dbedit4 فهو الذي يظهر رقم الزبون إن كان موجد من قبل تلك التعليمة صحية هي تعمل جيدا

لكن المشكل هو عند زر الذي يحمل تعليمة ADOtable1.insert

#17

السلام عليكم ربما الإجابة في الصور المرفقة..! لتعطيل او ايقاف تسجيل المعلومات.بالتعديل في خصائصdbgrid1 في option ...اضافة الى adotable1.cancel..............................

#18

لاستخدام التعليمة:if debedit1.text<>' ' then ربما يجب التغيير في الخاصية autoedit ل datasouce .....فقط للتوضيح....

#19

بارك الله فيكم إنتهى المشكل عن طريق هذه التعليمة

Begin

if (edit1.Text <>'') then

begin

adoTable2.Filtered: = true; 
   	adoTable2.Filter: = 'num_clients =' + QuotedStr (edit1.Text + '');
        end;

if dbedit4.text ADOtable2.fieldvalues = ['num_clients'] then showmessge ('الزبون موجود')

else
adotable2.insert;
ADOtble2.fieldvalues['Num_client] :=edit1.text;
if ADOtable1.state in [dsedit, dsinsert] then ADOtable1.post;



end

تم تعديل هذه المشاركة بواسطة lمنى نور هدى في 25 يناير 2012 في 18:27

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…