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

تحديث البيانات أو عمل refresh

بدأه moutazyahia في 23 يوليو 2011 · 18 رد · 2,551 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

عندي جدول للعملاء به 500 الف سجل وهم بتزايد مستمر يعني قد يصل لأضعاف هذا العدد خلال سنة

الان المشكلة بحجم السجلات كبير جدا

قمت بفتح الجدول مرة واحدة مع بدء البرنامج

البرنامج متصل على سيرفر بقاعدة بيانات sql 2000

والإرتباط عن طريق الأدو

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

لم أجد طريقة إلا إغلاق الجدول وفتحه مرة أخرى وهذه العملية تستغرق نحو 30 ثانية ولم اجد أي طريقة إخر ى بخلاف عمل requary للجدول

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

لذى يا إخواني اتمنى منكم أن تفيدوني كيف نتعامل مع الجداول التي يزيد فيها حجم السجلات بشكل غير طبيعي بسرعة ومرونة

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

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

تم تعديل هذه المشاركة بواسطة moutazyahia في 23 يوليو 2011 في 19:34

#2

السلام عليكم

قم برفعه على أي سيرفر خارجي

www.4shared.com

www.hotfile.com

www.megaupload.com

منحة للخريجين وطلاب الجامعات و المعاهد

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

سبحان الله وبحمده سبحان الله العظيم

#3
Mady-AGC كتب:

السلام عليكم

قم برفعه على أي سيرفر خارجي

www.4shared.com

www.hotfile.com

www.megaupload.com

جزاك الله خيرا على الرد أخي

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

ولكن هو سؤال عام يطبق على أي برنامج وهو كالأتي

كيف يتم تحديث البيانات بجدول عدد حقوله تجاوز ال 500 الف

كيف يتم تحديث هذا الجدول حتى يرى باقي من على السيرفر البيانات أولا بأول دون إبطاء

الطريقة التي أستخدمها أني أغلق البرنامج

if cli.state = 1 then cli.close

ثم أفتح الجدول من جديد بطريقة الدايناميك وهذا الفتح يأخذ ما يقارب 30 ل 40 ثانية وهذا كثير جدا

كيف أعمل refresh للجدول دون هذا البطأ الشديد

جزاكم الله خيرا

#4

أخوي هذا يعتمد أيضا بشكل أكبر على سيرفر قاعدة البيانات أكثر من اعتماده على البرنامج , ال ADO تقوم بالتحديث مباشره و اذا في بطئ معناها من السيرفر , المشكله او البطئ الحاصل بالامكان تعديه عن طريق تغيير تعامل البرنامج مع قاعدة بيانات SQL Server سواء باستخدام Temp Tables او غيرها و هذا انت تجلس مع ال DBA على السيرفر و تتناقشون بتنسيقه , و ممكن تسأل الشباب في قسم قواعد بيانات SQL Server عن كيفية التعامل مع السجلات الكبيره و أسرع الطرق . أيضا الشبكه لها دور كبير جداً , لو ان السيرفر على شبكه المسؤول عنها مو مرتبها صح بكل تأكيد راح يصير في تأخير .

في حاله انت كنت المسؤول عن قاعدة البيانات و عن البرنامج فهذا بصراحه شغل كبير و يد وحده ما تصفق لابد تطلب مساعدة من شخص مختص بقاعدة بيانات SQL Server بمعنى عنده شهادة DBA وفاهم شغله صح, لان هذي قاعدة بيانات متوسطه و مستقبلا راح تكون كبيره إلى ضخمه و تحتاج جهد كبير بكل تأكيد .

على الاقل حسب علمي ما راح تلقى حل كامل عن طريق تعديل فقط كود او مكتبه الادو في الفجوال بيسك 6 , و الله أعلم و ان شاء الله أحد الاساتذه هنا موجود عنده حل عن طريق الفجوال فقط و يفيدنا جميعا :)

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#5
iProgrammer كتب:

أخوي هذا يعتمد أيضا بشكل أكبر على سيرفر قاعدة البيانات أكثر من اعتماده على البرنامج , ال ADO تقوم بالتحديث مباشره و اذا في بطئ معناها من السيرفر , المشكله او البطئ الحاصل بالامكان تعديه عن طريق تغيير تعامل البرنامج مع قاعدة بيانات SQL Server سواء باستخدام Temp Tables او غيرها و هذا انت تجلس مع ال DBA على السيرفر و تتناقشون بتنسيقه , و ممكن تسأل الشباب في قسم قواعد بيانات SQL Server عن كيفية التعامل مع السجلات الكبيره و أسرع الطرق . أيضا الشبكه لها دور كبير جداً , لو ان السيرفر على شبكه المسؤول عنها مو مرتبها صح بكل تأكيد راح يصير في تأخير .

