• 0
ababil

[ تمت الإجابة ]سؤال عن معرفة كود يمنع تكرار قيمة غير مفهرسة نوع كرستر

سؤال

السلام عليكم اخوان

من فترة قليلة بدأت بمحاولات في الفوكس برو 9

وصادفتني هذه المشكلة

وهي كود يمنع تكرار قيمة

وللتوضيح

لنفرض ان لدينا جدول من حقلين الاول لادخال ارقام والثاني لادخال اسماء معينة

هل هناك كود يمنع المستخدم من ادخال قيم موجودة في عمود الاسماء

لاحظت ان هناك خبراء يفيدون الاعضاء مثل الاخ اسد العراق وشادو وهذه الامر شجعني على المشاركة في المنتدى

مع الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

19 إجابة على هذا السؤال .

  • 0

السلام عليكم واهلا وسهلا بك معنا

اخي العزيز اعمل لحقل الارقام فهرسة بنوع primary وهو بقواعد البيانات

وبهذا يكون الحقل لايقبل التكرار

لاحظ الجدول المرفق

اما بالنسبة لحقل نصي فنعمل له شرط يقوم بالبحث المسبق ثم اخبارنا في حالة التكرار وغيرها

تحياتي للجميع وانا بانتظار اي استفسار

تكرار.zip

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي العزيز اعتقد اني لم انتبة للموضوع جيدا

لنفترض لدينا فورم الادخال والحقل الخاص بالادخال هو text1

نضع في حدث velid الخاص بالتكست الاكود الاتي


INDEX name1 tag name1
SET ORDER TO name1
SEEK text1
IF FOUND()
MESSAGEBOX("القيمة مكررة")&& التحذير اذا تحقق الشرط
thisform.text1.value=''&& وهو اختياري تصفير قيمة الحقل
ENDIF
USE table&& او select table اذا كان مستخدم سابقا ومفهرس بالاسم 

تم تعديل بواسطه lion iraq
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

أضف لما قاله الاخ فراس، وكما تفضلت بخصوص الـ Primary فتستطيع الاعتماد على ما يسمى الـــ Candidate Index لمنع ادخال البيانات في حالة التكرار

فهو يعمل مثل الـ Primary ويختلف عنه بأنك تستطيع انشاء أكثر من Candidate index في الجدول الواحد

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


CREATE CURSOR Test (TablePk INT AUTOINC , EmpName c(40), FamilyName c(40))
INDEX ON TablePk TAG TablePk
INDEX ON EmpName TAG EmpName CANDIDATE
INDEX ON FamilyName TAG FamilyName CANDIDATE
SET ORDER TO

ON ERROR ShowError()
FOR I = 1 TO 5
INSERT INTO Test (EmpName, FamilyName ) VALUES ("Ahmad-"+ TRANSFORM(I), "FAMILY-"+TRANSFORM(I))
NEXT
* الامر التالي سيحاول تكرار القيم المدخلة ويعطي خطأ
INSERT INTO Test (EmpName, FamilyName ) VALUES ("Ahmad-"+ TRANSFORM(2), "FAMILY-"+TRANSFORM(2))
BROW
ON ERROR

FUNCTION ShowError()
AERROR(arError)
IF INLIST( arError(3), "EMPNAME", "FAMILYNAME")
MESSAGEBOX("تم ادخال هذا الاسم سابقا" + CHR(13) +arError(2) ,0+16+512,"ملاحظة" )
ENDIF
ENDFUNC

مع التحية

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

+1

تم تعديل بواسطه lion iraq
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكوررين جميعا يامبدعين

للاسد وللشبح

مشكوررررا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم الاخ عبد الله والاخ فراس ماشاء الله سباقين للخير تحياتي يسلمو

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخواني اشكر جهودكم وسرعة ردكم وانا ممنون منكم

يبدو اني لم استطع التوضيح لكم جيدا بما تقدمت بطلبه

