تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] طريقة مختلفةلحفظ بيانات Datagridview
#1
تعودنا نحفظ البيانات الموجودة في Datagridview على شكل حلقة تكرار For
لكل صف من الصفوف ويتم حفظه في قاعدة البيانات وكل دورة من حلقات For نقوم بحفظ السطر التالي في قاعدة البيانات

السؤال
هل ممكن نحفظ Datagridview مرة واحدة بدون استخدام حلقة التكرار For

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




هل من احد يعرف الاجابة او يقرب فكرة لها ؟؟؟؟



(إني وجهت وجهي للذي فطر السماوات والأرض حنيفًا وما أنا من المشركين)
الرد }}}
تم الشكر بواسطة: سعود , ابو ليلى , أبو نوره
#2
السلام عليكم ورحمة الله وبركاته
ضع إجراء الحفظ في دالة ونفذ الدالة من خلال Thread
الرد }}}
#3
رأيي الشخصي مع عدم تجربة اعداد كبيرة من السجلات ان طريقة الحفظ المباشر عن طريق Oledbcommand آمن بكثير لانك تحفظ سجل سجل ولو انطفا الكهرب فلن يتضرر الا السجل الحالي الذي لم يتم حفظه.
اما لو تستخدم الحفظ عن طريق DataTable Or DataSet فربما الامر فيه اشكال .
الرد }}}
#4
(14-08-17, 04:56 PM)karimx كتب : السلام عليكم ورحمة الله وبركاته
ضع إجراء الحفظ في دالة ونفذ الدالة من خلال Thread

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

صحيح هذا سيوفر الانتظار وسنفذ الاجراء في الخلفية دون الانتظار حتى الانتهاء

لكن سيظل الامر حفظ سجل سجل بحلقة تكرار

(14-08-17, 05:28 PM)سعود كتب : رأيي الشخصي مع عدم تجربة اعداد كبيرة من السجلات ان طريقة الحفظ المباشر عن طريق Oledbcommand آمن بكثير لانك تحفظ سجل سجل ولو انطفا الكهرب فلن يتضرر الا السجل الحالي الذي لم يتم حفظه.
اما لو تستخدم الحفظ عن طريق DataTable Or DataSet فربما الامر فيه اشكال .

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

حاليا نستخدم SqlTransaction اذا حدث انطفاء للكهرب مثلا فلن يتم الحفظ حتى تكتمل حلقة التكرار لكن طريقة الحفظ عن طريق DataSet  او DataTable  لم اجربها ؟؟



(إني وجهت وجهي للذي فطر السماوات والأرض حنيفًا وما أنا من المشركين)
الرد }}}
تم الشكر بواسطة: ابو ليلى , أبو نوره , سعود , سعود
#5
الأفضل من وجهة نظري توصل الحاسب في جهاز اسمه ( محول او شاحن أو مغذي الكهرباء ) في حال فصلت الكهرباء يضل شغال الجهاز لمدة ساعات ليعطيك فرصه لإيقاف الحاسب بشكل سليم .

ايضاً كما تفضل الاخ سعود ربط العملية بالـ (Thread)
الرد }}}
#6
السلام عليكم و رحمة الله و بركاته
وفقاً لفكرتك (حل مشكلة حدوث اخطاء او توقف في وسط العملية حتى لا تحدث مشكلة في ميزان القيد )

اقترح عليك التعامل مع Transactions , اثناء عمليات الحفظ و الادخال و التعديل و الحذف.
حتى تضمن ان تتم العملية على كافة السجلات او لا تتم على اي سجل في حال حدوث خطأ في سجل ما.
حيث ان Transaction تعتبر من العمليات المتزامنة و بالتالي يرجح ظهور اخطاء من النوع ConCurrency Exceptions و جب الانتباه اليها
و معالجتها.

بالتوفيق.
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
#7
(15-08-17, 01:11 AM)ابو ليلى كتب : السلام عليكم و رحمة الله و بركاته
وفقاً لفكرتك (حل مشكلة حدوث اخطاء او توقف في وسط العملية حتى لا تحدث مشكلة في ميزان القيد )

اقترح عليك التعامل مع Transactions , اثناء عمليات الحفظ و الادخال و التعديل و الحذف.
حتى تضمن ان تتم العملية على كافة السجلات او لا تتم على اي سجل في حال حدوث خطأ في سجل ما.
حيث ان Transaction تعتبر من العمليات المتزامنة و بالتالي يرجح ظهور اخطاء من النوع ConCurrency Exceptions و جب الانتباه اليها
و معالجتها.

بالتوفيق.

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

حاليا استخدم SqlTransaction اثناء الحفظ وهي طريقة عملية جدا وهذه الطريقة استخدمها من فترة

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


عند الاستعلام لو استخدمت SqlDataReader لقراءة البيانات ومعها  Do While لإظافة كل سجل في DataGridview
سيحتاج الامر وقت حتى إظهار جميع السجلات وكذلك العكس عملية الحفظ بأستخدام حلقة التكرار For


بينما نلاحظ عند الاستعلام بإستخدام SqlDataAdapter وتخزين البيانات في DataSet وإظافتها على DataGridview 
يتم بنفس الوقت ولا تفرق كانو عشرة الف او عشرين الف لن يكون هناك انتظار كما هي الطريقة الاولى



هل ممكن يتم الحفظ بأمر واحد من DataSet  بدلاً من تكرار الأمر عند كل سطر

....



(إني وجهت وجهي للذي فطر السماوات والأرض حنيفًا وما أنا من المشركين)
الرد }}}
تم الشكر بواسطة: أبو نوره , سعود , ابو ليلى
#8
هنا الحل


