PDA

View Full Version : آنچه درباره DBISAM باید بدانیم !



Mojgan110
دوشنبه 27 آذر 1385, 16:46 عصر
من به تازگی DBISAM را نصب کرده ام و میخواهم که یادش بگیرم. http://qsmile.com/qsimages/sp/var/glassesf.gif
از طرفی ، با بررسی ایی که توی تاپیکهای این سایت درباره DBISAM کردم ، به نظرم اومد که اگه یک بار راهنمای خوده DBISAM خونده میشد ، خیلی از اون سوالات پرسیده نمیشد. http://kolobok.wrg.ru/smiles/personal/pooh_go.gif

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

کاری که شما میتونید توی این تاپیک انجام بدهید ( علاوه بر تنکس دادن به من ! http://smilies.sofrayt.com/%5E/f0/shy.gif ) ، این هست که شما هم نکاتی را راجع به DBISAM به همین سبک و سیاق ، ارسال کنید که میتونه برگرفته از راهنمایه خوده DBISAM باشه و یا تجربیات ارزشمندی که شما در حین کار با آن ، کسب کرده اید.

کاری که نباید توی این تاپیک انجام بدهیم http://i5.tinypic.com/168uav4.gif ، پرسیدن سوالات متفرقه و رفع اشکالهای شخصی هست ، لطفا برای این موارد ، تاپیکهای جداگانه ای تاسیس ! کنیم و موضوع را تا رسیدن به جواب نهایی ، در همان تاپیک پیگیری کنیم و در آخر ، نتیجه نهایی را به این تاپیک منتقل کنیم.

مرسی/.

Mojgan110
دوشنبه 27 آذر 1385, 16:48 عصر
تنها Isolation Level ی که DBISAM برای تراکنشها داره ، Read Commited هست. بنابراین فقط Session ی که تراکنش در اون رخ داده ، میتونه همون موقع آپدیتها و اینسرتها ودیلیتها را ببینه و بقیه Session ها ، فقط پس از معلوم شدن تکلیف تراکنش ( که کامیت بشه یا رولبک) ، میتونند تغییرات را ببینند.(p.69

Mojgan110
دوشنبه 27 آذر 1385, 16:51 عصر
Restricted Transactionz :
میتونیم تراکنش را به جای اینکه روی همه دیتابیس برقرار کنیم ، روی چندتا جدول هم براقرار کنیم ، متد StartTransaction یک پارامتر اختیاری میگیرد از نوع TStrings که در آن میتوانیم اسم جدولهایی که میخواهیم تراکنش روی آنها باشد را مشخص کنیم.(p.67)

Mojgan110
دوشنبه 27 آذر 1385, 16:55 عصر
در مواقعی که یک IMPROPER Application Shutdown رخ میدهد ، ممکن هست که خرابی هایی در جداول DBISAM رخ دهد. برای کاهش این خرابی ها ، میتوان در شیء TDBISAMSession ، مقدار خاصیت ForceBufferFlush را True کرد ولی این کار باعث کاهش پرفورمنس در repair کردن جدولها و همچنین batch updates میشود . به همین دلیل ، خوده DBISAM پیشنهاد میکند که بجای این کار ، از متد FlushBuffers که متعلق به کامپوننتهای DBISAMTable,Query ! هست ، استفاده شود و هروقت که لازم دیدیم ، آنرا صدا بزنیم.

Mojgan110
سه شنبه 28 آذر 1385, 09:12 صبح
پیگیری Progress در عملیات بک آپ/ریستور : رویدادهای OnBackupProgree و OnRestoreProgress

Mojgan110
سه شنبه 28 آذر 1385, 09:13 صبح
برای اینکه یک In memory Table داشته باشیم ، کافیست که خاصیت Database Name را در Table یا Query ، مقدار ویژه ی Memory بدهیم. (ص.73)

Mojgan110
یک شنبه 03 دی 1385, 15:28 عصر
Table یه متدی داره بنام VerifyTable که اگر False برگرداند ، متوجه میشویم که بایستی RepairTable را اجرا کنیم.)ص.87)

Mojgan110
دوشنبه 11 دی 1385, 08:45 صبح
با کامیت کردن تراکنش ، متد FlushBuffers هم اجرا میشه .(p.68)

