( تعداد نمایش : 1662 )

استفاده از XML به عنوان ذخیره کننده اطلاعات

XML می تواند دقیقا همچون یک Table برای شما عمل نماید. در واقع شما می توانید با استفاده از XML اطلاعات خودتان را در قالب یک جدول ذخیره کنید.
برای این کار می توانید از کمپوننت ClientDataSet استفاده کنید. (این کمپوننت را می توانید در تب DataAccess بیابید). در واقع این کمپوننت یک In-Memory Table است. یعنی اطلاعات خود را در حافظه نگهداری می کند و به همین علت نیز فوق العاده سریع است.
نگاهی به کد زیر بیاندارید و با Load کردن یک XML و درست کردن آن آشنا شوید:

     ClientDataSet1.FileName := ExtractFilePath(
Application.ExeName) +
 'test.xml';
     if FileExists(ClientDataSet1.FileName) then
        ClientDataSet1.Open
     else
     begin
          //AddFieldDef version
          with ClientDataSet1.FieldDefs do
          begin
               Clear;
               with AddFieldDef do
               begin
                    Name := 'ID';
                    DataType := ftAutoInc;
               end; //with AddFieldDef do
               with AddFieldDef do
               begin
                    Name := 'First Name';
                    DataType := ftString;
                    Size := 20;
               end; //with AddFieldDef do
               with AddFieldDef do
               begin
                    Name := 'Last Name';
                    DataType := ftString;
                    Size := 20;
               end; //with AddFieldDef do
          end; //with ClientDataSet1.FieldDefs
          ClientDataSet1.CreateDataSet;
     end; //else

همان طور که در این کد مشاهده می کنید در ابتدا سعی شده است که فایل test.xml را که در شاخه خود برنامه قرار دارد Load کنیم و در صورتی که این فایل پیدا نشد. آنگاه می توان به سادگی (همان طور که می بینید) این فایل را از ابتدا تعریف کرد. فیلدهای مورد نظر و مشخصات مورد نیاز خود را وارد کنیم و همچنین در صورتی که نیاز بود با استفاده از IndexDefs یک یا چند Index جدید ساخت.

به چند نکته راجع به این کد توجه کنید:
۱- با استفاده از متد FieldDefs.AddFieldDef مربوط به ClientDataSet می توانید یک فیلد جدید درست کنید.
۲- برای ساخت Index نیز می توانید از متد IndexDefs.AddIndexDef مربوط به ClientDataSet استفاده کرد.
۲- هر فیلد می توانید شامل انواع زیر باشد:

type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);

بنابراین شما به جای ftString و یا ftAutoInc می توانید از هر کدام از این ثابت ها استفاده کنید.
همان طور که مستحضرید به راحتی می توانید در XML حتی از BLOB هم استفاده کرده و در آن صدا یا تصویر ذخیره کنید.
۳- از متد CreateDataSet پس از ساخت فیلدهای مورد نظرتون استفاده کنید تا این تغییرات تثبیت بشود.
۴- یک ClientDataSet را می توانید به سادگی به یک کمپوننت DataSource وصل کنید. پس از آن می توانید از هر کمپوننت Data-Aware مثل DBGrid برای Browse یا ویرایش اطلاعات استفاده کنید.
۵- با استفاده از Filter و Filtered می توانید به سادگی اطلاعات رو فیلتر کنید و به علاوه به سادگی می توانید از Locate و FindKey و FindNearest برای جستجو در Tableتون استفاده کنید.
۶- در ClientDataSet هم می توانید از Lookupها و فیلدهای محاسباتی استفاده کنید. همچنین می توانید دو نوع فیلد دیگه به اسم InternalCalc و Aggregate رو هم استفاده کنید. راهنمای مربوط به InternalCalc و Aggregate دلفی رو در این جا آورده ام:

InternalCalc:
Retrieves values calculated at runtime by a client dataset and stored with its data (instead of being dynamically calculated in an OnCalcFields event handler). InternalCalc is only available if you are working with a client dataset. Values calculated for an InternalCalc field are stored and retrieved as part of the client dataset’s data.

Aggregate:
Retrieves a value summarizing the data in a set of records from a client dataset.

موفق و موید و منصور باشید
معموری

دیدگاه خود را بیان کنید.

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