اذهب الي المحتوي
أوفيسنا

jjafferr

أوفيسنا
  • Posts

    10011
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    408

كل منشورات العضو jjafferr

  1. السلام عليكم أخي ابو وليد في الواقع برنامجك كان تحدي البارحة لما انزلت البرنامج ، وشغّلت استعلام المجاميع ، بدأت احسب مثل الاطفال ، وعديت العدد 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
  2. وعليكم السلام ما فهمت قصدك ممكن تفصيل أكثر ، و مثال لوسمحت جعفر
  3. في الحدث ، عند التنسيق ولا علاقة له بنسخة الاكسس جعفر
  4. رجاء عمل سؤال جديد لهذا الموضوع ، لأن قوانين المنتدى لا تسمح بأكثر من سؤال في كل موضوع جعفر
  5. وعليكم السلام أخي عمرو الامر isNumeric سيساعدك في الفصل بين اذا كانت المعلومة رقم (وستكون نعم) ، او نص (وستكون لا) ، يعني (وبدون انزال مرفقك): if isnumeric(X) = true then هذا رقم A=val(x) else هذا نص A=Trim(x) او A=Replace(X," ","") endif جعفر
  6. السلام عليكم اسمح لي أخي الاستاذ علي ان اطرح هذه المعلومة في التقرير ، عادةً لا نستخدم الحدث "عند التحميل" OnLoad ، وانما نستخدم الحدث "عند التنسيق" OnFormat او "عند الطباعة" OnPrint للقسم الذي به حقل النص الذي تريده (يعني في قسم راس التقرير ، او قسم التفصيل ، او ...) ، لاحظ هذه الفيديو: . وهناك شئ في غاية الاهمية ، والذي للأسف يعمل الكثير من المشاكل ، والتعرف عليها صعب بعض الاحيان ، وهي مسمى اسم القسم!! مسميات أقسام النماذج / التقارير يعتمد على لغة نسخة الاكسس التي تم تنصيبها على جهازك ، واليك بعض الامثلة في مسميات الاقسام بين العربية والانجليزية: راس_التقرير ReportHeader ، التفصيل Detail ، ... وهذا الاسم يجب ان يتماشى مع الاسم الموجود في الكود ، مثلا: في برنامجك ، في التقرير ، اسم قسم التفصيل هو: تفصيل ، فعليه الكود اصبح: Private Sub تفصيل_Format(Cancel As Integer, FormatCount As Integer) بينما في برنامجي اسمه Detail ، فالكود يصبح: Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) لذلك ، لما تنقل الكود بين الكمبيوترات ، تأكد من هذه المسميات جعفر
  7. وعليكم السلام أخي مؤمن لكل برنامج طريقة في العمل ، وطريقة أكسس هي كما شرحتها لك سابقا وما ممكن عملها مثل ما يعمل برنامج المحاسبة الذي تتكلم عنه. ثم ما المشكلة ، كل اللي راح يصير ، ان المستخدم لما يشغل برنامجه ، تلقائيا راح تيجي له رسالة: "هناك نسخة جديدة من البرنامج ، رجاء الانتظار حتى اجلب لك البرنامج" ، والمسألة راح تأخذ ثواني بالمناسبة ، ماهو برنامج المحاسبة الذي تتكلم عنه ، والذي يسمح لك بتغيير التصميم؟ جعفر
  8. السلام عليكم أضفت فقرة جديدة (رقم 1 في الكود) ، وهي الجزء الجديد فقط ، وتعمل كالتالي: اذا bad_akd لم يكن آخر يوم في الشهر ، فسيعطيك سجل راتب لذلك الشهر ، اما بقية الاشهر ، فالوضع كما هو: Private Sub cmd_Go_Click() On Error GoTo err_cmd_Go_Click Dim rstF As DAO.Recordset Dim rstT As DAO.Recordset 'empty tbl_Temp CurrentDb.Execute ("Delete * From tbl_Temp") 'table To Set rstT = CurrentDb.OpenRecordset("Select * From tbl_Temp") 'table From Set rstF = CurrentDb.OpenRecordset("Select * From akad_amel") rstF.MoveLast: rstF.MoveFirst RC = rstF.RecordCount 'Loop from table From, 'and get the w-code, and his starting date For i = 1 To RC Date_From = rstF!bad_akd 'Starting date Date_To = DateSerial(Year(Date), Month(Date), 0) 'Last month How_Many_Months = DateDiff("m", Date_From, Date_To) 'How many months in-between 'Last_Day_Of_Last_Month = DateSerial(Year(Date_From), Month(Date_From), 30) 'Last_Day_Of_Last_Month Last_Day_Of_Last_Month = DateSerial(Year(Date_From), Month(Date_From) + 1, 0) 'Last_Day_Of_Last_Month '1 'for the first month ONLY First_Day_First_Month = Day(Date_From) Last_Day_First_Month = Day(DateSerial(Year(Date_From), Month(Date_From) + 1, 0)) How_Many_Days = DateDiff("d", First_Day_First_Month, Last_Day_First_Month) If How_Many_Days <> 0 Then rstT.AddNew rstT!w_code = rstF!w_code 'w_code rstT!iDate = DateSerial(Year(Date_From), Month(Date_From) + 1, 0) rstT.Update End If '2 'we will generate All the months for each Employee, from his start date to Last month For j = 1 To How_Many_Months 'start adding rstT.AddNew rstT!w_code = rstF!w_code 'w_code rstT!iDate = DateAdd("m", j, Last_Day_Of_Last_Month) 'the month rstT.Update Next j rstF.MoveNext Next i rstF.Close: Set rstF = Nothing rstT.Close: Set rstT = Nothing MsgBox "Done" Exit Sub err_cmd_Go_Click: If Err.Number = 3021 Then 'No Records Exit Sub Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub جعفر 240.2.الشهر الغير موجود.mdb.zip
  9. خلي الماوس على اسمي او صورتي ، بتطلع لك نافذة ، في اسفلها زر الرسائل الخاصه ، اضغط عليها ، واكمل الباقي
  10. يعني حتى لو كان تاريخ مباشرته اي يوم من الشهر ، فهو يستحق راتبه؟
  11. وعليكم السلام أختي اذا كتبتي تاريخ كمعيار لحقل ، فالبيانات ستكون لذلك التاريخ فقط ، بينما اللي فهمته من شرحك ، ان عندك مجموعة تواريخ (لبدء العطب) ، ومجموعة تواريخ اخرى (لإنتهاء العطب) ، فاللي لازم تعمليه هو: لمعيار تاريخ بدء العطب ، استخدمي >= التاريخ (يعني اكبر من او يساوي التاريخ) لمعيار تاريخ إنتهاء العطب ، استخدمي <= التاريخ (يعني اصغر من او يساوي التاريخ) وبهذه الطريقة تكوني حاصرتي جميع التواريخ الاخرى او تستخدمين اقل تاريخ واكبر تاريخ لمعيار تاريخ بدء العطب ، استخدمي Between Date1 And Date2 وتستخدمين اقل تاريخ واكبر تاريخ لمعيار تاريخ إنتهاء العطب ، بنفس الطريقة جعفر
  12. اذا في شئ خاص ، تفضل اخي اكتب لي على الخاص جعفر
  13. واذا تاريخ المباشرة 2 / 1 ؟ فهل يستحق راتب شهر يناير؟
  14. وعليكم السلام الجواب لا ، ولكن: موقع Lebans.com وهو من افضل مواقع الاكسس القديمة ، وفيها الدُر النفيس الرابط هذا فيه غايتك: http://www.lebans.com/listboxenhanced.htm واما اذا في شدّة وما يهمك تشتري ، فاليك هذا الرابط: http://www.dbi-tech.com/ComponentPage_ctList.aspx جعفر
  15. وعليكم السلام أختي انا انزلت البرنامج ، وكل شئ شغال تمام ، وبدون رسائل وعلشان ترفقين اي مرفق للمنتدى ، فيجب ان يكون مضغوط بـ zip او rar جعفر
  16. وعليكم السلام الظاهر ان مشكلتنا هي في كيفية حساب الشهر انا اجعل البرنامج يحسب الشهر ، مثلا: تاريخ العقد: 1-1-2016 نهاية الشهر الماضي: 31-1-2016 عدد الاشهر = 0 فرجاء تخبرني عن الطريقة التي تريد الحساب على اساسها جعفر
  17. وهذه النسخة لعمل المتوسط تلقائيا على جميع الاختيارات اختار كم مرة تريد التجربة ، انا اخترت 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
  18. لابد من ارى الكود لكل زر ، ومن ثم نرى طريقة العمل . جرب هذا المرفق ، وانقر على الزر 1 اكثر من مرة ، بس على كيفك طبعا فيه كود Function Control_Name_F(F) MsgBox "The information you sent is: " & F End Function Function Control_Name() Dim frm As Access.Form Dim ctl As Access.Control Set frm = Forms(frm_Test) Set ctl = Screen.ActiveControl If ctl.Name = "Command1" Then If frm.Controls(ctl.Name).ForeColor = RGB(255, 0, 0) Then frm.Controls(ctl.Name).ForeColor = RGB(0, 0, 0) Else frm.Controls(ctl.Name).ForeColor = RGB(255, 0, 0) End If ElseIf ctl.Name = "Command2" Then MsgBox "Field Name is: " & ctl.Name End If End Function جعفر 260.Function_Code.mdb.zip
  19. وعليكم السلام أبو وليد هو دائما في طريقة احدها: http://www.officena.net/ib/topic/67004-تسريع-عملية-البحث-في-access/?do=findComment&comment=435657 ولكن ، لكل برنامج تفاصيله ، فقد يكون تغيير بسيط في استعلام ، يغير سرعة الاستعلام الآخر الذي يعتمد عليه جعفر
  20. إضافة بعض المعلومات الى المشاركة الاصلية اعلاه: http://www.officena.net/ib/topic/67004-تسريع-عملية-البحث-في-access/?do=findComment&comment=435657 جعفر
  21. السلام عليكم هذا السؤال شيّق ويستاهل الواحد ينظر فيه ولكننا بحاجة الى معلومات وافيه ، وبالتفصيل عن المطلوب جعفر
  22. وعليكم السلام نستطيع ان نغير في البرمجة ويكون إما: 1. ان تختار مجلد ، بحيث البرنامج يقرأ كل الملفات اللي فيه ، وبعدما يقرأ الملف ، يا يحذفه ، او ينقله الى مجلد الملفات المقروءه ، 2. او بدل ان تختار اسم ملف واجد فقط ، نغير طريقة الاختيار ، بحيث تختار أكثر من ملف الطريقة الاولى اسهل وارتب جعفر
  23. الحقل Classes حقل به نص مثل M ، فكيف تريده التعرف على رقم؟ جعفر
  24. السلام عليكم بسبب استخدامنا لوحدات نمطية ، ودالة DFirst ، فهذه تأخذ مجهود من البرنامج ، فعليه ، يتأخر عمل الاستعلام!! انا هنا وضعت جميع المشاركات في برنامج واحد ، وجعلت في الجدول 129,600 سجل ، لنعرف الفرق في السرعة بين المشاركات: . وأحد النتائج: . جرب وشوف الوقت بجزء من الثانية (نعم اجزاء الثانية تعتبر تأخير بالنسبة لي ) مع ملاحظة انك لن تحصل على نفس الوقت للإستعلام ، وذلك يعتمد على مدى انشغال الكمبيوتر بأوامر الوندوز والتي يعطيها الكمبيوتر الاولوية لذلك ، خذ معدل 3-4 مرات لكل استعلام وفي النهاية ستعرف ان اختيار الاستعلام له اسباب اخرى ايضا غير : . جعفر 256.2.Database3.accdb.zip
×
×
  • اضف...

Important Information