PDA

نسخه کامل مشاهده نسخه کامل : يه مقاله ميخوام در مورد آموزش کلي و کامل فايلها در دلفي



Arash_XL7710i_207
03-09-2007, 08:35
بصورت حرفه اي باشه

R£ɀД
03-09-2007, 09:07
آرش جان فعلا این رو داشته باش تا ببینم دیگه چی پیدا می کنم.




AssignFile procedure
برای ست کردن یک متغییر به یک فایل خارجی
ChDir procedure
تغییر دایرکتوری فعال
CloseFile procedure
بستن فایل مرتبت با متغییر اغلانی ما
CreateDir function
ساخت یک دایرکتوری
DeleteFile function
حذف یک فایل
DirectoryExists function
وجود یا عدم وجود یک دایرکتوری بر روی دیسک
DiskFree function
بازگرداندن میزان فضای خالی یک دیسک
DiskSize function
باز گرداندن میزان فضای موجود بر روی دیسک
File mode constants
ثابت های دست رسی به یک فایل (خواندنی یا نوشتنی و ...)
File open mode constants
مدل باز کردن یک فایل از روی دیسک (خواندنی یا نوشتنی)
FileAccessRights variable
شکل یا نقاط دست رسی توسط خط فرمان برای اجرا
FileAge function
زمان ساخت یا نشانه گزاری یک فایل
FileClose procedure
بستن یک فایل باز
FileCreate function
ساخت یک فایل
FileDateToDateTime function
تبدیل تاریخ ساخت یک فایل به تاریخ قابل فهم برای انسان
FileExists function
وجود یا عدم وجود یک فایل
FileGetAttr function
گرفتن مشخصات یک فایل از قبیل مخفی و سیستمی و ...
FileGetDate function
تاریخ ساخت یک فایل
FileIsReadOnly function
آیا فایک خاصیت فقط خواندنی دارد
FileOpen function
باز کردن یک فایل
FileRead function
خواندن از یک فایل
FileSearch function
جستجوی یک فایل
FileSeek function
تغییر نقطه خواندن و نوشتن
FileSetAttr function
اعمال خواص بر روی یک فایل
FileSetDate function
تغییر تاریخ ساخت یک فایل
FileSetReadOnly function
تغییر خصلت فقط خواندنی یک فایل
FileWrite function
نوشتن در یک فایل
FindClose procedure
بستن یک عملیات جستجو و اتمام آن
FindFirst function
جستجوی اولین فایل برخوردی با مشخصات اعلام شده
FindNext function
جستجوی فایل بعدی برخوردی با مشخصات اعلام شده پس از FindFirst
ForceDirectories function
ساخت یک دایرکتوری در صورت نیاز به ساخت
GetCurrentDir function
باز گرداندن نام دایرکتوری فعال
GetDir procedure
باز گرداندن نام دایرکتوری فعال
RemoveDir function
حذف یک دایرکتوری
RenameFile function
تغییر نام یک فایل
SetCurrentDir function
تغییر دایرکتوری فعال



کار با بانکهای اطلاعاتی در دلفی



در این بخش می خواهیم به پر كاربردترین و پراستفاده ترین مبحث در دلفی، یعنی برنامه نویسی بانك های اطلاعاتی، بپردازیم. امید است كه با آموزش گام به گام بتوانیم به طور كامل و كاربردی این بحث طولانی و سنگین را توصیح دهم.

مروری بر ADO
ADO و یا به عبارتی ActiveX Data Object رابط كاربری سطح بالای مایكروسافت برای دستیابی به بانك های اطلاعاتی است. ADO - كه بر اساس فناوری OLE DB مایكروسافت پیاده سازی شده است - علاوه بر دستیابی به بانك های اطلاعاتی رابطه ای و غیر رابطه ای، دستیابی به پست الكترونیكی و فایل سیستمها و اشیاء شخصی را فراهم می سازد. اگر بخواهیم از Access یا از Sql Server مایكروسافت استفاده كنیم، ADO قطعا مزایای بسیاری برای ما خواهد داشت. اما نكته منفی در مورد ADO آنست كه در Linux یا سیستم های عامل دیگر قابل استفاده نیست.
مدل برنامه سازی ADO بر پایه چند شیء استوار است، كه روشهایی را برای دستیابی به انواع منابع داده ای فراهم می سازند. برخی از این اشیاء به قرار زیرند:

