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

الردود الموصى بها

قام بنشر

بسم الله الرحمن الرحيم

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

أعزائي :

لدينا في العمل طريقة لتوزيع العدد والأدوات فمثلا وصلتنا كمية معينه من الأدوات ( مفتاح رقم 10 ... مثلا )

طبعا هذه العدد والادوات تأخذ رقما تسلسليا كما يلي

مفتاح 10 صنع بريطاني الرقم 15000

كمية العدد 50

لكل مفتاح 10 صنع بريطاني رقم خاص به مثل 15000.001 الى 15000.050

فحينما نوزع العدد والادوات على العاملين نسجل رقم العده او الاداة في سجل الموظف المستلم للعدة .

اي اعطينا مثلا

مفتاح رقم 10 لمحمد طاهر رقم 15000.002

مفتاح رقم 10 لاشرف رقم 15000.003

مفتاح رقم 10 لمنتصر رقم 15000.009

كما تلاحظون فان العدة ( مفتاح 10 ) مواصفاته ثابته ولكن يتغير من يستلم تلك العده

طبعا يصل الى المستودع عدد معين من العدد ولنفرض انها 50 ( مفتاح 10 ) .

طبعا سوف يتم ادخال عدد 50 ( مفتاح 10 ) في جدول العدد وتصبح العملية مرهقه جدا مع زيادة العدد والادوات

سؤالي بعد هذا الشرح هل توجد طريقة لإدخال 50 سجل دفعة واحدة بحيث يعطيني رقم من 15000.001 الى 15000.050

علما بان جميع المواصفات للأداة ( مفتاح 10 ) متطابقة ولا يختلف الا الرقم لتمييز المعده عن غيرها من نفس النوع .؟

  • Thanks 1
قام بنشر (معدل)

أخي الكريم / فيصل الحربي /// السلام عليكم ورحمة الله وبركاته

تفضل هذا مثال على طلبك ،،،، عسى أن يفي بالغرض

لقد تم حذف الملف وذلك لتحديثه ,,,,

شاكر

تم تعديل بواسطه شاكر الزين
قام بنشر (معدل)

أخي العزيز / فيصل الحربي /// السلام عليكم ورحمة الله وبركاته

لقد تم التعديل على المثال بحيث تكون الارقام على الشكل التالي :

001 ، 002 ،،،،،،،،، 050 ،،، وهكذا ,,,,

لقد تم حذف المثال ،،، لتحديثه

شاكر

تم تعديل بواسطه شاكر الزين
قام بنشر

بسم الله الرحمن الرحيم

السلام عليكم

أشكرك كثيرا يا شاكر على ماقمت به

لقد نفذت العمليه بطريقة مشابهه قبل ان اقرأ ردك هنا

طريقتك كالتالي

DoCmd.GoToRecord , , acFirst

Dim i

For i = c To d

DoCmd.SetWarnings False

DoCmd.GoToRecord , , acNewRec

If i < 10 Then

Me![رقم الصنف] = Me![sh] & "-" & 0 & 0 & i

Me![اسم الصنف ] = Me![a]

Me![مكان الصنع] = Me![b]

ElseIf i >= 10 And i <= 99 Then

Me![رقم الصنف] = Me![sh] & "-" & 0 & i

Me![اسم الصنف] = Me![a]

Me![مكان الصنع] = Me![b]

ElseIf i >= 100 Then

Me![رقم الصنف] = Me![sh] & "-" & i

Me![اسم الصنف] = Me![a]

Me![مكان الصنع] = Me![b]

End If

DoCmd.GoToRecord , , acNext

Next i

DoCmd.Requery "f2"

DoCmd.SetWarnings True
اما طريقتي في تنفيذ الفكرة فهي :
DoCmd.GoToRecord , , acLast

DoCmd.GoToRecord , , acNewRec


Dim i


For i = c To d


        Me![رقم الصنف]= Me![a]

        Me![مكان الصنع] = Me![b]

        

            If i < 10 Then

            Me![رقم الصنف] = Me![sh] & "-00" & i

            DoCmd.GoToRecord , , acNext

            Else

                If i < 100 Then

                Me![رقم الصنف] = Me![sh] & "-0" & i

                DoCmd.GoToRecord , , acNext

                Else

                    If i < 1000 Then

                    Me![رقم الصنف] = Me![sh] & "-" & i

                    DoCmd.GoToRecord , , acNext

                    End If

                        End If

                           End If

                

Next i

DoCmd.Requery "f2"

و كما ترى اختلاف بسيط جدا

أشكرك مرة أخرى

قام بنشر (معدل)

بسم الله الرحمن الرحيم

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

طريقتي إستغرقت ( 4.629629629 ) ثانية

طريقة الخبير ( شاكر الزين ) إستغرقت ( 3.472222222 ) ثانية

