# پایگاه‌های داده > سایر پایگاه‌های داده > Foxpro >  با قطع برق ناگهانی چیکار میشه کرد؟

## س.حمیدیانفر

سلام 
آقا ما یه سیستم حسابداری داریم که از چند تا جدول اندیکس شده استفاده میکنه حالا فرض کنید وسط کار با برنامه وقتی یکی از جداول مهم وحیاتی نرم افزار رو اندکس کردیم یه دفعه برق بره یا باطری کامپیوتر نوت بوک تمام بشه  :roll:  :roll:  :roll: 

تو این گیرو دار فکر میکنید چی میشه ؟

عرض میکنم . خوشبختانه یا متاسفانه این مشکل برای یکی از برنامه های بنده پیش آمد  و با کمال تعجب وقتی دوباره برنامه رو اجرا کردم دیدم ای دل غافل اصلا به هیچ عنوانی جدول عزیزمون use  نمیشه و نمیتونیم ازش استفاده کنیم و مرتبا خطای آسیب دیدن فایل اندیکس رو میده حالا از دوستان عزیز خواهش میکنم راه حل های پیشنهادی خودشون رو برای حل این مسئله بفرمایند 
البته بنده خدایی یه روز بهم گفت اگه با این مشکل مواجه شدی باید اندیکسهارو دوباره بسازی ولی من چون خیلی خیلی اِند فاکسپرو هستم (آره جون خودت) فقط بلدم تو فاکسپرو تحت داس اونم با دستور ساده index on ... ایندکس بسازم ولی نمیدونم اگه یه جدولی تو یه دیتا بیس ! وجود داشته باشه  ما چطوری میتونیم فایل اندیکس دیتا بیس  رو دوباره بسازیم
؟؟؟؟ 

بخشید

----------


## binyaz2003

والا با قطع برق که نمیدونم چیکار باید کرد اما برای ایندکس ساختن فکر میکنم وقتی برای یک فیلد در قسمت طراحی بانک ایندکس رو انتخاب کنیم
خودش فایل رو میسازه!

----------


## س.حمیدیانفر

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

----------


## Afshinpour

حمید جان منظورت رو من راستش دقیقا متوجه نشدم. 

ایندکس ها رو به عنوان (free table) درست میکنی درسته ؟ میتونی همون دستور INDEX ON  رو 2 بار وارد کنی و به قول معروف یک فایل رزرو درست کنی و اون رو در همچین مواقعی رینیم کنی. 

ولی بهتری کار اینه که توی آپشن های نوت بوک تنظیم کنی که وقتی باطری به مثلا 30% آخر رسید آلارم بزنه و وقتی به 10% رسید وارد استند بای بشه که همچی بلایی سر برنامه ها نیاد.

برای کامپیوتر های معمولی هم که عزیز دلم UPS رو برای همین منظور درست کردن.

توی هلپ فاکس پرو نگاهی به دستور SET AUTOSAVE  بنداز تقریبا به موضوع سوالت میخوره

----------


## س.حمیدیانفر

ممنون   :wink:

----------


## amin panahi

به نظر من می تونی فایل های index ت رو یه جایی دیگه کپی کنی و هر بار که برنامه اجرا می شه اونو با دستورات فاکس دوباره توی اون پوشه ای که میخوای کپی کنی . این طوری اگه فایل های ایندکست آسیب دید هر بار خود برنامه اونا رو بازیابی می کنه .

----------


## س.حمیدیانفر

ممنون

----------


## kia1349

البته پس از کپی دستورات برای بهنگام کردنش باید از دستور reindex هم استفاده کنی 
من معمولا برای همچین مواقعی (مثلا در نمایشگاه کتاب که مدام قطع برق داره) بنکم رو یکبار use میکنم تا بسته بشه و اصطلاحا داده ها توش flush بشه و بعد دوباره اونو باز میکنم هرچند سربار داره ولی در عوض خیلی بهتر از پریدن اطلاعات و خراب شدن ایندکس هاست

----------


## b_tayefi

دوست عزیز اگر بانک شما خراب بشه اصلا  use نمیشه که بتونید index بسازید یا reindex کنید یکی از موارد داشتن فایل fptاست وقتی این فایل را از dbfاصلی جدا کنید و در مسیری دور از دسترس قرار دهید بانک شما با نمیشود  

راه حل : این مشکل در قطع برق یا reset شدن سیستم سرور ما در نیروگاه .... اتفاق افتاد و ما بکمک نورتون یوتیل در داس و اگر اشتباه نکنم دستور fix file یا  file fix  انرا اصلاح کردیم   :lol: 

اما در نرم افزار های طراحی شده برای بهتر و سریعتر شدن کار منویی تحت عنوان باز سازی شاخصها داریم که دران توجهی به وجود شاخص نمیشود و شاخصهای لازم از نو ساخته میشود و بانکها در انتها دوباره با شاخصها باز میگردد و همجنین در ابتدای اجرای برنامه وجود بانکها و شاخصها تست شده ( در مسیر مربوطه ) و در صورت نبودن بانکی پیغام لازم صادر شده و در صورت نبودن شاخص بدون پیغاو به کاربر ساخته میگردد .

توجه بین reindex و index on تفاوتی وجود دارد که با تجربه و انهم مخصوصا فایلهای fpt متوجه میشوید

----------


## foxerboy76

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

----------


## arash2005