شیء Connection كه نمایانگر اتصال به منابع داده ای با استفاده از رشته های اتصال است.
شیء Command كه امكان كار بر روی منابع داده ای را فراهم می سازند. مانند: عملیات حذف، درج، پرس و جو، بروز رسانی و . . .
شیء Recordset كه نتیجه فرمان Query است. هر Recordset را می توان یك جزء ساخت Table یا Query در نظر گرفت.چند جزء ساخت كه در برنامه ها و مثالهای آتی استفاده خواهیم كرد را به طور خلاصه معرفی می كنیم:

اجزای ساخت تب Data Control
این اجزای ساخت كه Data-Aware نامیده می شوند، اجزای ساختی هستند كه عموما مشابه آنها را در تب standard می بینیم. اما به گونه ای تغییر یافته اند تا محتوای داده های یك Dataset را نمایش یا تغییر دهند. به عنوان مثال از DBEDIT و DBDEMO برای نمایش یك ركورد استفاده می شود. اما از DBGRID زمانی استفاده می شود كه بخواهیم محتـوای كل یك Dataset را نمایش دهیم.
بیـــشتر این اجزای ساخت را می توان به وســـــیله همان اجزا ساخت موجود در تب Standard پیاده سازی كرد. لذا از آنها به جز DBGRID كمتر استفاده خواهیم كرد.

اجزا ساخت تب Dataset
دلفی برای ایجاد برنامه های كاربردی مبتنی بر ADO چهار جزء Dataset معرفی كرده است:

TADODataset
TADOTable
TADOQuery
TADOStoredProcتمام این اجزا برای بازیابی، نمایش و تغییر داده ها طراحی شده اند، که می توانند از طریق خصوصیت Connection string خود مستقیماً با منبع داده ها ارتباط برقرار كنند.

جزء ساخت Data Source
این جزء ساخت مكانیزمی برای مرتبط كردن اجزای ساخت Dataset به اجزا ساخت Data-Aware - كه داده ها را نمایش می دهند - فراهم می سازد.

برقراری اتصال با بانك اطلاعاتی
همانطور كه عنوان شد اگرچه هر جزء ساخت Dataset خود مستقیماً می تواند به بانك اطلاعاتی وصل شود، اما ما برای این منظور از جزء ساخت ADOConnection موجود در تب ADO استفاده می كنیم. در این صورت اجزاء Dataset به جای برقراری ارتباط مستقیم با بانک اطلاعاتی به این جزء متصل می شوند. این عمل فواید بسیاری دارد. از جمله اینکه در صورت تغییر پپدا کردن رشته ارتباطی بانک اطلاعاتی تنها کافیست این جزء منفرد را تغییر دهیم. در حالت قبلی باید رشته ارتباطی تک تک اجزای Dataset را تغییر می دادیم.
روال كار بدین صورت است:

ابتدا یك جزء ساخت ADOConnection روی فرم قرار داده، و روی آن دو بار كلیك می كنیم. پنجره ای مشابه شكل 1 ظاهر می شود.
سپس روی Build كلیك می كنیم تا پنجره شماره 2 ظاهر شود. فرض می کنیم از پایگاه داده Microsoft Access استفاده می كنیم. در صفحه جدید گزینه Microsoft jet 4.0 Ole DB Provider را انتخاب می كنیم.
Next را كلیك كرده، در صفحه بعد - که در شكل 3 نمایش داده شده - از طریق دكمه Browse فایل mdb مربوط به Microsoft Access را انتخاب می كنیم.
برای آنكه از اتصال موفق پایگاه داده مطمئن شویم دكمه Test Connection را كلیك می كنیم.
در تب Advanced طریقه دستیابی به پایگاه داده را - مانند شکل ۴ - مشخص می كنیم.
اكنون OK را كلیك می كنیم.
روی ADOConnection كلیك كرده، و از طریق Object Inspector خاصیت LoginPrompt را False، و ارزش خاصــیت Connected را True می كنیم.
اكنون از تب ADO یك ADOTable، از تب DataAccess یك DataSource، و از تب DataControl یك DBGrid روی فرم قرار می دهیم.
از طریق Object Inspector مقدار خاصیت Connection جزء ADOTable1 را ADOConnection1 قرار داده، و در خاصیت Table Name یكی از جداول پایگاه داده را برمی گزینیم.
بر روی DataSource كلیك كرده، خاصیت DataSet آنرا به ADOTable1 تغییر می دهیم.
بر روی DBGrid كلیك كرده خاصیت DataSource آنرا به DataSource1 تغییر می دهیم.
بالاخره ADOTable1 را انتخاب كرده و ارزش خاصیت Active آنرا True قرار می دهیم. اگر جدول مورد نظر دارای داده باشد، آن داده ها در DBGrid نمایش داده می شوند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

