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

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

مغلق
بدأه ahamied في 19 يونيو 2006 · 16 رد · 4,050 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني بالمنتدي والاخوة الزوار

كما تعرفون ان اصل الارقام بالحاسب الالي هي نظام ثنائي اي ان الرقم اي ان رقم 20 الذي نعرفه بالنظام العشري هو 10100 بالنظام الثنائي

فان الاكسس يحول ارقامك الي نظام ثنائي عند ادخالها ليفهمها ثم يحولها مرة اخري الي النظام العشري لنعرف نقرأها.

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

مدين دائن

10.25 10.12

15.12 15.25

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

للتغلب علي هذه الشكلة يوجد عدة طرق

1- الا تستخدم شرط التساوي ولكن استخدم شرط ادا كان الفرق اصغر من 0.001 مثلا

2- استخدم احد الدوال الاتية ABS او int

بالله من لديه حلول اخري او آراء يعلمنا مما علمه الله

مرفق لكم صورة نموزج بعد 21000 سجل لاحظ اجمالي القلين C_Value و D_Value مع ان النموزج لا يسمح سوي بكسريين عشريين ولكن ده اللي حصل

post-80846-1150708114_thumb.jpg

Microsoft Certified DataBase Administrator MCDBA

#2

اخي الفاضل احمد

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

لان الاكسيس لا يمكن ان يخطأ وحتى لو كان الكسر واحد على مليون وليس واحد على الف

انظر المثال المرفق

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

AHMED_VALUES.rar

اختكم

زهره

#3

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

اما فى الاكسس سيكون كما شهدتي فى الصور

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

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

بخصوص مرفق رسالتك فهو يحتوب علي 15 سجل اما مرفق رسالتي الاولي لاحظي الصورة يحتوي علي اكثر من 21000 سجل

Microsoft Certified DataBase Administrator MCDBA

#4

اخي الفاضل احمد

كما ذكرت لك سابقا انه يوجد لديك اختلاف في البيانات بين الحقلين ----- الاختلاف هو 0.000001 في الحقل D_VALUE بالتأكيد يوجد في احد الاعداد رقم عشري زائد بهذه القيمة

انظر لهذه الصوره لبرنامج الاكسيس

19_06_06_03_26_00_1150755960AH33.gif

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

19_06_06_03_26_47_1150756007AH.gif

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

19_06_06_03_27_35_1150756055AH_.gif

لمعلوماتك :

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

للتجربة في برنامج الاكسيس : قم بعرض النموذج في وضع التصميم ثم قم بإنقاص حجم الحقل C_VALUE قليلا ثم انظر النتيجه ستجد ان الارقام اصبحث 885307680.48 بدلا من 885,307,680.479999

19_06_06_04_04_29_1150758269AHB.gif

19_06_06_04_15_17_1150758917AHA.gif

للتجربة في برنامج الاكسيل اختر خلية المجموع لـ C_VALUE ثم اختر تنسيق خلايا وقم بإنقاص المنازل العشرية او زيادتها وانظر النتيجه مباشرة في نفس اللوحة الخاصة بتنسيق الخلايا عند الانقاص الى منزلتين عشريتين سيكون الرقم هو 885307680.48 وعند زيادة الارقام العشرية الى 6 خانات عشرية سيكون الرقم هو 885,307,680.479999

وهذه ملفات مرفقه للاكسيس والاكسيل

AHMED.rar

اختكم

زهره

تم تعديل هذه المشاركة بواسطة zahrah في 20 يونيو 2006 في 02:15

#5

السلام عليكم

الاخت الدكتورة زهرة

مرفق لك جدول يحتوي علي اكثر من 34000 سجل وجميع هذه السجلات يتم ادخالها من شاشات ( نمازج ) وتم وضع قاعدة تحقق من الصحة حيث لا يقبل ادخال اكثر من كثرين فقط عشريين ( كما موضح بالصورة المرفقة ) ومع ذلك بعد فتح الملف المرفق ستلاحظين ان جمع الحقلين C , D يفرق بـ 000001.

المرفقات

1 صورة من نموزج الادخال تبين قاعدة التحقق من الصحة عند محاولة المستخدم لادخال اكث من كسريين عشريين

2 ملف يحتوي علي 34000 سجل والناتج للجمع المختلف

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

بالطبع لن تفحصي 34000 سجل - يمكن استخدام فكرة ضرب القيمة فى 100 ثم تطبيق دالة INT ثم القسمة علي 100 مرة اخري للتاكد من التخلص من الكسور الزائدة -- وهنا ستظهر المفاجآت

المرفقات هي CHK.MDB , ASD.JPG

Microsoft Certified DataBase Administrator MCDBA

#6

ماشاء الله موضوع رائع ومداخله من المبدعه دائما اروووع واروووع

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

#7

الاخوة الاعضاء

ملاحظتكم علي هذه المشكلة مهمة جدا - صدقوني

Microsoft Certified DataBase Administrator MCDBA

#8

اخي الفاضل احمد

بارك الله فيك

وبعدين على هونك لا تعصب علينا فأنا لست من اخترع الاكسيس ولكني احاول ان اسبر اغواره وكنوزه التي لا تنتهي

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

شوف يا ابني :

1. في النموذج الخاص بك يوجد الحقلين C_VALUE و D_VALUE الى وهذين الحقلين المنازل العشرية الخاصه بهما هي 2 منازل عشريه هنا حبايب

2. في خانة المجموع للحقلين انت عامل التنسيق الخاص بالحقلين 0.000000000 بعني تسعة منازل ( بليون ) ليه كدا يا احمد هو انت عندك كم فاصله عشرية في الارقام لا يوجد سوى 2 قاصله . طيب ياعم خليها تعدي

2. الان عند الجمع سيكون اختلاف في حقل مجموع D_VALUE بخطأ بسيط جدا هو 0.0001 لماذا هذا الاختلاف

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

إذا كان expression "التعبير" الذي تم تمريره إلى الدالة موجود خارج نطاق نوع البيانات الذي يتم التحويل إليه، يحدث خطأ.

يمكنك بشكل عام توثيق التعليمات البرمجية باستخدام دالات تحويل البيانات لتوضيح إنه ينبغي أن يتم التعبير عن ناتج بعض العمليات كنوع بيانات محدد بدلاً من نوع بيانات افتراضي. على سبيل المثال، استخدم CCur لفرض حساب العملة في الحالات التي يتم فيها استخدام الدقة المفردة، أو الدقة المزدوجة، أو حساب الأعداد الصحيحة.

ماهي الدالة CCur وكيف تستخدم

هذه الدالة خاصه بالعملة اذا كانت الاعداد من -922,337,203,685,477.5808 إلى 922,337,203,685,477.5807.

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

مثال : لاستخدامها في عنصر تحكم مربع نص غير منظم في النموذج على اعتبار ان مربع النص الاساسي في النموذج هو مثلا D_VALUE

=CCur([D_VALUE])

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

ايضا يوجد دالة لا تقل شراسة عند الدالة الاولى وهي خاصة بالارقام العشرية وتدعى CDec

+ / -79,228,162,514,264,337,593,543,950,335 للأرقام ذات المقياس صفر؛ بمعنى، الأرقام التي لا توجد بها منازل عشرية. وبالنسبة للأرقام التي تتضمن 28 منزلة عشرية، يكون النطاق + / -7.9228162514264337593543950335. ويكون أقل رقم غير صفري ممكن هو 0.0000000000000000000000000001.

=CDec([D_VALUE])

الحمد لله اننا وصلنا الى اخر رقم عشري وهو 0.0000000000000000000000000001.

نقطه اخرى يجب التطرق لها وهي خصائص الحقول ونوعها وسوف استعرض معك فقط جزء يسير خاص بخصائص بالارقام

كما تعلم اخي الكريم ان لكل رقم حجم معين فقد يكون 1 بايت او 2 او 4 او 8 حسب نوع الحقل الرقمي و يصل إلي 16 بايت في حالة أل replication لهذا يجب الاختيار المناسب لكل حقل بمعنى نسنخدم ما نحتاج اليه ( وليس كما حدث معك مع تنسيق الخانات العشرية 0.000000000 )

اما خاصية الحقول Field Size الرقميه فنستطيع ان نوضحها كالتالي :

النوع : بايت Byte

الوصف : يتم تخزين أي رقم بين صفر و 255

العلامات العشرية : لايوجد

حجم التخزين : ا بايت - 1byte

النوع : عشري Decimal

الوصف : يخزن من 10^38 -1 إلي -10^38 -1 في حالية أل adp و من 10^28 -1 الى -10^28 -1 في حالية أل adp

العلامات العشرية : 28

حجم التخزين : 12 بايت

النوع : عدد صحيح Integer

الوصف : يخزن من –32,768 إلي 32,767 بدون كسور

العلامات العشرية : لايوجد

حجم التخزين : 2 بايت

النوع : عدد صحيح طويل Long Integer

الوصف : يخزن من –2,147,483,648 إلي 2,147,483,647