سلام بر همگی
با عرض پوزش از مدیر سایت که در کار ایشان دخالت میکنم .
در مورد قطع برق اگر شما بهد از یک سری replace در بانک دستور flush رو بزارید هیچوقت در زمان قطع برق اطلاعات شما بهم نمیریزد .
موفق باشید

----------


## javad_hosseiny

دستور فلاش باعث انتقال اطلاعات از جداول که بصورت موقت در حافظه رم نگهداری شده بر روی هارد می شوند (البته این نگهداری جهت افزایش سرعت کار است ولی خوب به هنگام برق رفتن باعث ضرر می شود)
اما مشکل بر روی فایلهای ایندکس است 
(در مورد خوب نحوه عملکرد همانطور که دوستان نیز گفتند بهترین کار تست باز شدن جداول و فعال شدن ایندکس های در ابتدای برنامه (همان قسمت که برنامه نویسان تمامی جداول مورد نیاز را در ناحیه کاری مختلف (select) باز می کند) کنترل کند که بر اثر باز نشدن (تابع used) و تابع (IDXCOLL(1)  و ایجاد خطا (on error) توسط تمهیداتی (مثلا از روی فایل خراب ابتدا پشتیبان بگیرد) و سپس توسط دستور create جدول جدید باز کند (در صورت خرابی جدول اصلی) و یا خرابی فایل ایندکس نیز با استفاده از دستور index on (که بهتر از reindex که در اینگونه موارد است) اینکار انجام شود
و اما در صورتی خود جدول آسیب دیده باشد (که این امر معمولا به هنگام خرابی فایل های cdx (ایندکس مرکب) و یا جداول که دارای فیلد یادداشت memo هستند بیشتر بوجود می آید)
در این صورت شما باید با استفاده از توابع سطح پایین فایل (دستورات fopen,fwrite,fseek,...) فایل جدول را باز کنید و تغییراتی در ساختار جدول (هدر فایل) ایجاد کنید که معمولا بیشتر قسمت ابتدای جدول (تنظیمات مربوط به تعداد رکورد جدول ) و یا قسمت معرفی فیلدها را تصحیح نمایید (و البته قبل از باز کردن مجدد فایل تغییر داده شده فایل cdx مربوطه را حذف کنید تا باز کردن جدول آن را مجددا ایجاد نمایید) 
(نکته: از این روش بنده برای رفع اشکالات بوجود آمده (بصورت روتین و توسط خود برنامه) در جداول (مخصوصا cdx ها و fpt ها) استفاده می کنم و تاکنون مشکلی نداشتم و شاید دوستان دیگر الگوریتم های دیگری برای این کار داشته باشند)

----------


## mehran_337

در برنامه اخیرم ابتدای برنامه فایلها برای باز شدن ابتدا خرابی را چک می کنند بعد باز می شوند اما وقتی خرابی فایل را تعمیر می کنند مشاهده شد که یکی فایل این پیغام را می دهد که :  ابتدا باید cdx را پاک کنید بعد فایل را باز کنید.
حالا می خوام بدونم من اگه cdx سالم را در جایی کپی کرده با شم (مثلا با 100 تا رکورد)  و بعد از ثبت اطلاعات (مثلا 200 تا رکورد هم بعدا اضافه بشه) cdx را کپی کنم در مسیر برنامه و reindex کنم مشکلی در نشان دادن اطلاعات پیش نمیاد؟

----------


## mehran_337

دوباره سلام
در ادامه تاپیک بالای خودم ، در سایت یونیورسال دنبال جواب خودم بودم
یه برنامه توپ پیدا کردم . این برنامه مسیری رو که جداول قرار دارند از ما می گیره . بعد توی اون جداول هر چی تگ ایندکس باشه به همون صورت در یک فایل prg ایجاد می کنه.
خب . وقتی جداولمون به درستی طراحی شد در اخر کار از این برنامه استفاده می کنیم و prg که می ده رو بعنوان بازسازی فایلها به کار می گیریم
http://www.universalthread.com/Downloads/makecdx.zip

----------


## pooyeshpajooh

این برنامه رو برای رفع عیب فایلهای خراب امتحان کن

----------


## rahro

ضمن تشکراز دوستان 
من در چند مورد گزارشی در خصوص از کارافتادن برنامه داشتم در حین بازدید مشاهده کردم که نام تیبلهای مربوطه از دیتابیس کلی پاک شده به عبارتی هر جند در پوشه DATA که محل ذخیره دیتابیس و تیبلهای من است دیتابیس مربوط و همچنین تیبلها وجود دارند ولی نام تیبلهای مربوطه در لیست دیتابیس من وجود ندارد و تنها نام دیتابیس خالی وجود دارد برای ترمیم مجبورا" تمامی فایلهای ایندکس رو حذف و تیبلهای مربوطه را بصورت ازاد باز کنم و دیتابیس مربوطه حذف و مجددا به وجود اورم 
حال سوال 
1- علت این موضوع چیست با توجه به اینکه از یوپی اس استفاده میشود

----------


## rezaTavak

من تا حالا همچین مشکلی نداشته ام یکی از آنهایی که خراب شده منظور dct,dbc,dcx را اینجا قرار دهید.

----------


## rahro

> من تا حالا همچین مشکلی نداشته ام یکی از آنهایی که خراب شده منظور dct,dbc,dcx را اینجا قرار دهید.


متاسفانه فعلا ندارم 
باید دوباره صبر کنم تا اتفاق بیفتد

----------


## hamed_m

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

----------


## mehran_337

حامد جان سلام!!
هیچ معلومه کجایی؟ تکه کدهای جالب می خواهیم!!!!!!

----------