در بخشهای بعدی مطالبی در مورد شبوه نوشتن در منبع داده، خواندن از منبع داده، و نمایش اطلاعات بحث خواهیم كرد.
موتور بانك اطلاعاتی JET معمولا با بانك اطلاعاتی Microsoft Access مرتبط است، و از MS Access 97 , 2000 , 2003 و نرم افزارهای راه اندازی ISAM (اختصار Index Sequential Access Method) پشتیبانی می كند. لذا این موتور شامل نرم افزارهای راه اندازی Paradox, dBase, Access و Excel بوده، و از متن نبز پشتیبانی می كند. برای آنكه این موتور را با هر بانك اطلاعاتی به غیر از Microsoft Access به كار ببرید، كافیست در پنجره Data Link Properties و در تب All خاصیت Extended Properties را مقدار دهی كنید. مثلا برای استفاده از Excel آنرا به Excel 8.0 و برای استفاده از متن به Text تغییر دهید.
به عنوان یک مثال ساده حالت برای متن، یك فایل متنی با محتویات زیر ایجاد كنید:
Amin , Amani
Reza , Sadegi
Mohammad , Azimi
یك ADOTable، یك DBGrid، و یك DataSource روی فرم قرار داده و خواص آنها را مطابق دستورالعمل ارائه شده در بالا تنظیم کنید. با این تفاوت که به جای Access از فایل متنی (Text) استفاده کنید(شكل ۲). البه باید در قسمت مسیر فایل فقط مسیر دایركتوری حاوی متن را بنویسید، و نام فایل را ننویسید. و بالاخره در تب All مقدار خاصیت Extended Properties را Text قرار دهید. حال اگر خاصیت Active جزء ADOTable1 را True كنیم DBGrid حاوی داده های فایل متنی خواهد شد.




كار با بانكهای اطلاعاتی در دلفی - قسمت دوم




جلسه قبل با نحوه اتصال به پایگاه داده و نمایش داده ها به صورت ابتدایی آشنا شدیم. در این جلسه می خواهیم برخی کارهای عملیاتی نظیر افزودن، حذف، بروز رسانی و ویرایش داده ها را مرور کنیم. ابتدا آسانترین راه را پیشنهاد می دهیم:

1. استفاده از DBNavigator:
این جزء ساخت که در پالت DataControls قرار دارد علاوه بر قابلیتهای پیمایشی، راهکاری را برای انجام عملیاتی چون افزودن، حذف یا لغو را فراهم می کند. وجود دکمه ها اختیاری بوده و با استفاده از خاصیت VisibleButtons می توان هر ترکیبی از دکمه ها را انتخاب نمود. برای استفاده از این جزء ساخت آن را روی فرم قرار داده و در قسمت Object Inspector خاصیت DataSource آنرا به DataSource مورد نظر مقدار دهی می کنیم. چهار دکمه اول دکمه های پیمایشی هستند که با استفاده از آنها می توان به اولین و آخرین رکورد انتقال یافت، یا بین رکوردها حرکت کرد. دکمه های بعدی عبارتند از افزودن، حذف کردن، ویرایش، تایید، لغو و Refresh.
وقتی DataSet را در حال ویرایش یا Edit قرار داده ایم و اقدام به تغییر داده ها می کنیم تا زمانیکه عمل تایید یا Post را انجام ندهیم، تغییرات مورد نظر در پایگاه داده اعمال نخواهد شد.

