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

الداله max تعطي ناتج خاطئ

مغلق
بدأه ابوعبدالملك في 28 أكتوبر 2001 · 12 رد · 877 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إلى جميع الأصدقاء في هذا المنتدى الرائع

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

أنا محرج جداً من المدير والسبب الداله max

حيث أنني صممت برنامج إتصالات إداريه خاص وكلما يريد الموظف الذي يعمل في الإتصالات إضافة وارد جديد فٌإنه يضغط زر الإضافه ويقوم البرنامج بإخفاء جميع الأزرار الموجود ويظهر زرين

أحدهما إلغاء الأمر

والآخر الحصول على رقم جيد

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

ثم أضفت إليه الرقم 1 لأحصل على (أعلى رقم +1)وأستخدمه في الوارد الجديد

فإذا كان آخر رقم مثلاً 5 سيكون الناتج 6 وأضعه في مربع النص على النموذج وأقوم بالحفظ مباشرة بواسطة senkeys

---

*****

المشكله

*****

المشكله أنني وجدت بعد يوم أنه في بعض الإدخالات يكون الرقم غير متسلسل 5-7-8-9-10-12 وهكذا تتبعت البرنامج وحسب التتبع فإنه

من المستحيل حصول ذلك ،،، ولكنه حصل!!!!!؟

الرجاء إفادتي عاجلاً عن سبب ذلك ولم جزيل الشكر

علماً أن الجداول في ملف وبقيه كائنات قاعدة البيانات في ملف وبينهم رابطه (والبرنامج access 97 والنظامwin98)

------------------وما توفيقي إلا بالله--------------------

إذا كنت بالله مستعصما---------فماذا يضيرك كيد العبيد

#2

أخي العزيز

أنصح بإستخدام Dmax علي الجدول الذي تقوم بتخزين البيانات فيه

مباشرة لتفادي وجود Filter علي الفورم

Dim m As Long
m = DMax("outID", "out") + 1
'MsgBox m
Forms![Addout]![outID] = m

حيث outid هو الحقل الموجود في جدول Out و المطلوب زيادة واحد عليه فى الفورم addout

#3

الأخ ابو عبدالملك

هل الحقل الذي تحفظ فيه أرقام الوارد رقمي أم نصي ؟

وما هي فائدة قاعدة البيانات الأخرى ؟

وهل تأكدت أن الموظف لم يحذف السجل في الرقم الناقص ؟

ولك تحياتي

#4

-أخي مصراوي شكرا على الرد والحقيقه أنني لا أعرف dmaxإطلاقاًفيا ليت توضحها وتوضخ الفرق بينها وبين max

- الأخ أبو حمود أشكرك على الرد وعلى كثرة ما أتحفتنا به من فوائد وإليك توضيخ ما طلبت

1- الحقل رقمي

2- فائدة قاعدة البيانات الإخرى لآنني صممت البرنامج ليعمل على ثلاث أجهزه (جهاز خادم وسيكون عليه البيانات فقط وجهازين عليهما البرامج (موظف صادر وموظف وارد)طبعاً إذا كانت access جيده في ذلك لأن أحد الأخوه ذكر لي أن هذه الطريقه جيده وأنا إلى الآن لم أطبقهالكني صممت برنامجي من البدايه ليعمل بما يتوافق مع ذلك -خاصة عند الحصول على رقم جديد-

3-الموضف لم يحذف السجل وتأكت من ذلك.

4- كذلك تتبعت سير البرنامج ووجد أنه يحصل على أعلى رقم بشكل صحيح ويضيف إليه 1 بشكل صحيح ويضيفه إلى الجدول بشكل صحيح فاندهشت وإحترت في الأمر متى يحصل وأن تعطي الداله maxرقم غير موجود !!!!!!!!!!!؟؟؟؟

5-تراني عليمي في ها البرمجه يعني هوايه فقط لكن أعتقد أنني قرأت الكثيرفي برمجة vb (سبق وأن رديت علي في هذا المنتدى حول ذلك)

==شكراً للجميع==

------------------وما توفيقي إلا بالله--------------------

إذا كنت بالله مستعصما---------فماذا يضيرك كيد العبيد

#5

ما هي طريقة حصولك على MAX ؟

قد تكون المشكلة لها علاقة بالتأمين أقصد تأمين السجلات .

ولك تحياتي

#6

تقوم هذه الدالة بالبحث عن أقصي قيمة لحقل معين فى جدول معين كما فى المثال أعلاه

بحثت فيه عن أقصي قيمة للحقل Outid الموجود فى الجدول out

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

#7

الأخ أبو حمود الطريقه

set rs = db.open recordest "select max(field1) from table"

فقط ثم يكون عندي سجل واحد آخذ قيمته وأضيف إليه 1

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

مع شكري و تقديري للجميع

------------------وما توفيقي إلا بالله--------------------

إذا كنت بالله مستعصما---------فماذا يضيرك كيد العبيد

#9

الاخ الكريم لا يمكن اوامر اكسس الدوران(loop) على جميع السجلات لتحصيل شرط ما، ولعمل ذلك استخدم الدوران في DAO.

#10

الاخ العزيز هذه المشكلة لها احتمال وهو ان Max تبحث في الكائنات المخفية والتي تحفظ الرقم التلقائي حتى وان تراجع المستخدم بعد ادخال السجل، وبالتالي عند استدعائها(Max) تنظر الى الكائنات المخفية وتاخذ نتائجها!!

#11

أخي العزيز / أبو عبد الملك

انصحك باستخدام هذه الوحدة النمطية

Public Function ALast(mytable As String, MyControl As String)

Dim MyDB As Database

Dim MyRs As Recordset

Set MyDB = CurrentDb

Set MyRs = MyDB.OpenRecordset(mytable, DB_OPEN_DYNASET)

If MyRs.RecordCount = 0 Then

ALast = 0

Exit Function

End If

MyRs.Sort = MyControl

MyRs.MoveLast

ALast = MyRs(MyControl)

MyRs.CLOSE

Set MyDB = Nothing

End Function

وفي حدث ( عند النقر ) للزر المكلف بفتح عدد جديد ضع الكود التالي :

Me!اسم الحقل في النموذج = ALast("اسم الجدول", "اسم الحقل في الجدول") + 1

#12

الأخ أبو حود أنا في إنتضار ردك

الأخ مصراوي شكراً على التوضيح

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

- الداله تطبق على عمودمحدد من جدول محدد فهي على إعتقادي أنها ستعطي الناتج من نفس العمود في نفس الجدول بغض النضر عن أي إعتبارات أخرى

الأخ أبو بشاير / ٍسأفحص هذا الكود حسب توافقه مع برنامجي وأخبرك بالنتائج إذا كان ينطبق (معليش تراني بطي شوي)

شكراً للجميع ؛؛؛؛؛

------------------وما توفيقي إلا بالله--------------------

إذا كنت بالله مستعصما---------فماذا يضيرك كيد العبيد

#13

الأخ ابوعبدالملك

لم يتضح لي سبب المشكلة .

أعانك الله .

ولك تحياتي

هذا الموضوع مغلق.

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