View Full Version : آنچه درباره DBISAM باید بدانیم !
Mojgan110
دوشنبه 27 آذر 1385, 17: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, 17:48 عصر
تنها Isolation Level ی که DBISAM برای تراکنشها داره ، Read Commited هست. بنابراین فقط Session ی که تراکنش در اون رخ داده ، میتونه همون موقع آپدیتها و اینسرتها ودیلیتها را ببینه و بقیه Session ها ، فقط پس از معلوم شدن تکلیف تراکنش ( که کامیت بشه یا رولبک) ، میتونند تغییرات را ببینند.(p.69
Mojgan110
دوشنبه 27 آذر 1385, 17:51 عصر
Restricted Transactionz :
میتونیم تراکنش را به جای اینکه روی همه دیتابیس برقرار کنیم ، روی چندتا جدول هم براقرار کنیم ، متد StartTransaction یک پارامتر اختیاری میگیرد از نوع TStrings که در آن میتوانیم اسم جدولهایی که میخواهیم تراکنش روی آنها باشد را مشخص کنیم.(p.67)
Mojgan110
دوشنبه 27 آذر 1385, 17:55 عصر
در مواقعی که یک IMPROPER Application Shutdown رخ میدهد ، ممکن هست که خرابی هایی در جداول DBISAM رخ دهد. برای کاهش این خرابی ها ، میتوان در شیء TDBISAMSession ، مقدار خاصیت ForceBufferFlush را True کرد ولی این کار باعث کاهش پرفورمنس در repair کردن جدولها و همچنین batch updates میشود . به همین دلیل ، خوده DBISAM پیشنهاد میکند که بجای این کار ، از متد FlushBuffers که متعلق به کامپوننتهای DBISAMTable,Query ! هست ، استفاده شود و هروقت که لازم دیدیم ، آنرا صدا بزنیم.
Mojgan110
سه شنبه 28 آذر 1385, 10:12 صبح
پیگیری Progress در عملیات بک آپ/ریستور : رویدادهای OnBackupProgree و OnRestoreProgress
Mojgan110
سه شنبه 28 آذر 1385, 10:13 صبح
برای اینکه یک In memory Table داشته باشیم ، کافیست که خاصیت Database Name را در Table یا Query ، مقدار ویژه ی Memory بدهیم. (ص.73)
Mojgan110
یک شنبه 03 دی 1385, 16:28 عصر
Table یه متدی داره بنام VerifyTable که اگر False برگرداند ، متوجه میشویم که بایستی RepairTable را اجرا کنیم.)ص.87)
Mojgan110
دوشنبه 11 دی 1385, 09:45 صبح
با کامیت کردن تراکنش ، متد FlushBuffers هم اجرا میشه .(p.68)
Mojgan110
دوشنبه 11 دی 1385, 09: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, 09: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, 09:56 صبح
DBISAMQuery یک پراپرتی دارد بنام Plan که از نوع TStrings است و اطلاعاتی درباره نحوه اجرا شدن دستور و بهینه سازیهایی که dbisam انجام داده را شامل میشود.
اگر چند دستور SQL را در یک کوئری بخواهیم اجرا کنیم ، Plan فقط آخرین دستور را نمایش میدهد و برای اینکه به تک تک آنها دسترسی داشته باشیم باید از رویداد AfterExecute استفاده کنیم.
Mojgan110
دوشنبه 11 دی 1385, 10:00 صبح
با پراپرتی ExecutionTime میتوانیم بفهمیم که مدت زمان اجرا شدن کوئری ، چقدر بوده است.( بر حسب ثانیه) و نوع مقدار برگشتی هم Double است.
Mojgan110
دوشنبه 11 دی 1385, 10:01 صبح
اگر در حین prepare شدن کوئری و یا در حین اجرا شدن آن ، خطایی رخ دهد ، خب حالت پیش فرض این هستش که اروری ! raise شود ولی کوئری های dbisam یک ایونت بنام OnQueryError دارند که میتوان از آن استفاده کرد.
این رویداد پارامتری بنام Var Action دارد که سه تا مقدار میتونه بگیره : aaRetry , aaAbort , aaContinue که از اسمشون معلومه که هرکدام چه کار میکنند. aaRetry برای مواقعی که ارور بخاطر قفل بودن جدول ایجاد شده و aaContinue برای مواقعی که چندتا دستور در یک کوئری را داریم اجرا میکنیم ، میتونند مفید باشند.
Mojgan110
دوشنبه 11 دی 1385, 10:02 صبح
برای پیگیری میزان پیشرفت دستورات کوئری ، ایونتی هست بنام OnQueryProgress که پارامتری از نوع DWORD دارد بنام PercentDone . ولی متاسفانه این ایونت فقط برای SELECT اجرا میشه و برای اینسرت و آپدیت و دیلیت اجرا نمیشه.
Mohammad_Mnt
دوشنبه 11 دی 1385, 14:56 عصر
یونیت درستتره
asghar59
شنبه 23 تیر 1386, 13:52 عصر
مژگان جان با سپاس فراوان از توضیحاتون
دوست عزیز DBISAM رو از کجا می شه دانلود کرد با کرک
برای دلفی 6 می خوام
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.