في حاله انت كنت المسؤول عن قاعدة البيانات و عن البرنامج فهذا بصراحه شغل كبير و يد وحده ما تصفق لابد تطلب مساعدة من شخص مختص بقاعدة بيانات SQL Server بمعنى عنده شهادة DBA وفاهم شغله صح, لان هذي قاعدة بيانات متوسطه و مستقبلا راح تكون كبيره إلى ضخمه و تحتاج جهد كبير بكل تأكيد .

على الاقل حسب علمي ما راح تلقى حل كامل عن طريق تعديل فقط كود او مكتبه الادو في الفجوال بيسك 6 , و الله أعلم و ان شاء الله أحد الاساتذه هنا موجود عنده حل عن طريق الفجوال فقط و يفيدنا جميعا :)

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

#6

ما اجده غريباً هو ما حاجة الموظف لكامل جدول العملاء دفعة واحدة. ماذا يفعل به من خلال البرنامج؟ تخيل انني اتصفح هذا المنتدى فيقوم السيرفر بإرسال كل المواضيع في جدوله. معظم الوقت فان الموظف يتعامل مع جزء صغير من العملاء ولذلك فانك تستدعي query او stored procedure ليعيد فقط الجزء الذي يحتاجه الموظف في اداء المهمة التي يقوم بها. فما هي المهمة التي يقوم بها الموظف المستخدم لبرنامجك والتي تتطلب ان يحمل كامل جدول العملاء؟ وهل يحتاجون ايضاً كل الfields?

1
#7
cljneophyte كتب:

ما اجده غريباً هو ما حاجة الموظف لكامل جدول العملاء دفعة واحدة. ماذا يفعل به من خلال البرنامج؟ تخيل انني اتصفح هذا المنتدى فيقوم السيرفر بإرسال كل المواضيع في جدوله. معظم الوقت فان الموظف يتعامل مع جزء صغير من العملاء ولذلك فانك تستدعي query او stored procedure ليعيد فقط الجزء الذي يحتاجه الموظف في اداء المهمة التي يقوم بها. فما هي المهمة التي يقوم بها الموظف المستخدم لبرنامجك والتي تتطلب ان يحمل كامل جدول العملاء؟ وهل يحتاجون ايضاً كل الfields?

جزاك الله خيرا على التفاعل والتواصل

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

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

1
#8
moutazyahia كتب:

جزاك الله خيرا على التفاعل والتواصل

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

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

شخصياً أؤيد ما قاله العضو أعلاه .. فلا يوجد أي داعي لأن تستدعي كامل الجدول للمستخدم مرة واحدة . لذلك استخدم الاستعلام , بحيث ان يقوم المستخدم باستدعاء البيانات التي يحتاجها فقط .

كل الود .

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#9
omani كتب:

شخصياً أؤيد ما قاله العضو أعلاه .. فلا يوجد أي داعي لأن تستدعي كامل الجدول للمستخدم مرة واحدة . لذلك استخدم الاستعلام , بحيث ان يقوم المستخدم باستدعاء البيانات التي يحتاجها فقط .

كل الود .

جزاك الله خيرا

يا إخواني أوضح لكم الفكرة

لدينا بالكول سنتر 16 مستقبل يتلقون شكاوى العملاء

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

طيب إن لم يجده داخل العملاء يقوم الموظف بتسجيل بيانات هذ العميل طيب كيف يرى باقي ال 15 موظف هذا العميل الجديد الذي تم إضافته من قبل الموظف رقم 16

أنا عملت زر تحديث الكود بداخله

غلق الجدول ومن ثم فتحه مرة أخرى بهذا يستطيعون رؤية أي تحديثات

هذه العملية تأخذ وقت طويل جدا 30 ل 40 ثانية وهذا أمر قبيح وغير مستحسن في عمل البرنامج ولو لم يتم عمل تحديث لن يرى البرنامج بيانات العميل مع اتصاله وسوف يعتبره غير موجود

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

جزاكم الله خيرا

#10

أخوي خلينا ننسى مسأله التأخير شوي

الآن لمن يحصل أي تحديث لسجل عميل أو إضافه عميل جديد هل تظهر بياناته الجديده لباقي المستخدمين حتى لو كان التاخير كبير؟ أو إن لابد من اغلاق الجدول و من ثم تظهر بياناته؟

بالاضافه ممكن توضع لنا كود فتح الجدول؟

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#11

اخي معتز،

ها أنت قد أجبت نفسك. أنت تبحث عن رقم تلفون عميل والبحث يجب أن يتم على الخادم الذي يملك كافة معلومات العملاء وليس بإرسال ملف العملاء الى الclient ليبحث هو فيها. البرنامج يرسل رقم تلفون العميل للخادم الذي يبحث عن معلوماته ويرسل ملفه لمن طلبه. فان لم يجده تفتح صفحة ادخال عميل جديد. حتى لحظة ادخال معلومات العميل الجديد فانه غير موجود بالنسبة للموظفين الآخرين.

