با سلام...
در این پست در ادامه مبحث قبلی به نحوه استفاده از DataSet می پردازیم :
باز و بسته کردن DataSet ها
جهت خواندن یا نوشتن داده ها در یک جدول یا از طریق یک کوئری، بایستی ابتدا DataSet را باز کنیم. به 2 طریق میتوان یک DataSet را باز کرد :
1- خاصیت Active آنرا True کنیم. یا در زمان طراحی از طریق Object Inspector یا در زمان اجرا :
MyTable.Active := True;
2- استفاده از متد Open:
MyTable.Open;
به همین ترتیب به 2 طریق هم میتوان یک DataSet را بست یا با خاصیت Active و متد Active و یا استفاده از متد Close :
MyTable.Close;
ممکنه یک DataSet را در زمان تغییر خواصش و یا بدلیلی خاص در برنامه ببندیم و در زمان لازم اون رو باز کنیم.
حالتهای DataSet:
حالت و وضعیت یک DataSet مشخص میکند که چه عملیاتی میتواند بر روی داده ها صورت گیرد. مثلا وقتی DataSet ما بسته است حالت آن dsInActive است یعنی هیچ عملیاتی بر روی داده ها امکان پذیر نیست.
پس حالت (State) یک DataSet ممکن است :
dsInactive, dsBrowse, dsEdit, dsInsert, sdSetKey, dsCalcFields, dsFilter و ... باشد که با خیلی از اونا تا حالا کار کردیم :
در حالت پیش فرض، هنگام باز کردن DataSet در حالت dsBrowse قرار دارد. جهت تغییر آن باید از متدهای منطبق بر آن حالت استفاده کنیم. مثلا برای رفتن به حالت dsInsert از متد Insert استفاده میکنیم :
MyTable.Insert;
بدین ترتیب یک رکورد جدید در جدول MyTable ایجاد می شود. جهت ثبت داده ها از متد Post استفاده می کنیم. بدین ترتیب در صورت موفقیت Post، جدول مجددا به حالت dsBrowse می رود.
***هر زمان که حالت DataSet تغییر کند ، رویداد OnStateChange مربوط به DataSource ما فراخوانی می شود.
غیرفعال کردن یک DataSet :
همانطور که گفتم در زمانی که یک DataSet غیرفعال است که بسته باشد که در این حالت دسترسی به رکوردها نداریم. در زمان طراحی یک DataSet بصورت پیش فرض بسته است تا خاصیت Active آنرا True کنیم و در زمان اجرا هم یک DataSet بصورت Default بسته است مگر آنکه از متد Open یا خاصیت Active استفاده کنیم.
رویدادهای BeforeClose و AfterClose جهت کنترل بیشتر در پاسخ به متد Close قابل کد نویسی اند. برای مثال اگر یک DataSet در حالت dsInsert و یا dsEdit باشد و متد Close فراخوانی شود، شما ممکن است بخواهید پیغامی به کاربر بدهید که ابتدا تغییرات انجام شده را به ثبت رسانده یا انصراف دهد و سپس Close فراخوانده شود. در این حالت از BeforeClose استفاده میکنیم :
Procedure MyTable.VerifyBeforeClose(DataSet : TDataSet);
Begin
If (MyTable.State = dsEdit) or (MyTable.State = dsInsert) Then
Begin
If MessageDlg('Post Changes Before Closing?',
mtConfirmation,mbYesNo,0) = mrYes Then
MyTable.Post
Else
MyTable.Cancel;
End;
End;
در پست بعد به نمایش، ویرایش و جستجو در DataSet خواهیم پرداخت...
موفق باشید...