PDA

View Full Version : قطع برق و DBISAM



parhizkar2000
سه شنبه 22 اردیبهشت 1383, 22:18 عصر
من با توجه به تبلیغاتی که توی سایت بود ازو DBISAM تعریف شده بود این کامپونت رو خریدم و برای یه جا که برنامه می خواست اومدم از این بانکها استفاده کردم . وحالا هم برنامه تحویل اونهاست . اطلاعاتم وارد کردن و توی بعضی شعبشون هم از اون استفاهد می کنند . الان یک مشکل بدی پیش اومده او اونهم قطع برقه . با قطع برق اگر برنامه در حال اجرا باشه بانکها آسیب می بینند و باید با برنامه Dbsys که همراه DBISAM نصب میشه اونها رو بازسازی کرد
اگه بازسازی نشن برنامه همون اول یه خطا Close , Detail مربوط به ویندوز رو میده و اجرا نمیشه . آقای دلفی اسیستنت حالا باید چیکار کنم ؟؟؟

مهدی کرامتی
سه شنبه 22 اردیبهشت 1383, 23:23 عصر
خود کامپوننت های DBISAM‌ هم امکان Repair دارند. فکر کنم متدی بنام RepairTable‌ در DBISAMDatabase و یا DBISAMTable وجود داشته باشه.

baabi
سه شنبه 22 اردیبهشت 1383, 23:44 عصر
البته اینو هم باید بگم که گاهی وقتا Repiar جواب نمیده ؛ به جاش Optimize رو استفاده کن. تازه بعضی مواقع هیچکئم جواب نمیده و به جاش EmptyTable استفاده کن به همراه نسخه پشتیبان.
پیشنهاد من اینه که این سه گزینه رو توی یه برنامه کمکی مخصوص Repair جداگونه بذاری...

مهدی کرامتی
سه شنبه 22 اردیبهشت 1383, 23:50 عصر
توصیه میشود قبل از هر بار خروج از برنامه Backup بگیرید.

Mahdi_S_T
چهارشنبه 23 اردیبهشت 1383, 17:34 عصر
پس دوستانی که از DBISAM اینقدر تعریف می کردند بفرمایند معنی جمله زیر که در مقاله شماره 1 DBISAM آمده بود چیست :


قابلیت Buffered Transaction جهت حفاظت داده‌ها هنگام قطع برق


بحث پشتیبان گیری که جناب کرامتی فرمودند کاملا صحیح و بجاست ولی اگر لازم باشد که همیشه با قطع برق یک تعداد از رکورد های اطلاعاتی مان را از دست بدهیم که خدا بیامرزد پدر پاراداکس را :oops:

بابک زواری
چهارشنبه 23 اردیبهشت 1383, 19:36 عصر
آیا این مشکل هنگام هنگ کردن کامپیوتر هم پیش میاد ؟

مهدی کرامتی
چهارشنبه 23 اردیبهشت 1383, 20:17 عصر
پس دوستانی که از DBISAM اینقدر تعریف می کردند بفرمایند معنی جمله زیر که در مقاله شماره 1 DBISAM آمده بود چیست :

قابلیت Buffered Transaction جهت حفاظت داده‌ها هنگام قطع برق
بحث پشتیبان گیری که جناب کرامتی فرمودند کاملا صحیح و بجاست ولی اگر لازم باشد که همیشه با قطع برق یک تعداد از رکورد های اطلاعاتی مان را از دست بدهیم که خدا بیامرزد پدر پاراداکس را :oops:
این امکان زمانی بدرد خواهد خورد که از آن استفاده شود! (کاری که بعید میدانم این دوستمان انجام داده باشند).

Mahdi_S_T
چهارشنبه 23 اردیبهشت 1383, 22:00 عصر
پس بهتر است آقای پرهیزگار در ابتدا این مورد را پیگیری نمایند

parhizkar2000
چهارشنبه 23 اردیبهشت 1383, 23:40 عصر
1- وقتی اطلاعات زیاد بشه BACKUP گیری مشکل میشه
2- چطوری میشه این امکان Buffered Transaction رو فعال کرد

مهدی کرامتی
چهارشنبه 23 اردیبهشت 1383, 23:47 عصر
چطوری میشه این امکان Buffered Transaction رو فعال کرد
راهنمای خود DBISAM‌ را ببینید.

omid_delphi2
پنج شنبه 24 اردیبهشت 1383, 02:25 صبح
با سلام خدمت اساتید
ظاهرا دوستانی که از یک محصول تعریف میکنند کار تخصصی و حرفه ای با آن را تست نمیکنند و تنها به مستندات محصول اکتفا میکنند
بنده هم به همین دردسر دچار شده ام.فایلهای dbisam به هنگام قطع برق و یا هنگ کردن کامپیوتر شدیدا صدمه میبینند حتی اگر از امکان buffered transaction هم استفاده کرده باشید(من کرده ام) و متدهای repair و رverify نیز در اینگونه مواقع کار ساز نیستند مخصوصا اگر قطع برق در هنگام post هم اتفاق بیفتد که دیگه واویلا
به نظر بنده استفاده از متدflush buffer بعد از هر عمل post تا حدودی از مسائل فوق میکاهد
ولی در نهایت این مشکلات وجود دارد و برای رهائی از آنها باید از یک database مانند interbase استفاده کرد

مهدی کرامتی
پنج شنبه 24 اردیبهشت 1383, 06:41 صبح
میشه توضیح بدید چطوری از این امکان استفاده کرده‌اید؟

parhizkar2000
جمعه 25 اردیبهشت 1383, 00:04 صبح
وقتی بانکها خراب میشه اصلا برنامه بالا نمیاد که بخواهی بانکها رو بازسازی کنی بعد اپراتورها هم صلاح نیست که بتونن از برنامه DBSYS که مستقیم به بانکها دسترسی پیدا کنند
ولی من یه پیشنهاد دارم که تا حدودی احتمال خرابی رو میاره پایین واونا اینکه یه تیکه برنامه بنویسی که مثل برنامه اسکرین سرور باشه یعنی تست کنه تا یه زمان معینی اگه کاربر از برنامه استفاده نکرد یا بانکها رو ببنده و بعد موقعی که کاربر کلیدی رو زد و یا فرم فعال شد بانکها رو دوباره باز کنه و یا اینکه از برنامه خارج بشه
راه حل دیگه ای هم اگه بنظر تون میرسه بگید . ضمنا چطوری میشه راه بالا رو استفاده کرد؟

مهدی کرامتی
جمعه 25 اردیبهشت 1383, 00:17 صبح
شما میتونید جداول رو تو یک Try .. Except باز کنید (توسط متد Open). اگر Exception داد و خطای Exception مربوط به خرابی داده ها بود Table‌ ها رو Repair کنید.

saeed_82
جمعه 25 اردیبهشت 1383, 09:50 صبح
جناب آقای دلفی اسیستانت عزیز
ما این DBISAM رو از کجا میتونیم بگیریم

ali643
جمعه 25 اردیبهشت 1383, 11:21 صبح
فروشگاه برنامه نویس
Client/Server با سورس 35000 تومان :موافق: :موافق:

omid_delphi2
شنبه 26 اردیبهشت 1383, 08:57 صبح
با سلام خدمت آقای کرامتی و تشکر بخاطر توجه ایشان
تمام این کارهائی را که گفته اید انجام داده ام.حتی متد های repair و verify را در یک برنامه مجزا نوشته و در اختیار اپراتور قرارداده ام و لی فایده نداشته.چون در برخی مواقع حتی این متدها نیز کار نمیکند و در مواردی هم که کار کرده یا تعداد از رکوردها حذف شده و یا برخی رکوردها با اطلاعات نامفهوم(آشغال) پر شده است
حالا شما میگوئید چه کار کنیم؟
یک برنامه ای نوشته ایم ولی کلی به دردسر افتاده ایم.من که به بن بست رسیده ام

Mahdi_S_T
شنبه 26 اردیبهشت 1383, 12:57 عصر
استفاده از برنامه هایی که امتحان خود را پس نداده برای جنبه تجاری .دیگر همین است :cry:

parhizkar2000
شنبه 26 اردیبهشت 1383, 23:24 عصر
من هم مشکل داشتم که متدهای Repair و Verify کار نمی کرد اما یه Database رو فرم قرار دادم و بانکها رو بهش ربط دادم و مشکل حل شد ولی در کلیه مواقع اطلاعات رو درست بر می گردونه البته تو برنامه Dbsys ولی تست نکردم که تو خود برنامه درست کار میکنه یا نه
آقای دلفی اسیستنت توضیح ندادند که چطوری buffered transaction رو فعال کنیم و چه امکانی در اختیار بانکها میذاره ؟

مهدی کرامتی
یک شنبه 27 اردیبهشت 1383, 00:19 صبح
DBSYS هم در واقع از همین متدها استفاده میکنه.

در مورد Buffered Transaction، همانطور که قبلا گفتم به راهنمای DBISAM مراجعه کنید.

parhizkar2000
شنبه 16 آبان 1383, 22:27 عصر
یه مشکل دیگه هم هست اینه که بعد از اینکه یک رکورد رو وارد کردی و توسط متد post اون رو ذخیره کردی دوباره با قطع برق رکورده بعد از repair از دست میره
آقای دلفی اسیستنت لطفا جواب بدید

baabi
یک شنبه 17 آبان 1383, 21:57 عصر
آقای اسیستنت میشه در مورد Try .. Except این Table ها مثال بزنید که کمتر دچار مشکل بشیم؟[/quote]

دنیای دلفی
دوشنبه 18 آبان 1383, 16:29 عصر
جناب آقای کرامتی اگر میشه به صورت یک مثال در مورد بهترین حالت استفاده از Dbisam برای اینکه بالاترین ایمنی را داشته باشه ارائه دهید . منظور در هنگام ذخیره کردن یا حالات دیگر چون ظاهرا زیاد با این پکیج کار کردید .

ممنون می شم اگر راهنمایی کنید .


موفق و پاینده باد خوبان
:sunglass:

Delphi KDE
سه شنبه 19 آبان 1383, 02:09 صبح
جناب آقای کرامتی اگر میشه به صورت یک مثال در مورد بهترین حالت استفاده از Dbisam برای اینکه بالاترین ایمنی را داشته باشه ارائه دهید . منظور در هنگام ذخیره کردن یا حالات دیگر چون ظاهرا زیاد با این پکیج کار کردید .

جناب اقای کرامتی در صورت امکان لطف کنید مثال بزنید

Mahdi_S_T
سه شنبه 19 آبان 1383, 17:10 عصر
من هم خیلی مایلم برای این مورد مثالی داشته باشم . ب تشکر

MiRHaDi
سه شنبه 19 آبان 1383, 19:41 عصر
سلام
استاد کرامتی ظاهرا سرشون شلوغه
فکر کنم بعد از هر تغییر برای ایمنی باید یک بار بافر رو توی فایل منتقل کنیم
ولی سرعت میاد پایین گاهی !
بای

parhizkar2000
سه شنبه 19 آبان 1383, 21:25 عصر
مشکلی حادتر اونه حتی بعد از بستن و دوباره باز کردن بانک دوباره بعد از بازسازی رکوردها ی آخری که وارد شدند از بین می روند.
تکه آخر قسمت ذخیره سازی بصورت زیر است.
Table.post
Table.Refresh
Table.active=false
Table.active:=true
بعد از این دستورات که کامپیوتر رو رست می کنم و دوباره بانکها رو بازسازی می کنم همین رکورد آخری که ذخیره شده خذف می گردد.

parhizkar2000
پنج شنبه 21 آبان 1383, 23:51 عصر
آقای کرامتی خوبیت نداره شما که این همه مقاله در باره DBISAM نوشتید . از اون پشتیبانی نمی کنید و همینطوری رهاش کردید. یه چیزی بگید :wink:

مهدی کرامتی
جمعه 22 آبان 1383, 00:02 صبح
1- عمو پرهیزکار، DBISAM رو من ننوشته ام که پشتیبانی اش کنم.

2- اون موقع ها که اون مقالات رو نوشتم حس و حال بیشتری از الان داشتم، وقتم هم بیشتر آزاد بود.

3- مگر کس دیگری نیست که که بتواند راهنمای DBISAM را مطالعه کرده و سوالات بقیه را پاسخ دهد؟ مگر کسی انگلیسی بلد نیست که بتواند راهنمای DBISAM را مطالعه کند؟ کسی که واقعا میخواد یاد بگیره باید زحمت هم بکشه، نه اینکه از دیگران طلبکار باشه.

MiRHaDi
جمعه 22 آبان 1383, 05:47 صبح
سلام
خود کامپوننت رو که نداریم !
یکی زحمت بکشه راهنماشو برام بفرسته ! بشینم بخونم سوالای ملت شهید پرور بی جواب نمونه لا اقل :)
قربان همه

مهدی کرامتی
جمعه 22 آبان 1383, 13:01 عصر
راهنما و ابزارهای جانبی بهمراه نسخه Trial از سایت اصلی (http://www.elevatesoft.com) قابل دریافت است.

parhizkar2000
سه شنبه 21 تیر 1384, 21:45 عصر
من این امکان ترانسیشن رو هم با گزینه استارت و کومیت امتحان کردم ولی نتیجه ای در بر نداشت .یعنی واقعا این مسله قطع برق توی دی بی سم پیش بینی نشده

مهدی کرامتی
چهارشنبه 22 تیر 1384, 00:37 صبح
یک کامپوننت DBISAMSession بر روی صفحه گذاشته و مشخصه ForceBufferFlush آن را برابر True قرار دهید.

اینکار تا حدود زیادی جلوی خرابی های فوق را میگیرد.

دنیای دلفی
چهارشنبه 22 تیر 1384, 09:07 صبح
همچنین شما می توانید از متود Repair این BDE استفاده کنید

Mahdi_S_T
چهارشنبه 22 تیر 1384, 11:36 صبح
اما در بعضی مواقع Repair کارایی دارد

دنیای دلفی
چهارشنبه 22 تیر 1384, 11:44 صبح
شما می توانید قبل از استفاده از repair یک بار بانک را Optimize کنید .
مطمئن باشید که مشکلی پیش نمی آید و حتما بانک درست می شود البته باید خاصت Transation را فعال کنید

مهدی کرامتی
چهارشنبه 22 تیر 1384, 13:06 عصر
Repair نمیتواند رکوردهای از دست رفته را بازیابی کند، فقط جداول را برای کار مجدد آماده میکند و ساختار تخریب شده را اصلاح میکند.

parhizkar2000
پنج شنبه 23 تیر 1384, 22:59 عصر
مسله خرابی بانکها به کنار اینکه بعد از آخرین استفاده از برنامه رکوردهای Post شده ذخیره نمیشن

parhizkar2000
شنبه 25 تیر 1384, 22:39 عصر
بابا یکی نمیتونه بگه ما چه خاکی بر سر کنیم حالا از این DBISAMو قطع برق

parhizkar2000
دوشنبه 27 تیر 1384, 23:24 عصر
با این مشکلمون ظاهرا حل شد
یک کامپوننت DBISAMSession بر روی صفحه گذاشته و مشخصه ForceBufferFlush آن را برابر True قرار دهید.

اینکار تا حدود زیادی جلوی خرابی های فوق را میگیرد.
ضمنا کی میدونه چطور جدیدا میشه نقل قول کرد

دنیای دلفی
سه شنبه 28 تیر 1384, 08:48 صبح
بخاطر اینکه خیالت راحت شود بعد از هر post شما متد fullflashbuffer را صدا بزن این کار اطلاعات تحت کنترل windows را به صورت فیزیکی به هارد دیسک می سپارد

parhizkar2000
پنج شنبه 17 آذر 1384, 23:55 عصر
البته منظورتون همون ForceFlassBuffers است که یکی از متدهای سیسون هست

دنیای دلفی
جمعه 18 آذر 1384, 09:33 صبح
نه منظورم همون fullflashbuffer که مربوطه به Table یا Query است

MNosouhi
چهارشنبه 24 آبان 1385, 12:31 عصر
دیروز با یکی از بچه ها صحبت میکردم ، ایشون هنوز معتقد بودن که Dbisam وقتی برق بره با مشکل برخورد میکنه ، خدمت دوستان عرض کنم که حدود 1 ساله برنام هام رو دارم با DBIsam می نویسم ، در اوایل مشکلاتی وجود داشت (به خصوص وقتی برق می رفت) ، اما الان مدتهاست که دیگه هیچ مشکلی باهاش ندارم ، خاستم تجربیاتم رو با دوستان در میان بزارم تا دیگه کسی نگه Dbisam وقتی برق میره با مشکل برخورد میکنه :
Dbisam در بعضی از مواقع که برق میره جداولش باز نمیشن ، برای اینکه جداول باز بشن باید بهتر با متد های repair و Optimize وVerify جداول اسکن بشن ، مثلا:
Table1.RepairTable
در اینصورت حتما جداول باز میشن ، اما خوب ممکنه که یکسری از اطلاعات حذف شده باشن ، برای اینکه در این مواقع اطلاعات حذف نشه همانطوری که دوستان اشاره کردن باید خصوصیت fourcebufferflash عنصر Session رو True کرد . با این کار حتی اگر برق هم بره هیچ اطلاعاتی حذف نخواهد شد ، اما خوب ، در موارد بسیار نادری ، یه مشکل دیگه بوجود میاد ، و اون هم اینه که وقتی برق بره و پس از اسکن کردن برنامه یکسری رکورد خود به خود اضافه میشن ، برای حل این مشکل یه فیلد به جدولتون اضافه کنید ، نامش رو مثلا FieldTest بزارید . نوعش رو SmallInt و مقدار پیش فرضش رو مثلا 111 بگزارید . حالا هر بار که برنامه رو اسکن می کنید با استفاده از عنصر DBISAMUpdateSQL تمامی رکوردهایی که فیلدFieldTest شون مقدار 111 نداره را حذف کنید (توضیح اینکه وقتی رکوردها خود به خود اضافه بشن ، فیلدها مقادیر پیشفرضشون رو نمیگیرن): این هم کدش :

DBISAMUpdateSQL1.SQL[ukDelete].Clear;
DBISAMUpdateSQL1.SQL[ukDelete].Add('delete from "'+YourDataBasePath+'YourTableName"');
DBISAMUpdateSQL1.SQL[ukDelete].Add('where FieldTest=null or FieldTest<>111');
DBISAMUpdateSQL1.SQL[ukDelete].Text:=DBISAMUpdateSQL1.SQL[ukDelete].Text;
DBISAMUpdateSQL1.Apply(ukDelete);

با رعایت نکات مذکور ، دیگه هیچ مشکلی با برق رفتن ندارید.
موفق باشید.