PDA

View Full Version : تشخیص دستور insert



2farsoft
سه شنبه 10 اردیبهشت 1387, 10:01 صبح
با سلام
من از یک سری دستورات برای insert,update,delete در دراخل Form_load استفاده کرده ام که با زدن Button تثبیت با استفاده از دستور
Me.oleDbDataAdapter1.Update(dataTable1)
تغییرات روی datagridviewدر database اصلی اعمال می شه. حالا می خوام قبل از اینکه کاربر بتونه یک رکورد جدید insert کنه یه سری چیزا رو چک کنم
چطوری میتونم تشخیص بدم که آیا کابر record جدیدی رو داره ثبت می کنه یا رکورد های قبلی رو داره update میکنه یا حذف میکنه
منتظر راهنمایی شما دوستان هستم

علیرضا مداح
سه شنبه 10 اردیبهشت 1387, 10:43 صبح
سلام دوست عزیز

سلام .

1) برای اینکار میبایست از تایع GetChanges مربوط به شی ء دیتاست استفاده نمایید که در زیر طریقه استفاده از آن آمده است . این تابع دارای دو فرمت میباشد که در زیر آمده است :

Public Function GetChanges() As System.Data.DataSet
با فراخوانی این تابع ، یک کپی از دیتاست مورد شما که شامل تمام رکوردهای تغییر یافته(در تمام جداول موجود در دیتاست که شامل رکوردهای حذف شده ، تغییر یافته ، تغییر نیافته و اضافه شده میباشد . ) از آخرین باری که متد AcceptChanges مربوط به آبجکت دیتاست فراخوانی شده و یا دیتاست در حافظه بارگذاری شده است را برمیگرداند .

Public Function GetChanges(ByVal rowStates As System.Data.DataRowState) As System.Data.DataSet
در اینجا نیز تابع GetChanges همانند فرمت قبلی خود رکوردهای تغییر یافته را در یک کپی از شی ء دیتاست برمیگرداند با این تفاوت که در اینجا شما میتوانید رکوردهای تغییر یافته را با استفاده از مقدار شمارشی DataRowState فیلتر نمایید .
این مقدار شمارشی دارای چهار ثابت میباشد :

Detached = 1
UnChanged = 2
Added = 4
Deleted = 8
Modified = 16


UnChanged
سطرهایی که هیچ تغییری در آنها رخ نداده است انتخاب مینماید. (از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

Added
سطرهایی که به شی ء DataRowCollection اضافه شده است (از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

Deleted
سطرهایی که از شی ء DataRowCollection توسط متد System.Data.DataRow.Delete حذف شده اند (از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

Modified
سطرهایی که دچار تغییر شده اند ((از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

همچنین شی ء DataTable نیز دارای تابع GetChanges میباشد ، با این تفاوت که این تابع یک کپی از شی ء DataTable که تمام رکوردهای تغییر یافته از آخرین باری که متد AcceptChanges مربوط به آبجکت DataTableفراخوانی شده و یا شی ء DataTable در حافظه بارگذاری شده است را برمیگرداند .
و مثالی از MSDN برای تکمیل :


Private Sub ProcessDeletes(table As DataTable, _
adapter As OleDbDataAdapter)
Dim changeTable As DataTable = table.GetChanges(DataRowState.Deleted)
' Check the DataTable for errors.
If table.HasErrors Then
' Insert code to resolve errors.
End If
' After fixing errors, update the database with the DataAdapter
adapter.Update(changeTable)
End Sub

2farsoft
سه شنبه 10 اردیبهشت 1387, 10:50 صبح
با تشکر از شما آقای مداح آیا این توابع به صورت آماده هستن؟

2farsoft
سه شنبه 10 اردیبهشت 1387, 11:27 صبح
من از این تابع استفاده کردم ولی این error رو میده
"Concurrency violation: the DeleteCommand affected 0 of the expected 1 records."
به این صورت استفاده کردم
UpdateDataTable(dataTable1, oleDbDataAdapter1)
و
PrivateSub UpdateDataTable(ByVal table As DataTable, _
ByVal myDataAdapter As OleDbDataAdapter)
Dim xDataTable As DataTable = table.GetChanges()
' Check the DataTable for errors.
If xDataTable.HasErrors Then
' Insert code to resolve errors.
EndIf
' After fixing errors, update the database with the DataAdapter
myDataAdapter.Update(table)
EndSub