العلامات العشرية : لايوجد

حجم التخزين : 4 بايت

النوع : مفرد Single

الوصف : يخزن من –3.402823E38 إلي –1.401298E–45 في الأرقام السالبة و من 1.401298E–45 إلي 3.402823E38 في الأرقام الموجبة

العلامات العشرية : 7

حجم التخزين : 4 بايت

النوع : مزدوج Double

الوصف : يخزن من –1.79769313486231E308 إلي –4.94065645841247E–324 في الأرقام السالبة و من 4.94065645841247E–324 إلي 1.79769313486231E308 في الأرقام الموجبة

العلامات العشرية : 15

حجم التخزين : 8 بايت

النوع : معرف النسخة المتماثلة Replication ID ---- Globally unique identifier - GUID

الوصف : بأخذ رقم النسخة المتماثل وكون على شكل {66E521A4-8B86-4AE1-B46C-D9B124EB10F7}

العلامات العشرية : N / A

حجم التخزين : 16 بايت

الخلاصة :

نستنج من هذا كله التالي

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

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

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

4. في حالة حدوث اخطاء طفيفة جدا تصل الى 1 الى المليون نستخدم معها دوال التصحيح

20_06_06_08_18_27_1150816707AZ.gif

20_06_06_08_26_36_1150817196AZ_.gif

اختكم

زهره

#9

السلام عليكم

اختنا زهرة اولا وقبل ان اكمل قرآة ردك علي الموضوع

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

وبعديين انا مش عصبي

بعد اذنك هارجع اكمل قرآة محاضرة اليوم

خير الناس انفعهم للناس

Microsoft Certified DataBase Administrator MCDBA

#10

اخي احمد

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

وهذا يتضح من ردودك وتفاعلك واحيانا تغضب لمن يخالفك الرأي بس مش أوي :blink: :s

من كتاب ( كيف تحلل ردود افعال من تتحاور معه )

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

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

ختاما لك مني كل الشكر والتقدير ..... ولا تعصب علينا . :D :D

#11

الاستاذة زهرة

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

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

ارجو التعديل بما يجب

اسف

المرفقات

db1.rar

مر الكلام زى الحسام يقطع ما كان ما يمر، أما المديح سهل ومريح يخدع لكين بيضر، والكلمة دين من غير إيدين بس الوفا ع الحر

#13

الاخت الفاضله والاستاذة الرائعه زهرة

شكرا على الرد

ولكن الرجاء النظر للاستعلام المقصود منه هو لاايجاد القيود غير المتوازنه والمعيار الموجود فى الاستعلام هو اظهار القيم فقط التى لايكونالفرق يساوى صفر ومعنى خروج هذه القيم اى ان الاكسيس يخبرنا انها ليست صفرا وكان المقصود من زيادة الخانات العشرية هو لمعرفة ماهو الفرق الفعلى

ولك الشكر

مر الكلام زى الحسام يقطع ما كان ما يمر، أما المديح سهل ومريح يخدع لكين بيضر، والكلمة دين من غير إيدين بس الوفا ع الحر

#14

السلام عليكم

تم تعديل شرط <>0 فى الاستعلام الي شرط اخر - شوف الاستعلام

نصائح حول هذه المشكلة :

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

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

يمكنك استخدام دالات ABS

وفقا لمدخلاتك المفروض القيد رقم 455 هو القيد الوحيد غير المتزن والفرق هو 0.05 عملة

استخدم هذه الصيغة النمازج

If Abs(Me.SumCreditE - Me.SumDepitE) > 0.0001 Then

db1.rar

Microsoft Certified DataBase Administrator MCDBA

#15

شكرا اخ احمد

وان كان القصد هو توضيح ان هناك مشكله غير معروف سببها فى الاكسيس فى اى من نواتجه(الطرح)

ولكم خالص تحياتى

مر الكلام زى الحسام يقطع ما كان ما يمر، أما المديح سهل ومريح يخدع لكين بيضر، والكلمة دين من غير إيدين بس الوفا ع الحر

#16

السلام عليكم

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

تم تعديل هذه المشاركة بواسطة ahamied في 24 يونيو 2006 في 11:55

Microsoft Certified DataBase Administrator MCDBA

#17

شكرا على الرد والاهتمام

ولكم خالص تحياتى والى الامام

مر الكلام زى الحسام يقطع ما كان ما يمر، أما المديح سهل ومريح يخدع لكين بيضر، والكلمة دين من غير إيدين بس الوفا ع الحر

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

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

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

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

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

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