لذلك سوف ارفق لكم فورم مع جدوله

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

لذا ارجوا العمل على مثالي المرفق ومن ثم رفعه لاستلامه لكي يتم توضيح فكرة كيفية عمل ذلك

فكرة اخرى لها علاقة بموضوعنا وهي :

كانت لدا اسد العراق مشاركة جميلة عن ضهور الكلمات الموجودة في الجدول بشكل تلقائي

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

هل بالامكان عملها هنا لتظهر الكلمات عن طريق حدث ( intetactivechange )

مع الشكر مره اخرى وبالاخص اسد العراق وشادو

منع تكرار الكلمات.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اخي العزيز لاحظ المرفق وتم اضافة التحذير الية بطريقة wait وال messagebox

مع العلم تم تفعيل الرسائل والباقي خيارك اي الطريقة للمثال فقط

تحياتي لك وللجميع

منع تكرار الكلمات.zip

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور اخي اسد العراق على المثال وعلى سعة صدرك

لكن المثال الذي عملته يضهر رسالة حتى عندما لا تتكرر كلمة

اي تظهر الرسالة في كل حال اذا كانت الكلمة مكررة او لا

وبهذا لا يستفاد منها المستخدم الذي لا يريد تكرار كلمة او اسم في حقل name

لذلك المقصود ليس ظهور رسالة بدون هدف لابد ان تعمل بحث او select ثم يتحقق الشرط حتى تظهر الرسالة التي تبلغ بتكرار القيمة

ارجوا انك فهمت قصدي يا اخي اسد العراق

الكود الذي نستطيع فيه تحقيق الشرط بالامر seek هو (طبعا وانتم تعلمون بأن هناك اكثر من امر وطريقة )


SET SAFETY OFF

SELECT table1
SET ORDER TO name
asd=this.value
iraq=(asd)
IF INDEXSEEK(iraq)
MESSAGEBOX("الاسم مكرر حاول مرة اخرى")
THIS.Value=""
RETURN 0

ENDIF

لكن في هذه الحالة لابد ان نجعل من حقل name مفهرس اي indexes وسؤالي في المشاركة كان

معرفة كود يمنع تكرار قيمة غير مفهرسة في جدول معين

اذا كانت الاجابة كلا

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

لذا اشكر كل من حاول مساعدتي واخص الاخوان اسد العراق وشادو وعندي اسئلة اخرى او مشاريع مبتكرة صغيرة اذا كان لديكم وقت للرد

تم تعديل بواسطه ababil
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم وتحياتي للجميع

عزيزي Ababil

انت تستخدم الحقل Name بشكل مباشر بالنموذج عن طريق ControlSource الخاص بالـ TextBox

لذا بمجرد أن تعمل Append Blank وتغير قيمة الـ Textbox تكون قد أضفت الاسم الجديد للجدول

وبهذا...نعم سيظهر أن الاسم مكرر حتى لو لم يكن كذلك

- بما معناه أنت تخزنه بالجدول أولا ثم تبحث عنه، المفروض أن تبحث عنه ثم تقرر هل تود تخزينه أم لا -

بالنسبة للبحث، فنعم بمكنك استخدام أوامر الـ Sql بشكل مفيد جدا

أما بالنسبة للفهرسة فلا أعلم سبب رفضك لها

السرعة تتغير بشكل ملحوظ اذا بحثت عن طريق Seek أو Locate اذا كان الحقل الذي تبحث عنه مفهرس وتم عمل Set Order له قبل البحث

وللعلم فان الـ Sql Select ستقوم بعمل فهرس مؤقت للحقل بشكل تلقائي ان احتاج الأمر

هذا النموذج بعد التعديل، وأهم أمر ستجده فيه هو CursorSetProp لتغيير الــ Buffer للجدول الى 5

حيث عن طريق هذا التغيير تستطيع التعامل مع الحقل الجديد على أنه غير موجود لغاية عمل TableUpdate أو Tablerevert