Mojgan110
دوشنبه 11 دی 1385, 08:53 صبح
مثالی از نحوه BackUp گرفتن جداول .
برای ردگیری پروسه بک آپ ، از رویداد OnBackupProgress استفاده کنید.


TablesToBackup: TStrings;
begin
TablesToBackup:=TStringList.Create;
try
with MyDatabase do
begin
DatabaseName:='MyDatabase';
Directory:='d:\temp';
with TablesToBackup do
begin
Add('Customers');
Add('Orders');
Add('Items');
end;
if Backup('d:\temp\'+
StringReplace(DateToStr(Date),
'/','',[rfReplaceAll])+'.bkp',
'Daily Backup for '+DateToStr(Date),6,
TablesToBackup) then
ShowMessage('Backup was successful')
else
ShowMessage('Backup failed');
end;
finally
TablesToBackup.Free;
end;
end;

Mojgan110
دوشنبه 11 دی 1385, 08:55 صبح
مثالی از نحوه Restore کردن جداول .
برای ردگیری پروسه ی بازیابی از رویداد OnResotreProgress استفاده میشه.


var
TablesToRestore: TStrings;
begin
TablesToRestore:=TStringList.Create;
try
with MyDatabase do
begin
DatabaseName:='MyDatabase';
Directory:='d:\temp';
with TablesToRestore do
Add('Customers');
if Restore('d:\temp\'+
StringReplace(DateToStr(Date),
'/','',[rfReplaceAll])+'.bkp',
TablesToRestore) then
ShowMessage('Restore was successful')
else
ShowMessage('Restore failed');
end;
finally
TablesToRestore.Free;
end;
end;

Mojgan110
دوشنبه 11 دی 1385, 08:56 صبح
DBISAMQuery یک پراپرتی دارد بنام Plan که از نوع TStrings است و اطلاعاتی درباره نحوه اجرا شدن دستور و بهینه سازیهایی که dbisam انجام داده را شامل میشود.
اگر چند دستور SQL را در یک کوئری بخواهیم اجرا کنیم ، Plan فقط آخرین دستور را نمایش میدهد و برای اینکه به تک تک آنها دسترسی داشته باشیم باید از رویداد AfterExecute استفاده کنیم.

Mojgan110
دوشنبه 11 دی 1385, 09:00 صبح
با پراپرتی ExecutionTime میتوانیم بفهمیم که مدت زمان اجرا شدن کوئری ، چقدر بوده است.( بر حسب ثانیه) و نوع مقدار برگشتی هم Double است.

Mojgan110
دوشنبه 11 دی 1385, 09:01 صبح
اگر در حین prepare شدن کوئری و یا در حین اجرا شدن آن ، خطایی رخ دهد ، خب حالت پیش فرض این هستش که اروری ! raise شود ولی کوئری های dbisam یک ایونت بنام OnQueryError دارند که میتوان از آن استفاده کرد.
این رویداد پارامتری بنام Var Action دارد که سه تا مقدار میتونه بگیره : aaRetry , aaAbort , aaContinue که از اسمشون معلومه که هرکدام چه کار میکنند. aaRetry برای مواقعی که ارور بخاطر قفل بودن جدول ایجاد شده و aaContinue برای مواقعی که چندتا دستور در یک کوئری را داریم اجرا میکنیم ، میتونند مفید باشند.

Mojgan110
دوشنبه 11 دی 1385, 09:02 صبح
برای پیگیری میزان پیشرفت دستورات کوئری ، ایونتی هست بنام OnQueryProgress که پارامتری از نوع DWORD دارد بنام PercentDone . ولی متاسفانه این ایونت فقط برای SELECT اجرا میشه و برای اینسرت و آپدیت و دیلیت اجرا نمیشه.

Mohammad_Mnt
دوشنبه 11 دی 1385, 13:56 عصر
یونیت درست‌تره

asghar59
شنبه 23 تیر 1386, 12:52 عصر
مژگان جان با سپاس فراوان از توضیحاتون
دوست عزیز DBISAM رو از کجا می شه دانلود کرد با کرک
برای دلفی 6 می خوام