#12
cljneophyte كتب:

اخي معتز،

ها أنت قد أجبت نفسك. أنت تبحث عن رقم تلفون عميل والبحث يجب أن يتم على الخادم الذي يملك كافة معلومات العملاء وليس بإرسال ملف العملاء الى الclient ليبحث هو فيها. البرنامج يرسل رقم تلفون العميل للخادم الذي يبحث عن معلوماته ويرسل ملفه لمن طلبه. فان لم يجده تفتح صفحة ادخال عميل جديد. حتى لحظة ادخال معلومات العميل الجديد فانه غير موجود بالنسبة للموظفين الآخرين.

نعم إخواني معكم

بعد إضافة هذا العميل على السيرفر لا يظهر إلا لمن أضافه فقط

أما بشان كود فتح الجدول

if cli.state = 1 then cli.close

cli.open"client" ,hot,1,2

وهكذا إخواني يجب علي أن أقوم بعمل تحديث لدى الباقون لرؤية العميل الجديد الذي تمت إضافته

بحيث يظهر مع البحث إن اتصل مرة أخرى

لأنه إن لم أقوم بعمل هذ االتحديث للجدول لا تظهر بياناته

فأضطر لقفل الجدول وفتحه مرة أخرى

تم تعديل هذه المشاركة بواسطة moutazyahia في 25 يوليو 2011 في 00:39

#13

ليش ما تحدد ال CursorLocation للجدول ؟ adUseServer هذي مهمه جداً و تتفادى أخطاء كثيره

أيضا عزيزي البيانات للعميل و ين تنعرض ؟ Datagrid؟

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#14
iProgrammer كتب:

ليش ما تحدد ال CursorLocation للجدول ؟ adUseServer هذي مهمه جداً و تتفادى أخطاء كثيره

أيضا عزيزي البيانات للعميل و ين تنعرض ؟ Datagrid؟

أسف أخي حقا نسيتها هذا الكود موجود فعلا

الكورسر لوكيشين = كلاينت

البيانات تعرض بتيكستات عادية وأيضا بداتا جريد ولكن الأصل فورم وتيكستات

وأسف لو غلبتكم معايا

ولكن إلى الأن الفكرة الأساسية لم تتحصل حتى الان

كيف عند إضافة بيان بجهاز يراه باقي الأجهزة

#15

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

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

جرب الآن adUseServer و باذن الله المشكله تنحل .

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#16
iProgrammer كتب:

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

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

جرب الآن adUseServer و باذن الله المشكله تنحل .

نعم جزاك الله خيرا نفعت

ولكن هناك مشكلة ظهرت معي وهس هذا الكود

cli.recordcount

يأتي بعدد السجلات هكذا -1

ولا أدري كيف أتغلب على هذه المشكلة

#17

هذي أيضا لها علاقه بالـ CursorLocation و السبب في خروج الناتج -1 , أعتقد لابد أقرا و أراجع المعلومات القديمه بخصوص هالمسأله و ان شاء الله اقدر اساعدك فيها. أو اذا احد من الشباب معلوماته جاهزه أتمنى يساعدنا أيضا :) .

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

#18
iProgrammer كتب:

هذي أيضا لها علاقه بالـ CursorLocation و السبب في خروج الناتج -1 , أعتقد لابد أقرا و أراجع المعلومات القديمه بخصوص هالمسأله و ان شاء الله اقدر اساعدك فيها. أو اذا احد من الشباب معلوماته جاهزه أتمنى يساعدنا أيضا :) .

أتمنى شباب أحد يساعدنا

وجزاك الله خيرا أخي على هذه المساعدة

على فكرة الكونت يعمل في حالة اختيار كورسر تايب كي سيت

ولكن مشكلته أنه بطيء جدا مثل السابق تماما

#19

إيه راح يكون بطئ بال Keyset و هو في حل لها أيضا انك تستخدم الاقفال adLockPessimistic بس ما أدري هل هذا عملي بالنسبه لك أو لا و ما اعرف شي عن السرعه هل بيكون بطئ او سريع .

طبعا الفرق بينه و بين adLockOptimistic

adLockOptimistic يعمل قفل فقط وقت الحفظ او التحديث و بعدها يشيله مباشره

adLockPessimistic يعمل قفل من بدأ عمليه الحفظ أو التحديث الى نهايه العمليه

أنا أشوف إنهم يفضلون adLockPessimistic في حاله السيرفرات و البيانات الكبيره و الضخمه , بس عيبها الوحيد هي مدة الاقفال اطول و لكنها ادق 100% من الاولى و مستحيل تظهر أخطاء فيها ناتجه عن عمليه حفظ متكرره من قبل مستخدمين اثنين على نفس السجل.

ممكن تجربها و تشوف أيضا .

(وَمَا أُوتِيتُمْ مِنَ الْعِلْمِ إِلَّا قَلِيلًا)

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