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

كيف امكن الدالة DMax على العمل مع تعدد المستخدمين لاعطاء ترقيم تلقائي

بدأه abualhanoof في 4 أكتوبر 2010 · 24 رد · 2,266 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مســــــاء الخيــــــرات

استخدم ترقيم تلقائي باستخدام الدالة dmax

ووضعت الكود الاتي

Me!ID = Nz(DMax("[iD]", "[importationtable]"), 0) + 1

عند حدث قبل الادراج بالنموذج

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

لكن لاحظت اثناء تعدد المستخدمين الرقم التلقائي لا يتغير عندما يقوم المستخدم الاخر بادخال البيانات في النموذج في نفس الوقت..!!!؟؟

انا في اشد الحاجة الى العمل في هذا المجال..؟؟

ارجو واتمنى التكرم بالافادة

ولكم خالص شكر وتقديري

علما ان الحقل ID هو المفتاح الرئيسي

DMax.rar

#2

ضع هذا الكود فى حدث عند الضغط

لزر الذهاب الى سجل جديد

On Error GoTo Err_NEW_Click

newrec:
    DoCmd.GoToRecord , , acNewRec

Exit_NEW_Click:
    Exit Sub

Err_NEW_Click:
Select Case Err.Number
Case 2105
 Me!ID = Nz(DMax("[ID]", "[importationtable]"), 0) + 1
Resume newrec
Case Else
    MsgBox Err.Number & vbCrLf & Err.Description
    Resume Exit_NEW_Click
 End Select

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#3

اخي لم ينفع الكود

مصمم ياخذ نفس الرقم

لحظات اخي ..................

كانه ضبط معي.....

باكد لك بعد شوية

لحظات اخي ..................

كانه ضبط معي.....

باكد لك بعد شوية

#4

اخي الكود مش ناجح 100/100

يعطيك رقم جديد فقط عند الانتقال الى النموذج الفرعي..!!!

بينما عند التوافق في ادخال النموذج الرئيسي ياخذ نفس الرقم..!!!؟؟

#5

يأخى

كيف سيأخذ نفس الرقم و الحقل مفتاح أساسى

قد يكون الرقم الظاهر فى النموذج مكرر و لكن عند الحفظ لن يتكرر

ما يفعله الكود هو انه عند الانتقال الى سجل جديد

اذا كان الرقم موجود فسيعطى رقم جديد

و هكذا

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#6

استاذي الفاضل / Mrnooo2000

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

طبعا الرقم غير قابل للتكرار

....

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

* الرقم لا ينحجز تلقائيا بمجرد تعبئة اول حقل في النموذج الرئيسي..!!

شاكر لك على سع صدرك

واتمنى االتواصل ...

لك تجمل تحية

اخيك / ALcasir

post-234501-075607500 1286262262_thumb.j

المرفقات
replicate_error.JPG

تم تعديل هذه المشاركة بواسطة abualhanoof في 5 أكتوبر 2010 في 10:20

#7

استاذي الفاضل / Mrnooo2000

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

طبعا الرقم غير قابل للتكرار

....

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

شاكر لك على سع صدرك

واتمنى االتواصل ...

لك تجمل تحية

اخيك / ALcasir 

#8

أخي ضع هذا الكود في حدث BeforUpdate وإن شاء الله سوف تحل المشكلة .

If (IsNull([ID])) Or [ID] = "" Then
   Me!ID = Nz(DMax("[ID]", "[importationtable]"), 0) + 1
End If

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

تحياتي

DMax.rar

تم تعديل هذه المشاركة بواسطة omani في 5 أكتوبر 2010 في 16:01

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#9

تحية طيبة وبعد ،،،

أخي الكريم .. بإمكانك وضع هذا الكود عند حدث في الحالي من خلال الخصائص

Me.ID.Value = CurrentRecord

بالتوفيق

DMax.rar

[يمين]

إذا كـان تـرك الـدين يعــنــي تقــدمــاً

فـيا نفــس مـوتــي قبــل أن تتقـدمــي

[/يمين]

#10

مساء الخيرات اخواني الاعزاء

قبل كل شي شاكر لكم كثير على التفاعل..........

بالنسبة للكود الذي تفضل به اخي العزيز Omani

If (IsNull([iD])) Or [iD] = "" Then

Me!ID = Nz(DMax("[iD]", "[importationtable]"), 0) + 1

End If

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

فكرة هذا الكود هو عند الانتقال الى السجل الفرعي يظهر الرقم ID تلقائيا .....

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

اذا هذا الكود يعمل عند حدث قبل التحديث.....يعني انا وصلت تقريبا 90 % من الحل لانه لم اجد تعارض بين تعدد المستخدمين. ( لكن عشان احصل على الرقم لابد من الانتقال الى النموذج الفرعي)!!

بس اتمنى ان يظهر الرقم تلقائيا بمجرد الادخال في اول حقل.........

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

Me.ID.Value = CurrentRecord

لم يحل المشكلة.....ظهر مشكلة التكرار وظهور نفس مربع الرسالة الماضية

هذا ما وجب توضيحة....

#11

اخى الكريم

ما دام الامر كذلك فالحل بسيط

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

و نسيت النموذج الفرعى

و لكى تحل المشكلة كليا

ضع كود الترقيم فى حدث قبل التحديث أيضا مع وجوده فى حدث قبل الادخال

Private Sub Form_BeforeInsert(Cancel As Integer)
 Me!ID = Nz(DMax("[ID]", "[importationtable]"), 0) + 1
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
 Me!ID = Nz(DMax("[ID]", "[importationtable]"), 0) + 1
End Sub

هذا سيعطيك الرقم عند الادخال

و عند حفظ السجل الحالى

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

و سيظهر الرقم الجديد بالنموذج

جرب و اخبرنى

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#12

لاسف اخي العزيز / Mrnooo2000

ظهرت لي نفس المشكلة اعلاه ......

حاولت ادخال اول حقل بالنموذج ظهر لي رقم 1 ..., (طبعا هذا في الجهاز الاول)

وبعد ثواني ذهبت للجهاز الاخر وحاولت ادخال في الحقل الاول ايضا ظهر لي رقم 1....

.وعند محاولت الانتقال الى السجل الفرعي...ظهر لي الخطا الذي تراه في مشلركتي رقم 6

#13

اخى

لا أعرف اين المشكلة فقد جربت عندى و التعديل الاخير يعمل بنجاح

حتى فى النموذج الفرعى

ربما انك لم تكمل الحقول فى النموذج الفرعى فكل الحقول مطلوبة

تم تعديل هذه المشاركة بواسطة mrnooo2000 في 6 أكتوبر 2010 في 12:14

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#14

ممكن ان ترسل لي المرفق الذي اجريت التعديل عليه استاذي الفاضل..

#15

تفضل اخى المرفق

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

DMax.rar

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#16

اخي اثناء الادخال في النموذج الرئيسي في نفس الوقت يعطيني نفس الرقم.....

.ولكن بمجرد انتقال احد المستخدمين الى النموذج الفرعي يتغير الرقم...

فكان الرقم اثناء تدخيل البيان عند الجهازين رقم 6.....فعندما انتقلت الى السجل الفرعي تغيرت قيمتة الى 7...وبقى في الجهاز الاول رقم 6

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

يعني...لسه العملية مش مضبوطة كثير استاذي....

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

#17

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

Private Sub Form_BeforeInsert(Cancel As Integer)

Me!ID = Nz(DMax("[iD]", "[importationtable]"), 0) + 1

End Sub

لانه لا يتم حجز الرقم مباشرة....صحيح يظهر الرقم ولكن لا يححز...!!!

بينما في هذا الكود

Private Sub Form_BeforeUpdate(Cancel As Integer)

Me!ID = Nz(DMax("[iD]", "[importationtable]"), 0) + 1

End Sub

ينحجز ويظهر الرقم تلقائيا......لكن بشرط يجب الانتقال الى النموذج الفرعي

#18

للاسف الاجهزة لدى ليست مرتبطة بشبكة

و لكن مبدأيا

جرب على جهاز واحد و اخبرنى هل تظهر مشاكل ام لا

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

لان فى الحالتين سيتم الادخال من مكانين مختلفين

جرب المرفق كما هو على جهاز واحد و بدون اى تعديل و اخبرنى

تم تعديل هذه المشاركة بواسطة mrnooo2000 في 6 أكتوبر 2010 في 15:58

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#19

طيب

اخى الكريم

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

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

Me![shipmentdetails SubForm].SetFocus

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#20

أخي الكريم

ضع هذا الكود في حدث قبل الادخال BeforeInsert للنموذج

	Me.ID = (Nz(DMax("[ID]", "[importationtable]"), 0)) + 1

ثم ضع هذا الكود في حدث OnError للنموذج

	If DataErr = 3022 Then
   	MsgBox "الرقم الحالي تم حجزه من قبل مستخدم اخر . سوف يتم تغييره تلقائياً.. "
   	Me.ID = (Nz(DMax("[ID]", "[importationtable]"), 0) + 1)
    	DataErr = 0
    	Response = 0
    	Exit Sub
	End If

وإن شاء الله يعمل الكود كما تحب .

تحياتي

mrnooo2000 كتب:

للاسف الاجهزة لدى ليست مرتبطة بشبكة

استاذي يمكنك ان تقوم بمحاكاة عمل الشبكة على جهازك , وذلك بأن تقوم بتقسيم قاعدة البيانات ومن ثم تفتح اكثر من نسخه للفورم في نفس الوقت .

تحياتي

DMax.rar

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#21
omani كتب:

استاذي يمكنك ان تقوم بمحاكاة عمل الشبكة على جهازك , وذلك بأن تقوم بتقسيم قاعدة البيانات ومن ثم تفتح اكثر من نسخه للفورم في نفس الوقت .

تحياتي

اشكرك اخى الكريم

نعم هذا مل تم عمله بالفعل و لكن الاخ السائل يظهر عنده خطأ لا يظهر عندى

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#22

صباح الخير اخواني الاعزاء

اكرر شكري العميق مرة على سعة صدركم والتواصل معي.

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

Me![shipmentdetails SubForm].SetFocus

ظهر لي خطأ (مرفق)......هذا الخطا يحدث عند التوافق في التسجيل في نفس الحقل بالجهازين وعند انتقال احدهما الى السجل الفرعي

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

بالنسبة للكود الذي تفضل به الاستاذ Omani

كود رائع جدا .....وعمل المطلوب ...والجميل انه ينبه المستخدم بان الرقم الحالي قد تم حجزه ...

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

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

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

وهل نفضل استخدام هذا الكود قبله ايضا

If (IsNull([iD])) Or [iD] = "" Then

او ما في داعي.

وجزاكم الله الف خير

post-184061-067518400 1286429080_thumb.j

المرفقات
setfocus_error.JPG
#23

تفضل التعديل الاخير

استخدم الكود التالي ليقوم بعمل أنتر

sendKeys("{ENTER}")

تحياتي

DMax.rar

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#24

شاكر لك كثير استاذي Omani

على ما تفضلت به من شرح ومحاولات لعمل هذه الدالة في بيئة الشبكة

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

جعله الله هذا العمل الذي تقدموه في ميزان حسناتكم ................وغفر الله لوالديكم>>>>>>>>>> وجزاكم الله الف خير

اخيـــــــــــكم / ALcasir

#25

شاكر لك كثير استاذي Omani

على ما تفضلت به من شرح ومحاولات لعمل هذه الدالة في بيئة الشبكة

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

جعله الله هذا العمل الذي تقدموه في ميزان حسناتكم ................وغفر الله لوالديكم>>>>>>>>>> وجزاكم الله الف خير

اخيـــــــــــكم / ALcasir

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

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

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

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

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