یادداشت های برنامه نویس

تجربیات و سورس کدهای رایگان در زمینه برنامه نویسی دلفی و دیتابیس ها

یادداشت های برنامه نویس

تجربیات و سورس کدهای رایگان در زمینه برنامه نویسی دلفی و دیتابیس ها

تعیین گروهی از رکوردهای جدول

به سه روش می‌توان گروهی از رکوردها را در جدول تعیین کرد که عبارت‌اند از:

1ـ استفاده از خاصیت Filter

2ـ استفاده از رویداد OnFilterRecord

3ـ استفاده از متد SetRange

 

استفاده از خاصیت Filter

در این روش مراحل ایجاد فیلتر به صورت زیر است:

1ـ خاصیت Filtered را به مقدار True تغییر دهید.

2ـ مقداری را در خاصیت Filter قرار دهید که باید بر اساس آن فیلتر انجام شود.

به عنوان مثال، دستورات زیر را در نظر بگیرید:

Table1.Filtered := True;

Table1.Filter := ‘Fname = ‘Saeed’’ ;

این دستورات، رکوردهایی را نشان می‌دهد که نام آنها saeed باشد.

در خاصیت Filter می‌توان از عملگرهای not , or , and استفاده نمود. به عنوان مثال، دستورات زیر را در نظر بگیرید:

Table1.Filter := ‘Age > 20 and Age 40’ ;

Table1.Filtered := True ;

این دستورات، تمام رکوردهایی را نشان می‌دهد که سن  آنها بین 20 تا 40 باشد.

مجموعه دستورات زیر، تمام رکوردهای جدول را نمایش می‌دهد.

Table1.Filter := “ ;

Table1.Filtered := True ;

یا

Table1.Filtered :=False;

اگر مقدار خاصیت Filter خالی و مقدار خاصیت Filtered برابر با True باشد، تمام رکوردهای جدول را نمایش می‌دهد. از این روش می‌توان برای حذف فیلترهای قبلی استفاده کرد.

 

استفاده از رویداد OnFilterRecord

روش دیگر ایجاد فیلتر استفاده از رویداد OnFilterRecord است. این رویداد، برای هر یک از رکوردهای جدول فراخوانی می‌شود. این رویداد، برای ایجاد فیلتر از پارامتر

Accept استفاده می‌کند و به صورت زیر به کار می‌رود:

; (مقدار فیلتر) Accept :=

این دستور، در پارامتر Accept هر رکوردی که در شرط فیلتر صدق کند، مقدار True را قرار می‌دهد. به عنوان مثال، برای ایجاد فیلتر با این روش، رویداد OnFilterRecord جدول را دوبار کلیک کرده کد زیر را تایپ کنید:

Accept := (Table1.FieldByName ('Code').Values = '7’) ;

 این دستور، رکوردی را نمایش می‌دهد که کد دانشجویی آن ‘7’ باشد. کد کامل این برنامه به صورت زیر است:

procedure Tform1.TableFilterRecord (DataSet:TdataSet; var Accept:Boolean);

begin

     Accept := (Table1.FieldByName ('code').Values = '7’);

 

متد FindFirst : با استفاده از این متد می‌توان اولین رکوردی را پیدا کرد که شرایط فیلتر را داشته باشد و به صورت زیر استفاده می‌شود:

.FindFirst; نام عنصر

در این متد، اگر اشاره‌گر، به اولین رکوردی انتقال یابد که دارای شرایط فیلتر باشد، مقدار True و گرنه مقدار False را برمی‌گرداند.

 

متد FindNext: با استفاده از این متد می‌توان رکورد بعدی را تعیین کرد که دارای شرایط فیلتر است و کاربرد آن به صورت زیر است:

.FindNext ; نام عنصر

اگر اشاره‌گر به رکورد بعدی که دارای شرایط فیلتر است، منتقل شود، این متد مقدار True و گرنه مقدار False را برمی‌گرداند.

 

متد FindLast : این متد، برای پیدا کردن آخرین رکوردی به کار می‌رود که شرایط فیلتر را داشته باشد، و به صورت زیر استفاده می‌شود:

.FindLast ; نام عنصر

اگر اشاره‌گر، به آخرین رکوردی انتقال یابد که دارای شرایط فیلتر باشد، این متد مقدار True و گرنه مقدار False را برمی‌گرداند.

 

متد FindPrior : این متد، اشاره‌گر را به رکورد قبلی انتقال می‌دهد که دارای شرایط فیلتر باشد، و به صورت زیر به کار می‌رود:

.FindPiror ; نام عنصر

اگر اشاره‌گر، به رکورد قبلی که دارای شرایط فیلتر باشد، منتقل گردد این متد مقدار True و گرنه مقدار False را برمی‌گرداند.

 

متد SetRange : با استفاده از این متد می‌توان گروهی (محدوده‌ای) از رکوردها را در جدول تعیین کرد و از آنها استفاده نمود. پس از تعیین محدوده‌ای از رکوردها، می‌توان فرض کرد که بقیه رکوردها وجود ندارند. متد SetRange به صورت زیر به کار می‌رود:

‘ ; نام فیلد.IndexName := ' نام عنصر

; ([مقدار 2] , [مقدار 1]) .SetRange نام عنصر

به عنوان مثال، دستورات زیر را در نظر بگیرید:

Stu.IndexName := 'Fname';

stu.SetRange (['Saeed']) ;

در این دستورات، رکوردهایی در جدول ظاهر می‌گردند که نام آنها ‘saeed’ باشد. مجموعه دستورات زیر، رکوردهایی را که حقوق آنها بین 20 تا 40 ریال باشد، نمایش می‌دهد.

Stu.IndexName := 'Age' ;

Stu.SetRange ([20] , [40]);

 

متد CancelRange : با استفاده از متد CancelRange می‌توان محدوده در نظر گرفته برای جدول را حذف نمود و تمام رکوردهای جدول را نمایش داد. کاربرد متد CancelRange به صورت زیر است:

.CancelRange ; نام عنصر

به عنوان مثال، دستور زیر را در نظر بگیرید:

Stu.CancelRange;

این دستور، محدوده‌ای را حذف می‌کند که توسط SetRange قبلی ایجاد شد و سبب نمایش تمام رکوردهای بانک اطلاعاتی می‌شود.

 

متد SetRangeStart : با استفاده از این متد می‌توان بازه شروع فیلتر قبلی را حذف نمود و بازه شروع فیلتر جدیدی را تعریف کرد. این متد به صورت زیر به کار می‌رود:

.SetRangeStart; نام عنصر

 ;مقدار بازه شروع فیلتر := نوع فیلد .as (نام فیلد) FieldByName . نام عنصر

متد SetRangeEnd: این متد، بازه پایانی فیلتر قبلی را حذف کرده بازه پایانی فیلتر جدیدی را تعریف می‌کند و به صورت زیر به کار می‌رود:

.SetRangeEnd ; نام عنصر

; مقدار بازه پایانی فیلتر := نوع فیلد .as (نام فیلد) FieldByName . نام عنصر

 

متد EditRangeStart : با استفاده از این متد می‌توان بازه شروع فیلتر قبلی را تعویض کرد و بازه شروع جدیدی را تعریف نمود و به صورت زیر به کار می‌رود:

.EditRangeStart; نام عنصر

 ;بازه شروع فیلتر := نوع فیلد .as (نام فیلد) FieldByName . نام عنصر

 

متد EditRangeEnd: این متد برای تعویض بازه پایانی فیلد موجود به کار می‌رود و به صورت زیر مورد استفاده قرار می‌گیرد: 

.EditRangeEnd ; نام عنصر

; بازه پایانی فیلتر جدید := نوع فیلد .as (نام فیلد) FieldByName . نام عنصر

به عنوان مثال، دستورات زیر را در نظر بگیرید:

with Table1 do

   begin

       EditRangeStart;

       FieldByName ('Age').asInteger := StrToInt (Edit1.Text);

       EditRangeEnd;

       FieldByName ('Age').asInteger := StrToInt (Edit2.Text); 

       ApplyRange;

End;

این دستورات کلیه رکوردهایی را نمایش می‌دهد که سن  آنها بین مقادیر عنصر Edit2 , Edit1 باشد.

متد ApplyRange : این متد، فیلتر را با استفاده از بازه شروع فیلتر و بازه پایان فیلتر بر روی جدول اجرا می‌کند و به صورت زیر استفاده می‌شود:

.ApplyRange ; نام عنصر

به عنوان مثال، دستورات زیر را در نظر بگیرید:

with Table1 do

     Active := True;

     SetRangeStart;

     FieldByName ('Age').asInteger := 20;

     SetRangeEnd;

     FieldByName ('Age').asInteger := 40;

     ApplyRange;

End;

این دستورات، رکوردهایی از جدول را نمایش می‌دهد که سنشان در بازه 20 تا 40 باشد.


 

نمونه کد کار با system restor

در کد زیر کار با system Restore point ویندوز را یاد خواهید گرفت. دسترسی به اخرین تغییرات در ویندوز

نکته:در ویندوز 7 Run as Admin… فراموش نشود

program WMIShowRestorePoints;

 ///www.delphiplus.ir
 ///  wwww.lear4u.blogsky.com
{$APPTYPE CONSOLE}

uses
  SysUtils
  ,ActiveX
  ,ComObj
  ,Variants;

function RestorePointTypeToStr(RestorePointType:Integer):string;
begin
     case  RestorePointType of
      0  : Result:='APPLICATION_INSTALL';
      1  : Result:='APPLICATION_UNINSTALL';
      13 : Result:='CANCELLED_OPERATION';
      10 : Result:='DEVICE_DRIVER_INSTALL';
      12 : Result:='MODIFY_SETTINGS'
      else
      Result:='Unknow';
     end;
end;

function EventTypeToStr(EventType:integer) : string;
begin
     case  EventType of
      102  : Result:='BEGIN_NESTED_SYSTEM_CHANGE';
      100  : Result:='BEGIN_SYSTEM_CHANGE';
      103  : Result:='END_NESTED_SYSTEM_CHANGE';
      101  : Result:='END_SYSTEM_CHANGE'
      else
      Result:='Unknow';
     end;
end;

function WMITimeToStr(WMITime:string) : string; //convert to dd/mm/yyyy hh:mm:ss
begin
    //20020710113047.000000420-000 example    source <a href="http://technet.microsoft.com/en-us/library/ee156576.aspx">http://technet.microsoft.com/en-us/library/ee156576.aspx</a>
    result:=Format('%s/%s/%s %s:%s:%s',[copy(WMITime,7,2),copy(WMITime,5,2),copy(WMITime,1,4),copy(WMITime,9,2),copy(WMITime,11,2),copy(WMITime,13,2)]);
end;

procedure GetRestorePoints;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  User          : OLEVariant;
  Domain        : OLEVariant;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
      Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

begin
  objWMIService := GetWMIObject('winmgmts:\\localhost\root\default');
  colItems      := objWMIService.ExecQuery('SELECT * FROM SystemRestore','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
      WriteLn(Format('%s %-15s',['Description',colItem.Description]));
      WriteLn(Format('%s %-15s',['RestorePointType',RestorePointTypeToStr(colItem.RestorePointType)]));
      WriteLn(Format('%s %-15s',['EventType',EventTypeToStr(colItem.EventType)]));
      WriteLn(Format('%s %-15s',['SequenceNumber',colItem.SequenceNumber]));
      WriteLn(Format('%s %-15s',['CreationTime',WMITimeToStr(colItem.CreationTime)]));
      Writeln('');
  end;
end;

begin
 try
    CoInitialize(nil);
    try
      GetRestorePoints;
      Readln;
    finally
    CoUninitialize;
    end;
 except
    on E:Exception do
    Begin
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;
end.

تسلیت شهادت

رحلت پیامبر همه جهانیان(ص)

و شهادت

امام حسن مجتبی (ع) تسلیت باد.