وهو وبشكل طبيعي لن يظهر أو يؤثر على نتيجة الـ Select لأنه معلق بالـ Buffer

والشرح يطول

مع التحية للجميع

Ababil.rar

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

مشكور للاخ العزيز شادو على الشرح الجميل والطريقة الرائعة

اخي ababil

الكود كان مثلاً لايصال الفكرة فقط وكان مصدر الحقول هو الجدول يعني عندما تقوم بالكتابه فيها يتم ادخالها مباشرتنا

وفكرة الاخ شادو جميله

اما عن طريقة استخدام الفهرسة هو لغرض تسهيل الايعاز وسرعة التنفيذ

لاحظ المثال المرفق تعديل بسيط على نموذجك السابق

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

ولذلك توجد اكثر من طريقة لغاية واحدة

تحياتي للجميع

منع تكرار الكلمات.zip

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الى الاخ شادو

نعم هذا ما اردته بالضبط بل واكثر

بعد ان حملت الملف بقيت مدهوشا لفترة غير قليلة

حيث علمت ان طرق تفكيرك بالفوكس افضل بكثير مما تعودت عليه في صنع اكوادي( وليست هناك مقارنة طبعا )

وجعلني اعيد كثير من الحسابات وهذا يعني ان هناك الالوف من الطرق مع هذا البرنامج الساحر

انك بهذا المثال جعلت من الفوكس برو ممتع ومتين ومرن

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

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

وايضا تحتاج الى مشاريع كثيرة لتنفيذها كي اصل لما اريد

لا اخفي عليكم اني من قبل صنعت الكثير من البرامج وهي الان تعمل عند اصدقائي

دون ان اعرف ان هناك فضاء واسع لهذا البرنامج

يجعل من طريقة التفكير واسعة وفعالة

وهذا بسبب التعتيم الذي فرضته مايكروسوفت وايضا الذي فرضه مبرمجينا العرب

بهذا الملف الصغير وجدت اكثر من ضالة واستطيع ان اعتمد على اكواده لكني لا استطيع تنفيذه في مشاريع موسعة

لانه ربما سيسبب لي مشاكل في التنفيذ الفعلي او يتعارض مع اكوادي

ولا استطيع حل مشاكله بسبب عدم فهم طريقة بناء الاكواد التي صنعتها بطريقتك

لكن الامر سيختلف اذا اكملت كرمك وشرحت لي الاكواد بشرح مبسط وبالعربي

واعرف ان هذا الامر يحتاج منك وقت ربما ليس بمستطاعك توفيره لنا

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

اشكرك جدا لمجرد وجودك في المنتدى

تحياتي واحترامي لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الى الاخ اسد العراق

اشعر باني اتعبتك معي لاني لم اوضح لك ما غايتي من كود عدم التكرار في حقل غير مفهرس لاني شعرت انها فكرة شائعة

وسأقول لك كيف ينفعني هذا الكود

لنفرض اني لم اصمم الداتا بيس ولا اريد التلاعب بها او كأن تكون الداتا بيس read only

واريد استعراضها ولم اجد الحقل الذي ابحث فيه مفهرس

فكان السؤال هل من الممكن ان نبحث او ندخل قيمة غير مكررة في حقل كركتر غير مفهرس .

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

لكن الكركتر ليس عندي مفهوم واضح عنها و عن صنع كود له

لاني ذكرت لك اني جديد على البرمجة وجديد جدا

اخي اسد العراق

ذكرت في مشاركتك الاخيرة ان طريقتك هي وصول الفكرة وانا معك في هذا

لكن الفكرة تحتاج الى ادوات لتنفيذها وما طلبته منكم هو الادوات وانتم هم اصحابها

كانت فكرتي بحث او ادخال في حقل غير مفهرس

لذا ارجوا منك ان تتعامل معي كشخص مبتدأ في اول الطريق

