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

استفسار حول تحديث DataSet بدون الفتح من جديد

بدأه visual6.0 في 3 مايو 2013 · 11 رد · 2,379 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

جمعة مباركة لجميع المسلمين في مشارق الأرض ومغاربها.

 

أخوتي عندما نفتح جدول في Data Set فإن الاتصال بالجدول كما هو متعارف عليه ينتهي وتصبح البيانات في data set غير مطابقة لم قد يطرأ من تغيير في الجدول .

 

قد يقول قائل أننا نعيد فتح الجدول من جديد في Data Set طبعاً هذا حل لمن يمتلك جدول حجمه صغير ولكن سيكون مكلفاً لمن سجلاته تتعدى المليون سجل.

 

عندي تصور قد أجده مفيداً لكن تطبيقه لا أعلم إذا كان بالامكان أم لا فخبرتي في vb.net لا تتعدى الأسبوع تمام ً ، وهي أننا عندما نريد إنشاء سجل جديد في الجدول مثلا نقوم بإنشاءه كما هو متعارف عليه ولكن بعد ذلك تتم عملية إضافة هذا السجل الجديد أيضاً إلى Data Set حتى نتلافى عملية إعادة فتح الجدول .

 

 

فهل هناك مثلا خاصية Add Record في Data Set  ؟ وإذا نعم هل من حل ؟

#2

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

الحقيقة علي حسب ما فهمتك انك عايز تعرف هل الداتا سيت Dataset تم التغيير عليها ام لا 

فممكن ان تستخدم الخاصية HasChanges من الداتا سيت المفتوحه وهي ترجع True اذا كان حصل علي تغيير

#3

شكرا لك أخي معلوزمة مفيدة جديدة لي .

 

بالنسبة لما أبحث عنه هو امكانية اضافة السجل الجديد في data set حتى لا أضطر إلى فتح الجدول من جديد وتعبئة الداتا سيت

#4

السلام عليكم

 

تستطيع عمل ذلك بالطريقة المعتاده بأن تنشأ DataRow وضيف فيه البيانات او السجلات الجديده ثم بدون انشاء داتا تيبل DataTable تضيف السجلات الجديده في الداتا سيت Dataset كالاتي

 

         Dim D As New DataSet
       D.Tables(0).NewRow()=   "متغير من نوع Datarow  فيه السجلات الجديده"

طبعا رقم 0 هو رقم الجدول المخزن في dataset او حسب الاندكس الخاص بيه في برنامجك

والله اعلي واعلم

تم تعديل هذه المشاركة بواسطة hisham saad في 4 مايو 2013 في 16:43

#5

شكراً لك سيدي ، ولكن أخي الكريم أيضاً لم تصل فكرتي.

 

فكرتي هي تلافي إعادة فتح جدول من القاعدة في DATA SET وذلك لكمية البيانات الكبيرة وهذا سيسبب بطئ للبرنامج ، أعتمدت في ذلك على DATA SET منقطعت الاتصال وجعلتها عامة في كل البرنامج وأي تعديل على البيانات أعمل تعديل مباشر يدوي ‘إما اضافة سجل جديد أو حذف سجل أو تعديل سجلات في DATA SET ، ولكن هناك مثلا جهاز متصل بالبرنامج وبقاعدة البيانات واضاف سجل جديد فلن أشاهد هذا السجل أبداً إلا إذا أغلقت البرنامج او أعدت تحميل البيانات من القاعدة للداتا سيت ، هذا ما أقصده بارك الله فيك

#6

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

 

سأنشئ جداول مؤقتة لكل جدول رئيسي جدول مؤقت

 

مثلا الجدول Sales له جدول مؤقت باسم Sales_Temp

 

كل عملية حفظ أو تعديل بعد فتح data set سيتم حفظها في هذا الجدول المؤقت ويتم الاستعلام من الجدول المؤقت هل هناك سجلات تم تعديلها أو اضافتها أو حذفها ؟

اذا نعم فانها سيضمها إلى data set ، وطبعاً هناك حقل جديد سأضيفه وهو كود المستخدم بحيث إذا أنني أستوردت هذا السجل إلى data set سيلغي الكود لأنني استوردته ولا أحتاجه

 

شاركوني برأيكم في هذه الفكرة.

تم تعديل هذه المشاركة بواسطة visual6.0 في 4 مايو 2013 في 21:02

#7

جرب وأخبرنا.

#8

ان جلب جدول بكامله هو خطأ, و جلب 1,000,000 هو خطيئة

 

ماذا سيفعل المستخدم ب مليون سجل؟ هل سيعمل عليها كلها؟؟ 

 

استعمل ال parameter

 

 

mytableadapter.fill(mydataset.mytable,"1000") في dataset designer add query

select * from mytable where id = ?

 

اما بالتسبة الى الاضافة بدون جلب السجلات مرة اخرى على dataset فانه يمكنك استعمال

 

        Dim dt As DataTable = Ds_farms.firm

        dt.Rows.Add(value1,value2,value3,value4,value5,value6)

        dt.AcceptChanges

تم تعديل هذه المشاركة بواسطة samir ibrahim في 9 مايو 2013 في 23:46

Samir Ibrahim

VFP Blog

VB.NET Blog

#9

أخ سمير ممكن توضح أكثر ..

هل المقصود بالرقم 1000 هو عدد السجلات التي يحملها

ثم كيف الطريقة بعد الألف ...

يعني أنا الآن عندي فورم البحث لو المطلوب صفة عدد سجلاتها أكثر من الألف كيف يعمل ؟؟؟

#10

ان 1000 هو رقم ال parameter or ID

 

Download the Northwind database and open it

 

جدول ال orders لديه 48 سجل

 

        Dim ta As New ds_northwindTableAdapters.OrdersTableAdapter
        Dim dt As New ds_northwind.OrdersDataTable

        ta.FillBy(dt,55)

        MsgBox(dt.Rows.Count.ToString) ' Give you 1 Row
        Me.dataGridView1.DataSource = dt

post-274444-0-73970300-1368199368_thumb.

post-274444-0-85765400-1368199384_thumb.

post-274444-0-26689100-1368199652_thumb.

تم تعديل هذه المشاركة بواسطة samir ibrahim في 10 مايو 2013 في 18:29

Samir Ibrahim

VFP Blog

VB.NET Blog

#11

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

 

واذا كان هذا هو المطلوب فأعتقد حسب علمى المتواضع انه يمكن ذلك باستخدام  جملة sql  وتمريرها لقاعدة البيانات عن طريق  command  وربما تكون الجملة المناسبة هى بالصيغة 

 

"insert into [table] values ('value1',value2')   ثم استخدام command  لأرسال البيانات الى قاعدة البيانات مباشرة
 

 

 Dim cmd As New SqlCommand

 

cmd..CommandText = جملة الاستعلام الخاصة بك

cmd..Connection =  your connection

 

dim x as integer = cmd .excutenonquery

 

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

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

#12

الى الاخ visual6.0

 

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

 

لنفرض ان لديك جدول للزبائن يحتوي على 100,000 سجل وانت جلبت السجلات ولنفرض انك عرضتها في datagridview

 

الان انت تريد اضافة سجل جديد بحيث يظهر في datagridview وفي نفس الوقت يكون هذا السجل قد اضيف في ال database بحيث يصبح datagridview or dataset متزامنة مع قاعدة البيانات بدون الحاجة الى جلب 100,000 سجل مرة اخري.

 

هل هذا هو ما تريد؟

Samir Ibrahim

VFP Blog

VB.NET Blog

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