https://www.youtube.com/watch?v=_i4mYXSaD4w
الرد }}}
تم الشكر بواسطة: أبو نوره , أبو نوره , سعود , ابو ليلى
#9
اخي الكريم "ابو محمد القحطاني"
هل استعلام تصفح البيانات  يناسبك لحل مشكلة السجلات الكثيرة؟
الرد }}}
تم الشكر بواسطة: ابو ليلى , أبو نوره , أبو نوره
#10
السلام عليكم و رحمة الله و بركاته
الاخ ابو محمد القحطاني,
كلامك صحيح و يحتاج الى توضيح اكثر , عند تعاملك مع DataGridView مربوط بـــ DataSet و هذا الاخير يتم ملئه عن طريق DataAdapter
و تحديث السجلات يجري من DataSet الى قاعدة البيانات مالذي يحصل , او ما السيناريو الذي تعمل عليه هذه التقنية ؟؟
بمثال بسيط هو ما يجري تماما عندما تقوم بربط البيانات عن طريق المعالج , اذا تتبعت الكود الناتج ستلاحظ ان العمليات (الاضافة و الحذف و التعديل) تجري وفق حلقة تكرارية و لكن ليس لكل السجلات , و انما للسجلات التي تعرضت لتغيرات فقط .
و هنا يتم استخدام Dataset مؤقته تحتوي على السجلات التي تم اجراء تعديلات عليها فقط وفق حالة كل صف عبر الخاصية DataRowState و التي تحمل 3 حالات (معدل , مضاف , محذوف) , ومن ثم بعدها يتم عمل حلقة تكرارية تقوم بالعملية المناسبة لكل سجل (بالنهاية انت لن تقوم بالمرور على كل السجلات , فقط السجلات التي جرى علها تغيير)
هذا هو لب العمل و لا يمكنك عمل وظيفة تقوم بالتحديث الكلي لكائن DataSet دون فحص حالة كل سجل (كما يسأل البعض)
لانك بالمنطق تتعامل مع كائنات منفصلة كل كائن له حالته (الكائن= السجل) و هذه الكائنات تقبع في حاوية (جدول او DataSet)

الاخ ابو زيد,
هذه الطريقة التي في المثال هي ما تحدثنا عنه في السطور السابقة صاحب المثال اغفل عن قصد او جهل او توفيرأ للوقت ما الذي يجري عند استخدام كائن CommandBuilder  
هذا الكائن يحتاج الى اوامر (ادخال و حذف و تعديل) و يحتاج الى معالجة السجلات التي تغيرت فقط كما اشرنا سابقاً
و يحتاج الى معالجة كل سجل على حدا و استصدار الامر المناسب لكل سجل و من ثم يتم معالجة السجلات الراجعة من القاعدة و تحديث السجلات التي على الواجهة (و خصوصاً سجلات المفتاح الرئيسي و له تعامل خاص)
و كل هذا يجري في الخفاء بعيداً عن عين المبرمج في حال استخدمته للامور البسيطة اما اذا كنت مصراً على استخدامه في امور معقدة فستحتاج الى معالجات اضافية ليصبح اكثر وثوقية (و غالباً ستعاني من مشاكل معه ؟؟) الكلام طويل في هذا الكائن.

نصيحة :
مالذي يجبرك على استحضار هذا الكم الكبير من السجلات الى الواجهة (بشكل منطقي ستعاني من تاخر في معالجة هذا الكم)
الطريقة الاكثر حرفية هي التعامل مع هدف محدد او مجموعة اهداف قليلة و اختيار الادوات الاكثر سرعة في التعامل .
الــ DataReader اسرع في جلب البيانات من غيرها .

تعامل مع البيانات التي جرى عليها تغيير فقط , توفر في الوقت و الجهد اللازم من قبل المعالج , قد يكون لديك الف سجل على الواجهة لكن المستخدم عدل و اضاف و حذف ما مجموعه 100 سجل , فهل من المنطق ان اقوم بالمرور على الف سجل و بالتالي القيام بالف عملية بينما احتاج الى 100 عملية .


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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  هل من الممكن العمل على قاعدة بيانات اكسل على الفيجوال بيسك خالد كامل1 4 81 24-03-24, 02:00 AM
آخر رد: خالد كامل1
  [سؤال] أتمنى اجابة وافية:عمل برنامج بقاعدة بيانات SQL دون حاجة تثبيت SQLSERVER dr.programming 6 600 19-03-24, 08:56 AM
آخر رد: سلامه محمد11
  استعلام select عن مجموعة بيانات Adel27213 1 172 15-03-24, 01:11 AM
آخر رد: justforit
  تعديل بيانات عمود DataGridView دفعة واحدة مصمم هاوي 2 164 05-03-24, 08:27 PM
آخر رد: مصمم هاوي
  محتاج طريقة لتنسيق نص الرسالة المرسلة إلى الواتس اب new_programer 2 163 04-03-24, 07:15 AM
آخر رد: new_programer
  [VB.NET] تحديث بيانات فى كلاس من جدول سيكوال asdfar1977 6 184 26-02-24, 01:07 AM
آخر رد: asdfar1977
  كيفية جمع أرقام عمود فى الداتا جريد فيو بناءاً على بيانات معينة heem1986 5 223 25-02-24, 11:26 PM
آخر رد: heem1986
  [C#.NET] طباعة بيانات داتا جرد فيو h2551996 0 84 25-02-24, 02:31 PM
آخر رد: h2551996
  [VB.NET] معرفة بيانات الجهاز محمد بوقزاحة 1 312 21-02-24, 11:44 PM
آخر رد: AHMED213
  كيفية انشاء سكريبت لقاعدة بيانات من خلال الكود heem1986 1 194 20-02-24, 12:00 AM
آخر رد: Kamil

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم