jjafferr قام بنشر فبراير 5, 2016 قام بنشر فبراير 5, 2016 السلام عليكم بسبب استخدامنا لوحدات نمطية ، ودالة DFirst ، فهذه تأخذ مجهود من البرنامج ، فعليه ، يتأخر عمل الاستعلام!! انا هنا وضعت جميع المشاركات في برنامج واحد ، وجعلت في الجدول 129,600 سجل ، لنعرف الفرق في السرعة بين المشاركات: . وأحد النتائج: . جرب وشوف الوقت بجزء من الثانية (نعم اجزاء الثانية تعتبر تأخير بالنسبة لي ) مع ملاحظة انك لن تحصل على نفس الوقت للإستعلام ، وذلك يعتمد على مدى انشغال الكمبيوتر بأوامر الوندوز والتي يعطيها الكمبيوتر الاولوية لذلك ، خذ معدل 3-4 مرات لكل استعلام وفي النهاية ستعرف ان اختيار الاستعلام له اسباب اخرى ايضا غير : 7 ساعات مضت, أبو وليد said: الاستعلام المباشر أسهل ولكن الكود تستطيع التحكم به أكثر وأشمل . جعفر 256.2.Database3.accdb.zip 2
أبو وليد قام بنشر فبراير 6, 2016 الكاتب قام بنشر فبراير 6, 2016 بارك الله فيك ونفع بك رائع أنت لا تقدم حلوم بل معلومات للأبد استفدت كثيرا ووضعت لي حلول لأشياء الغيت عملها لعدم وصولي لحلها بما أن تكلمت عن السرعة لدي استفسار لدي ملف كبير به تقريبا 541906 كل يوم يضاف له 173 سجل هذه السجلات لعدد 173 شركه عملت استعلام في عملية sum لبعض الاعمدة المضافة للاستعلام حسابيا طبعا عملية sum لمجموعة من تلك السجلات الاستعلام يستغرق وقت طويل جدا ما ادري هل السبب كثرة السجلات أم ماذا بارك الله فيك
اسد السنة قام بنشر فبراير 6, 2016 قام بنشر فبراير 6, 2016 ليش تعب نفسك باستخدام الاستعلام للجمع اصدارات الاوفيس 2010 فما فوق يوجد بها حقل محسوب اثناء تصميم الجدول يقوم تلقائي بالحساب
jjafferr قام بنشر فبراير 6, 2016 قام بنشر فبراير 6, 2016 وعليكم السلام أبو وليد هو دائما في طريقة احدها: http://www.officena.net/ib/topic/67004-تسريع-عملية-البحث-في-access/?do=findComment&comment=435657 ولكن ، لكل برنامج تفاصيله ، فقد يكون تغيير بسيط في استعلام ، يغير سرعة الاستعلام الآخر الذي يعتمد عليه جعفر
أبو وليد قام بنشر فبراير 6, 2016 الكاتب قام بنشر فبراير 6, 2016 الاعمدة الي عندي كلها اعمده حسابية مضافة للاستعلام بحاول أضغط الملف واحلمه في رابط وتشوفه هذا الرابط http://http://www.mrkzgulf.com/do.php?id=187861 لاحظ الاستعلامات
jjafferr قام بنشر فبراير 6, 2016 قام بنشر فبراير 6, 2016 وهذه النسخة لعمل المتوسط تلقائيا على جميع الاختيارات اختار كم مرة تريد التجربة ، انا اخترت 10 مرات . وهذا الكود الذي يقوم بالعمل: Function Open_Query_Timing(Q, F) Me(F).BackColor = RGB(225, 225, 0) 'yellow DoEvents t = Timer DoCmd.OpenQuery Q Me(F) = (Nz(Me(F), 0) + Format(Timer - t, "0.000000")) / 2 DoCmd.Close acQuery, Q, acSaveNo Me(F).BackColor = RGB(255, 255, 255) 'white End Function Private Sub cmd_Get_Average_Click() For i = 1 To Me.How_Many_Times Me.Counter = i RowID = 0 RowVal = 0 Call Open_Query_Timing("Query1", "q1") Call Open_Query_Timing("Query2", "q2") Call Open_Query_Timing("Query3", "q3") Call Open_Query_Timing("Query4", "q4") Call Open_Query_Timing("Query6", "q6") Call Open_Query_Timing("Query7", "q7") Next i End Sub جعفر 256.2.Database3.accdb.zip
jjafferr قام بنشر فبراير 7, 2016 قام بنشر فبراير 7, 2016 23 ساعات مضت, أبو وليد said: بما أن تكلمت عن السرعة لدي استفسار لدي ملف كبير به تقريبا 541906 سجل كل يوم يضاف له 173 سجل ، هذه السجلات لعدد 173 شركه عملت استعلام في عملية sum ، لبعض الاعمدة المضافة للاستعلام حسابيا ، طبعا عملية sum لمجموعة من تلك السجلات الاستعلام يستغرق وقت طويل جدا ما ادري هل السبب كثرة السجلات أم ماذا السلام عليكم أخي ابو وليد في الواقع برنامجك كان تحدي البارحة لما انزلت البرنامج ، وشغّلت استعلام المجاميع ، بدأت احسب مثل الاطفال ، وعديت العدد 600 (بس جزاك الله خير ، ارجعت الثقة في نفسي اني اقدر احسب لهذا العدد ) ، والاستعلام ما خلص وسيطر على الكمبيوتر ، وما رضى يتسكر ، فاضطررت ان اغلق البرنامج من Windows Task Manager احد الافكار اللي جائتني ، وهي عمل جدول مؤقت ، نخزن فيها البيانات من الاستعلام العادي ، وثم من هذا الجدول نعمل استعلام المجاميع ، وبدأت احسب مثل الاطفال ، وعديت العدد 600 ، والاستعلام ما خلص وسيطر على الكمبيوتر ، وما رضى يتسكر ، فاضطررت ان اغلق البرنامج من Windows Task Manager دخلت في الاستعلام وفككت الكود ، واتضح لي ان المشكلة هي هذا السطر: volume: [close]-Nz(DLookUp("close","Saudistock","ID = " & Nz(DMax("ID","Saudistock","tickerr = '" & [tickerr] & "' And ID < " & [ID]),0))) . يعني احنا ننادي الاوامر DLookup و DMax بعدد السجلات 541906 مرة (ومثل ما المثل العماني يقول: وابويا انا عليك) ، لأن هذه الاوامر اصلا ثقيلة في الاستعمال ، وللعلم ، كل امر من هذه الاوامر (DMax , DLookup, Dcount, Dlast, DMin, DFirst) عبارة عن استعلام ولكنه بصيغة امر تسهيلا للمستخدم ، ولاحظت ان المعادلة عبارة عن أمرين مستقلين ، ففككتهم عن بعض ، وفهمت اللي يعملونه ، ولكني كنت محتاج اشوف نتائج كل امر بطريقة مستقلة ، فشغلت الاستعلام ، وهذه النتيجة: . وبعد عدت تجارب ، استطعت ان اتخلص من هذا الكود ، بوحدة نمطية: ' Public old_i As Long Public old_c As Double Public old_t As Long ' Function Get_Previous(i, t, c) As Double 'i = ID 't = ticherr 'c = close If Val(t) <> Nz(old_t, 0) Then old_i = 0 old_c = 0 End If old_t = Val(t) Get_Previous = Format(c - Nz(old_c, 0), "#.000") 'DM = Nz(DMax("ID", "Saudistock", "tickerr = '" & [tickerr] & "' And ID < " & [ID]), 0) 'volume = [Close] - Nz(DLookup("close", "Saudistock", "ID = " & DM old_i = i old_c = c End Function . وعلشان تشغل الاستعلام (ليس استعلام المجاميع) ، لازم تستخدم النموذج علشان يعطي البيانات نتيجة صفر الاولية المطلوبة ولاحظت كذلك انك عامل فهرسة لجميع الحقول في الجدول ، وهذا يكبر حجم البرنامج وبدون مردود ، فحذفت فهرست هذه الحقول النتيجة: في المرفق برنامجين: برنامجك بدون بيانات ، وبرنامج للجدول المؤقت ، استخدم فهرست الحقول كما في البرنامج المرفق ، واربط الجدول اللي في البرنامج المؤقت ، ببرنامجك ، وعندها عندك طريقتين للعمل (النموذج فيه زرين): 1. سيقوم البرنامج بتفريغ بيانات الجدول المؤقت ، ثم الاستعلام العادي سيُلحق البيانات جديدة بالجدول المؤقت ، وعند الانتهاء ، سيعمل استعلام المجاميع ، 2. وبدون استعمال الجدول المؤقت ، يأخذ استعلام المجاميع بياناته من الاستعلام العادي ، وانا أفضل استخدام الطريقة الاولى ، وخصوصا ان الجدول المؤقت لن يضر برنامجك وافضل شئ في هذه العملية هي نتائج السرعة: 1. والذي فيه استعلام الحاق بيانات في الجدول المؤقت ، ثم عمل استعلام المجاميع = 120 ثانية 2. استعلام المجاميع والذي يأخذ بياناته من الاستعلام العادي = 73 ثانية 3. واذا كانت البيانات موجودة في الجدول المؤقت ، واجرينا استعلام المجاميع = 3 ثوان جعفر 261.1.SaudiSatck2.zip
أبو وليد قام بنشر فبراير 7, 2016 الكاتب قام بنشر فبراير 7, 2016 ما شاء الله الله يسعدك دنيا واخره اجرب عمليا وارد عليك ما يحدث معي
أبو وليد قام بنشر فبراير 7, 2016 الكاتب قام بنشر فبراير 7, 2016 رائع ما شاء الله عليك بحاول أضيف الجدول المؤقت في القاعدة عند فتح القاعدة يضيف البيانات وعند الاغلاق بفرغ البيانات اش رأيك مو أفضل
jjafferr قام بنشر فبراير 7, 2016 قام بنشر فبراير 7, 2016 10 دقائق مضت, أبو وليد said: بحاول أضيف الجدول المؤقت في القاعدة عند فتح القاعدة يضيف البيانات وعند الاغلاق بفرغ البيانات اش رأيك مو أفضل لا ، لأن حجم برنامجك بيصير مثل الديناصور ، وبتضطر ان تستخدم الضغط والاصلاح دائما ، لإرجاعه الى حجمه الاصلي وبعدين اذا ما انتبهت ، حجم البرنامج المؤقت يوصل الى 85MB جعفر
أبو وليد قام بنشر فبراير 7, 2016 الكاتب قام بنشر فبراير 7, 2016 هههههههههههههههههههههههههههههههههههه يعطيك العافية بس أما مااحتاج اضيف كل السجلات للجدول المؤقت بالكثير 30 سجل لكل شركة استفسار أخير هل تنصحني بتقسيم القاعدة
jjafferr قام بنشر فبراير 7, 2016 قام بنشر فبراير 7, 2016 6 دقائق مضت, أبو وليد said: استفسار أخير هل تنصحني بتقسيم القاعدة هذا من الاساسيات اللي لازم تعملها لما برنامجك يبدأ يشتغل ، من اول يوم لأن الجداول نادرا يصير لها Corruption ، بينما الطامة تصير في جزء النماذج / التقارير ... ، فلا تضيّع الشغل الكبير (البيانات) بسبب عدم تقسيم برنامجك جعفر 2
أبو وليد قام بنشر فبراير 7, 2016 الكاتب قام بنشر فبراير 7, 2016 في ٢٥/٠٤/١٤٣٧ at 14:34, jjafferr said: شكرا جرب هذا الكود بدل السابق : Public RowID As Integer Public RowVal As Double Function Add_5(N) 'N = vol ' If Len(RowID & "") = 0 Or RowID = 0 Then RowID = RowID + 1 ' End If If RowID = 1 Then Add_5 = N Else 'Add_5 = N + RowVal + 5 Add_5 = RowVal + 5 End If RowVal = Add_5 End Function جعفر استاذي الكود رائع ومفيد جدا ولكن به مشله لا أعلم هل هي من الكود ام ماذا عند فتح الاستعلام وتحريك عجلة الماوس تتغير النتائج
jjafferr قام بنشر فبراير 8, 2016 قام بنشر فبراير 8, 2016 وعليكم السلام الاكسس لما يفتح الاستعلام ، فانه لا يعطيك بيانات كل السجلات دفعة واحدة ، وانما لتسريع العمل ، فانه يحسب قيم البيانات التي تظهر على الشاشة ، ولما تنزل للاسفل لترى اي سجل ، فيقوم الاكسس بحساب السجلات الجديدة التي على الشاشة مرة اخرى ، طيب والسجلات اللي شفناها سابقا ، ورجعنا نشوفها مرة ثانية ، فكذلك يقوم الاكسس بحساب قيمها ، لأن الاستعلام لا يملك طريقة لحفظ البيانات المحسوبة ، ولأن الاستعلام يستخدم وحدة نمطية تتغير فيها القيم ، فالارقام ستتغير كذلك بس للعلم ، نحن نواجه هذه المشكلة مع الوحدة النمطية ، وذلك بسبب طبيعة عمل الاستعلام في تغيير البيانات على اساس كل سجل ، وإلا ، فلا مشكلة باستخدام الوحدات النمطية للإستعلام لهذا السبب عندك طريقتين لحل هذا الموضوع: 1. عمل جدول مؤقت ، وارسال بيانات الاستعلام مباشرة الى الجدول ، ثم قراءة البيانات من الجدول ، وعمل الخطوة التالية ، 2. ارسال البيانات مباشرة الى التقرير ، جعفر
أبو وليد قام بنشر فبراير 8, 2016 الكاتب قام بنشر فبراير 8, 2016 فكرة الجدول المؤقت رائعه سويت عمود أخر في الاستعلام مع تغيير الكود وإضافة في الكود Option Compare Database Public Rowclose As Double Public RowEMA As Double Function Add_3(T, N) 'T = ticker 'N = close If T = 0 Then Add_3 = N Else Add_3 = N * (2 / (5 + 1)) + (1 - (2 / (5 + 1))) * Rowclose 'Else ' Add_3 = Rowclose_1 + Rowclose_2 + Rowclose_3 End If Rowclose = Add_3 End Function Function EMA_2(T1, S) 'T = ticker 'N = close If T1 = 0 Then EMA_2 = S Else EMA_2 = S * (2 / (5 + 1)) + (1 - (2 / (5 + 1))) * RowEMA 'Else ' Add_3 = Rowclose_1 + Rowclose_2 + Rowclose_3 End If RowEMA = EMA_2 End Function المشكله عند عمل الكود الاول فقط يعطي نتيجة 100% لمن أضيف عمود أخر يعطي نتيجة خطأ في العمود الجديد والعمود السابق تحملني يااستاذي الفاضل
jjafferr قام بنشر فبراير 9, 2016 قام بنشر فبراير 9, 2016 آسف أخوي أبو وليد ، بس هذا الكود لا علاقة له بالموضوع هذا وانا بعيد عن كمبيوتري الاصل ، فما اعرف وين الكود الاصل علشان اقارن بينهم اقترح عليك ان تفتح سؤال جديد ، وتعرض الكود الاصل ، ثم تعرض الكود الجديد ، فمنه نستطيع ان نعمل المقارنة ، كذلك يُحبذ ان ترفق بيانات قليلة في برنامجك ، وترفعه كذلك والاهم انك تذكر رابط الموضوع الاصل ، حتى يكون سهل على المتتبع هذا الموضوع يُغلق
الردود الموصى بها