وان تكون خير عون لي في الرغبة في هواية الفوكس برو

عندما يتحقق شرط في مثال يطرح في المنتدى ويتم شرحه

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

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

اعتقد ان لغات البرمجة مثل لغات البشر في العالم يجب ان تحتاج شيئ او يطلب منك شيء حتى تتعلمها

والضرورة ام الاختراع

بالنسبة لمثالك الاخير مهم جدا

لكنك اخي مازلت في مثالك مستمرا في فهرست الحقل من خلال ادخال كود في تحميل الفورم( load )

وهذا هو INDEX on name TAG name

لكني تعلمت منه ان هناك رسائل جاهزة تعتمد على ارقام مفهومة عند الفوكس برو

مثلا عند تغير قيمة IF m=7 الى 6 يحدث استبدال بين وضائف النعم والكلا وكذلك بالنسبة للرسائل

("الاسم موجود سابقا .. متابعة ",4) عند تغير رقم 4 تتغير وضيفة الرسائل

فتتحول من( نعم وكلا) الى (انسحاب واعادة) الخ

هل من الممكن (اذا تسنى لك وقت ) تزويدنا بالارقام ووظيفة كل منها في مثل هذه الاكواد

وكيف يفهمها الفوكس وهل هي من ضمن برمجة البرنامج الاصلي الفوكس برو

ام هي ( library ) خاصة فيه

سؤال اخر لماذا علينا ازالة المسافات والاصفار في امر ALLTRIM الذي استخدمته

وبالنسبة الى الترقيم التلقائي اين وضعت الكود في مثالك الذي يجعل الترقيم يبدأ من رقم محدد

و حتى عند مسح الجدول يبقى الترقيم مستمرا !

حقيقة اني فرح لتفاعلك معي وهذا امر جعلني متفائل في التعلم

تحياتي لك واحترامي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله،

الأخ Ababil

ذكرت بمشاركة سابقة أن VFP9موضوع جديد بالنسبة اليك وفهمت من كلامك أنك قد تكون عملت على لغات أخرى

( وصححني ان كنت غير مصيب )

وبجميع الأحوال، وطالما أنك ستبدأ بالــ 9 فأنصحك أن تبدأ بالطريقة الصحيحة، وهي التعلم ليس الاّ، قد تكون بعض الأوامر جديدة بالنسبة اليك،

ولكن ثق تمامًا بأن عدم معرفتك بالشيء لا علاقة له بصعوبته أو سهولته، وكما ذكرت فقلة المصادر العربية كذلك تزيد من الامور صعوبة،

لكن باختصار لا تقف امام حاجز ( لا أريد لأني لا أعرف )،

بالنسبة لأعمالك القديمة طالما أنها تعمل، فدعها تعمل دون المساس بها، او دون أن تحاول تطبيق ما تتعلمه من جديد عليها،

أما بالنسبة للأفكار ومنطق وطريقة سير الأمور صدقني هي ليست بالشيء الصعب أو المستحيل وأنا لم آت بشيء جديد، كل الأدوات متاحة أمامك وما عليك الا فرض أسلوبك الذي قد يكون أفضل من اسلوبي بعد ان تملك المعرفة الكافية باللغة

أبدأ أي برنامج صغير وتعلم من خلاله، واطرح أي سؤال وان شاء الله بتلاقي الجواب سواء من قبلي أو من قبل الأخوة الأفاضل بالمنتدى

وعلى فكرة المنتدى مليء بالمواضيع المفيدة، وأظن أن كل موضوع تقوم بقرائته سيعطيك معلومة جديدة

مع التحية للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اوويد ما ذكره الاخ عبدالله كل واحد فينا له طريقة تفكير تختلف عن الاخرين ولكن هناك من يختار الخط المستقيم هو اقصر مسافة بين نقطتين وفي من يوصل بطريق تاني وعموما زي ما بيقولو with time became better