أي بفارق ( 1.157407407 ) ثانيه لصالح الخبير ( شاكر الزين ) .

مرة أخرى أشكرك كثيرا يا خبيرنا .

تحياتي

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

أخي العزيز / فيصل الحربي ،،،، السلام عليكم ورحمة الله وبركاته ،،،

لقد وجدت لك طريقة أسرع ،،،، تفحص المثال بعد التعديل

المعادلة هي :

msgbox "ستبدأ الآن عملية انشاء السجلات ..", vbOKOnly, "انشاء السجلات الجديدة"

       docmd.SetWarnings False

       Dim i

       Dim db As Database, rs As Recordset

       For i = c To d

       Set db = CurrentDb

       Set rs = db.OpenRecordset("SELECT * FROM t1")

       rs.AddNew

       docmd.Hourglass True

       If i > 0 And i <= 9 Then rs.Fields(0) = Me![sh] & "-00" & i

       If i > 9 And i <= 99 Then rs.Fields(0) = Me![sh] & "-0" & i

       If i > 99 And i <= 999 Then rs.Fields(0) = Me![sh] & "-" & i

       rs.Fields(1) = a

       rs.Fields(2) = b

       rs.Update

       Next i

       docmd.Requery "f2"

       docmd.Hourglass False

       docmd.SetWarnings True

       msgbox "تم إنشاء السجلات بنجاح!!!!", vbOKOnly, "انشاء السجلات الجديدة"

لقد تم حذف المثال لتحديثه ,,,,

شاكر

تم تعديل بواسطه شاكر الزين
قام بنشر (معدل)

ولو استخدمتما Select Case لكان أسرع وأسرع لأن العبارة IF لا بد من أن تمر على مفرداتها مرة واحدة أما عبارة select case فهي لا تمر إلا على المطلوب ..

هذا نظرياً ولم أجرب على مثالكم .. وتحياتي لعالم السرعة والدقة

تم تعديل بواسطه أحمد الحربي
قام بنشر

بسم الله الرحمن الرحيم

نعم فالطريقة الجديده أفضل من السابقتين حيث سجلت 1.157 ثانية لإنشاء 300 سجل مع التحديث أي بفارق زمني قدره 2.5 ثانيه .

شكرا مرة أخرى يا شاكر الزين . (y)

احمد الحربي :

نظريا كما اخبرت صحيح ولكن لم أجرب الطريقه وذلك لضيق الوقت . مشكور و ماقصرت . :b1:

قام بنشر (معدل)

ومن خلال ADO أسرع وأسرع حيث تمت العلمية في خلال

1.15740740740666E-05

Dim Rec As New ADODB.Recordset

    Rec.Open "t1", CurrentProject.Connection, adOpenStatic, adLockOptimistic, adCmdTable

Dim i As Integer

    For i = Me.c To Me.d

    Rec.AddNew

    Rec![رقم الصنف] = Me.sh & "-" & Format(i, "000")

    Rec![اسم الصنف] = Me.a

    Rec![مكان الصنع] = Me.b

    Rec.Update

Next

Rec.Close

Set Rec = Nothing

Me.Refresh ' تحديث النموذج

تم تعديل بواسطه أحمد الحربي
قام بنشر

حياك الله أخي فيصل ،،، وعلى الرحب والسعة ,,,, :pp:

أخي / أحمد الحربي :fff:

اقتباس

ولو استخدمتما Select Case لكان أسرع وأسرع لأن العبارة IF لا بد من أن تمر على مفرداتها مرة واحدة أما عبارة select case فهي لا تمر إلا على المطلوب ..

هلا عملت مثالاً على ذلك ،،،، لكي تعم الفائدة ,,,, :(

اقتباس

ومن خلال ADO أسرع وأسرع حيث تمت العلمية في خلال 

أخي لم تعمل معي الشفرة التي وضعتها ،،،، هل تحتاج إلى مكتبة معينة ؟؟؟؟

إذا كان تحتاج إلى مكتبة ،،، الرجاء وضع اسم المكتبة ،،، :d

شاكر

قام بنشر

بسم الله الرحمن الرحيم

احمد الحربي :

ومن خلال ADO أسرع وأسرع حيث تمت العلمية في خلال

1.15740740740666E-05

يعني طريقة ADO استغرقت 1.157 ثانية كما ذكرت في ردك

انظر الى ردي على شاكر

نعم فالطريقة الجديده أفضل من السابقتين حيث سجلت 1.157 ثانية

يعني طريقتك وطريقة شاكر استغرقت نفس الوقت ( 1.157 ) ثانية

شكرا مجددا لإهتمامكم بالموضوع .

تحياتي

قام بنشر

الممازجة بين الطريقتين :

طريقة الاخ الكريم / أحمد الحربي

طريقة / شارك الزين

Dim db As Database, rs As Recordset

   Set db = CurrentDb

   Set rs = db.OpenRecordset("SELECT * FROM t1")

   rs.AddNew

   Dim i As Integer

   For i = c To d

   rs.AddNew

   rs![رقم الصنف] = Me.sh & "-" & Format(i, "000")

   rs![اسم الصنف] = Me.a

   rs![مكان الصنع] = Me.b

   rs.Update

   Next

   Me.Refresh

تمت إضافة عدد ( 300 ) سجل في أقل من ثانية ،،، في لمح البصر ،،،

مع الشكر الجزيل للأخ / أحمد الحربي

شاكر

faisal_97.zip

قام بنشر

أشكركم يا أساتذة على جهدكم الرائع

بالنسبة للعبارة Select Case والعبارة IF قرأت كثيراً أن الأولى أسرع ولكني الآن عندما أجرب أجدهما متقاربان جداً وأحياناً متساويان .. فما أدري لماذا قالوا أن select أسرع

أما المكتبة التي تحتاجها أخي الكريم شاكر فهي

Microsoft ActiveX Data Opjects 2.1 Library

فأنا طبقت المثال على أوفيس 2000

لكم التحية أيها المبدعون

قام بنشر

حياك الله أخي / أحمد

هل جربت آخر ما تم تعديله على المثال ؟؟؟؟ بصراحة بسرعة البرق ،،، بلمح البصر تتم إضافة ( 300 ) سجل ،،،، طريقتك رائعة يا أخي ،،،، شكراً جزيلاً لك ,,,

شاكر

قام بنشر (معدل)

basmallah.gif

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

نعم ، الطريقة سريعة جدا وتعتبر من أسرع الطرق التي شاهدناها

قبل أن ارفع اصبعي من على زر الادخال تكون تمت إضافة الــ 300 سجل ... (y)

:fff: :d :fff:

ماقصرتو أثنينكم :fff: ( شاكر الزين و احمد الحربي ) :fff:

تحياتي

تم تعديل بواسطه فيصل الحربي
قام بنشر

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

مبروك عليكم الشهر الفضيل وكل عام وأنتم بخير

أخواني الكرام

كيف تم إحتساب سرعة الأمثلة التي تم طرحها في هذا الموضوع ؟

قام بنشر

بسم الله الرحمن الرحيم

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

بالنسبة لطريقة إحتساب السرعة في التنفيذ فقد استخدمت الطريقة التالية :

الكود التالي يوضع في السطر الاول من حدث النقر على زر امر التنفيذ

dim ts,tf,tr

ts=time()
ثم يوضع الكود التالي قبل كلمة sub
tf=time()

tr=tf-ts

msgbox tr

فقط

قام بنشر

شكراً جزيلاً أخي الأستاذ/ فيصل الحربي

لدي سؤال أخر لو تكرمتوا :

هل سرعة المعالج وسعة الذاكرة بجهاز الكمبيوتر لها تأثير على سرعة إنجاز العملية ؟

قام بنشر

بسم الله الرحمن الرحيم

عملت إختباراتي على كمبيوتر سرعة واحد جيجا و 256 ميجا الرام ( لاب توب )

وسرعة الكمبيوتر تؤثر على سرعة تنفيذ العمليات .

قام بنشر

الأخوان الكريمان / فيصل وشاكر

فعلاً الطريقة الأخيرة سريعة جداً

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

تحياتي لكما

قام بنشر

هل dao اسرع من ado لنفس العملية علي جهاز واحد ؟؟

هل كانت الاكواد متطابقة عند التجربة ؟؟

المفترض أن ADO تطوير لل DAO و أنها اصبحت الافتراضية فى الاصدارات الجديدة

فاذا كانت ابطأ ، فربما ذلك بسبب ميزات أخري .؟

هذه مقدمة منقولة من كتاب باللغتين العربي و الانجليزي حول كائنات الاتصال بالبيانات

==> من هنا

قام بنشر

أذكر أنه دار نقاش طويل بين الإخوة في منتدى فيجول بيسك للعرب حول أيهما أفضل فبعضهم فضل DAO والسبب لآنه يعرف كيف يتعامل معها من ألفها إلى يائها .. والبعض فضل ADO لأنها المستقبل وأعجبني الرأي الثالث وهو استخدام كل منهما كل في مجاله .. فـ DAO في الأعمال المكتبية التي لا تتطلب شبكات أسرع .. وADO أسرع في الشبكات

فأنا جربت الكودين على جهازي فكانت DAO أسرع

وبالبحث في منتدى فيجول بيسك العرب ستجدون مواضيع كثيرة حول الفرق بينهماwww.vb4arab.com

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information