2. با استفاده از کدنویسی:
با این روش متدهای مورد نظر یک DataSet را فراخوانی می کنیم. این متدها دقیقا همنام با دکمه های جزءساخت DBNavigator هستند. یکی از عملیات پیمایشی که جزء ساخت DBNavigator فراهم نمی کند حرکت رو به جلو یا عقب به اندازه چند رکورد است. از متد MoveBy یک DataSet برای انتقال نشانه رو یک رکورد نسـبت به رکورد فعال استفاده می شود. مـــثلا دسـتور (MoveBy(2 باعث حرکت با گامهای 2 تایی رو به جلو می شود، و دستور (MoveBy(-2 موجب حرکت رو به عقب با گام هایی به طول 2 می شود.
اکنون تغییر و اصلاح داده ها را با هم مرور می کنیم. برای انجام هر کاری روی DataSet ها ابتدا باید DataSet مورد نظر باز باشد. در غیر اینصورت هیچ عملیاتی را روی داده ها نمی توان انجام داد. برای اینکار یا باید خاصیت Active را برای DataSet مورد نظر در حالت True قرار دهیم و یا از متد Open استفاده کرده و قطعه کدی مانند ;Adotable1.Open بنویسیم. برای بستن DataSet هم باید متد Close را فراخوانی کنیم.
برای آگاهی یافتن از وضعیت جاری یا State یک DataSet می توانیم از متد State یا رویداد (Event) به نام OnStateChange استفاده کنیم که هر بار به هنگام تغییر وضعیت DataSet متناظرش فعال می شود. مثلا اگر قطعه کد زیر را در قسمت پاسخگویی به رویداد OnStateChange بنویسیم سبب می شود تا وضعیت جاری AdoTable1 در Edit1 نمایش داده شود:

Var
St : String ;
Begin
Case AdoTable1.State of
dsInactive: st := ' closed ' ;
dsEdit: st := ' Editing ' ;
dsInsert: st:= ' Inserting ' ;
Else st := ' other state ' ;
End ;
form1.caption := 'AdoTable1 state :' + st ;
End ;

با استفاده از متد های First و Last می توان به ترتیب نخستین یا آخرین رکورد را به عنوان رکورد جاری تعیین کرد. متد Next و Prior برای رفتن به رکوردهای بعدی و قبلی است. خصوصیت BOF و EOF نشان می دهد نشانه رو در آخرین سطر یا نخستین سطر DataSet است.

به دست آوردن مقدار فیلدها
قبل از اینکه عملیات دیگر را معرفی کنیم باید ببینیم که چگونه می توانیم مقدار یک فیلد از یک رکورد را بدست بیاوریم؟ وقتی شیء های DataAware نظیر DBGrid به یک DataSet متصل می شود مقادیر فیلدها در آن شیء های کنترلی نمایش داده می شود. اگر بخواهیم همان مقادیر را مستقیما در برنامه به کار ببریم باید شیوه خواندن آنها را بدانیم. برای دستیابی به مقدار داده یک فیلد چندین روش وجود دارد:

1. ADOTable1.Fields[x].Value
در کد بالا X شماره فیلد است، که از صفر شروع می شود. تمام فیلدهای یک DataSet در آرایه Fields ذخیره می شود و X نمایانگر موقعیت فیلد در آرایه است.

2. ADOTable1.FieldsByName('name_of_field').Value
در این روش به مقدار فیلد با نام آن دستیابی پیدا می کنیم.
در هر دو این روشها چون Value از نوع Variant است، هنگام نیاز به مقدار فیلدها باید آن را به نوع مورد نظر تبدیل کنیم. مثلا اگر مقدار فیلدی به صورت رشته باشد، از خصوصیت AsString استفاده می کنیم.

ویرایش یک رکورد:
برای اینکه بتوان داده های یک DataSet را ویرایش نمود، DataSet باید در وضعیت Edit باشد. رفتار شیء های DataAware نظیر DBGrid - هنگامیکه مقدار True به خاصیت AutoEdit آنها تخصیص می یابد - این است که وقتی کاربر روی یکی از فیلدها کلیک می کند تا آنرا ویرایش کند، وضعیت DataSet از حالت Browse به حالت Edit تغییر می یابد. باید دقت کرد که پس از Edit باید عمل Post را هم انجام دهیم. مثلا در کد زیر:

ADoTable1.Edit ;
AdoTable1.name_of_field.AsString := 'delphi' ;
Adotable1.Post ;

در سطر نخست dataset در وضعیت Edit قرار می گیرد. در سطر دوم رشته Delphi به فیلد name_of_field تخصیص می یابد، و در سطر آخر هم داده ها Post می شوند. جالب است بدانید که در اثر اجرای سه دستور بالا رویدادهای زیر فعال می شوند:

AdoTable1 BeforeEdit
DataSource1 StateChange
Datasource1 DataChange
AdoTable1 AfterEdit
Adotable1 name_of_field Validate
Adotable1 name_of_field Change
DataSource1 StateChange
Datasource1 DataChange
AdoTable1 BeforePost
DataSource1 StateChange
AdoTable1 AfterPost

افزودن یک رکورد:
برای اینکار از دو متد مربوط به DataSet می توانیم استفاده کنیم. اولین متد Insert و دومین متد Append است. هردو این متدها یک رکورد جدید خالی در جدول ایجاد کرده و رکورد جدید را به عنوان رکورد فعال (Active) در نظر می گیرند. تنها تفاوت ما بین این دو دستور اینست که متد Append این رکورد جدید را در انتهای DataSet ایجاد می کند (به انتهای جدول اصافه می کند)، اما در متد Insert این رکورد جدید ممکن است در هر جایی از DataSet اضافه شده باشد. قطعه کد زیر نحوه انجام این عمل را نشان می دهد:

With AdoTable1 Do
Begin
Append ;
FieldByName('name').Value.AsAtring := 'ali' ;
FieldByName('Email').Value.AsString := 'ali@yahoo.com' ;
FieldByName('id').Value.AsString := '50' ;
Post ;
End ;
البته جزء ساخت AdoTable متدی به نام InsertRecord دارد که از آن می توان برای ایجاد یک رکورد خالی جدید در Dataset، پر کردن فیلدهای این رکورد جدید و Post کردن مقادیر به بانک اطلاعاتی استفاده نمود. کد زیر نحوه انجام این عمل را نشان می دهد:
AdoTable1.InsertRecord ( ' ali' ,' ali@yahoo.com ' , '50' ) ;
باید توجه داشت که ترتیب داده ها با ترتیب قرار گرفتن آنها در فیلدهای مورد نظر یکسان باشد.


حذف یک رکورد:
برای اینکار متد Delete مربوط به DataSet مورد نظر را فراخوانی می کنیم و نیازی به فراخوانی متد Post پس لز فراخواندن Delete نیست. با استفاده از رویداد BeforeDelete می توان جهت جلوگیری از حذف رکورد از جدول اقدام کرد. برای اینکه کاربر را از اینکه می خواهد رکوردی را حذف کند آگاه کنیم یا در حقیقت از کاربر بخواهیم که عمل حذف را تایید کند چندین راه وجود دارد. اولین روش استفاده از تابع MessageDlg است. این تابع در کتابخانه Dialogs به صورت زیز تعریف شده است :

Function MessageDlg ( Const Msg : String ; DlgType : TMsgDlgType ; Buttons : TMsgDlgButtons ; HelpCtx : Longint )
پارامتر اول پیامی است که می خواهیم به کاربر نشان داده شود. پارامتر دوم نوع پیام و پارامتر سوم ترکیب دکمه هایی است که در پیام می خواهیم ظاهر شود. MsgDlgBtn می تواند یکی از مقادیر mbOK, mbCancel, mbYes, mbNo, mbRetry و . . . را بپذیرد. برای اینکه بفهمیم کاربر کدامیک از دکمه ها را کلیک کرده است مثل کد زیر عمل می کنیم:
If messagedlg ( 'Are you sure you want to delete book?' , mtWarning , mbOKCancel , 0 ) = mrOk Then
AdoTable1.Costumer.Delete ;




نمایش میزان كپی شدن فایل با ProgressBar در دلفی

چطور میتوان زمان کپی شدن فایل را با استفاده از ProgressBar نمایش داد؟
برای انجام این کار ابتدا بر روی یک فرم یک ProgressBar اضافه کنید سپس تابع زیر را تایپ کنید:


procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var
FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
begin
AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
with Progressbar1 do
begin
Min := 0;
Max := FileLength;
while FileLength > 0 do
begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
Position := Position + NumRead;
end;
CloseFile(FromF);
CloseFile(ToF);
end;
end;


در این تابع شما در واقع فایل مبدا را خوانده و در مقصد مینویسید. حالا یک دکمه اضافه کرده کد زیر رو اضافه نمایید:


procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFileWithProgressBar1('c:\Welcome.exe', 'c:\temp\Welcome.exe');
end;



چطور می توان زمان کپی شدن فایل را محاسبه و نمایش داد؟
برای این کار نیز میتوانید از تابع زیر استفاده کنید:


procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var
FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
t1, t2: DWORD;
maxi: integer;
begin
AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
with Progressbar1 do
begin
Min := 0;
Max := FileLength;
t1 := TimeGetTime;
maxi := Max div 4096;
while FileLength > 0 do
begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
t2 := TimeGetTime;
Min := Min + 1;
// Show the time in Label1
label1.Caption := FormatFloat('0.00', ((t2 - t1) / min * maxi - t2 + t1) / 100);
Application.ProcessMessages;
Position := Position + NumRead;
end;
CloseFile(FromF);
CloseFile(ToF);
end;
end;


در این تابغ ابتدا زمان اولیه در متغیر t1 ذخیره شده و سپس پس از کپی شدن هر قسمت از فایل، زمان در متغیر t2 ذخیره میشود و توسط فرمول زیر مقدار زمان باقی مانده تا کپی کامل فایل بدست می آید.


((t2 - t1) / min * maxi - t2 + t1) / 100




منبع :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
+ شبکه فن آوری اطلاعات ایران

Arash_XL7710i_207
04-09-2007, 06:05
ممنون رضا جان دستت درد نکنه بالاخره از هيچي بهتره...