وإن شاء الله كلنا هو في المنتدى بنتعلم اشياء جديدة وبنساعد بعض والفوكسبرو بحر بدو سباح كويس ومابيمل او يياس بسهولة اهلا بك في المنتدى تحياتي للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله،

الأخ Ababil

ذكرت بمشاركة سابقة أن VFP9موضوع جديد بالنسبة اليك وفهمت من كلامك أنك قد تكون عملت على لغات أخرى

( وصححني ان كنت غير مصيب )

وبجميع الأحوال، وطالما أنك ستبدأ بالــ 9 فأنصحك أن تبدأ بالطريقة الصحيحة، وهي التعلم ليس الاّ، قد تكون بعض الأوامر جديدة بالنسبة اليك،

ولكن ثق تمامًا بأن عدم معرفتك بالشيء لا علاقة له بصعوبته أو سهولته، وكما ذكرت فقلة المصادر العربية كذلك تزيد من الامور صعوبة،

لكن باختصار لا تقف امام حاجز ( لا أريد لأني لا أعرف )،

بالنسبة لأعمالك القديمة طالما أنها تعمل، فدعها تعمل دون المساس بها، او دون أن تحاول تطبيق ما تتعلمه من جديد عليها،

أما بالنسبة للأفكار ومنطق وطريقة سير الأمور صدقني هي ليست بالشيء الصعب أو المستحيل وأنا لم آت بشيء جديد، كل الأدوات متاحة أمامك وما عليك الا فرض أسلوبك الذي قد يكون أفضل من اسلوبي بعد ان تملك المعرفة الكافية باللغة

أبدأ أي برنامج صغير وتعلم من خلاله، واطرح أي سؤال وان شاء الله بتلاقي الجواب سواء من قبلي أو من قبل الأخوة الأفاضل بالمنتدى

وعلى فكرة المنتدى مليء بالمواضيع المفيدة، وأظن أن كل موضوع تقوم بقرائته سيعطيك معلومة جديدة

مع التحية للجميع

السلام عليكم اخوتي الاعزاء

اخي العزيز ababil

انا مع ماقاله الاخ عبد الله كما اقتبست منة

اما عن تسالك

نعم انا استخدمت الفهرس في بداية التشغيل لغرض البحث او الشرط الذي انا ادرجتة يعني حسب طلبي ولكن يتم حذف الفهرسة في حالة خروجي من الفورم لارجاع الجدول الى حالة الافتراضية

اما في حالة كانت الداتا للقراءة فقط يعني تفيد للبحث فقط واستطيع استخدام لغة الاستعلام او فلترة الجدول

اما عن سوالك عن alltrim فتفيد "إزالة كافة المسافات البادئة والزائدة أو أحرف تحليل من التعبير الحرف المحدد، أو زائدة عن الرائدة وصفر (0) بايت من التعبير ثنائي المحدد"

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

وبالنسبة للرسائل وارقام الضيغ وقيم الازرار فهي موجودة في هيرنز البرنامج

post-210280-076985300 1325140071_thumb.j

post-210280-028403400 1325140073_thumb.j

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

post-210280-095877400 1325140076_thumb.j

تحياتي للجميع وااكد اقتباس اخي شادو

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اشكركم اخوان على الردود الطيبة وعلى اهتمامكم النبيل

سأفكر بما قلتوه واحاول البدء بمحاولات صغيرة واتعلم خطوة خطوة

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

واشكرك اخي اسد العراق على التوضيح

بالنسبة لازرار الحوار وصلت المعلومة يبدو ان هناك ارقام مفهومة للبرنامج

تدرج بعد كل امر معين مثل امر مسج (MESSAGEBOX)

وهذاا يعني ان اكوادك يسهل فهما في محاولة منك لتبسيط الامور

ما زال امامي الكثير جدا للتعلم

الف تحية لكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اهلا وسهلا بك باي وقت

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .