View Full Version : مشکل خرابی بانک در هنگام قطع برق درVFP9
م.معین
پنج شنبه 02 آذر 1385, 11:13 صبح
وقتی که هنگام کار بابرنامه برق قطع بشه و یا مثلا با ALT+F4 از برنامه خارج بشید ( یعنی وقتی که Tabel باز دارید ) ممکنه 3 مشکل زیر بوجود بیاد :
1- main.dbc خراب بشه و پیغام بده : Main.dbc was crupted
2- یک Tabel خراب بشه ( هدرش بپره ) و پیغام بدن Tabel not a database file ویا Tabel x was crupted
3- index بانک بهم بخوره و پیغام بده که باید index رو دوباره مرتب کنید
که در هر حالت نمیشه وارد برنامه شد
چکارش میشه کرد ؟؟؟!!! اگه کسی راهنمائی کنه خیلی ممنون میشم
Javadghari
پنج شنبه 02 آذر 1385, 11:29 صبح
برای ترمیم tabel ها می تونید از Norton Utility استفاده کنید .
mehran_337
پنج شنبه 02 آذر 1385, 22:15 عصر
در مورد این موضوع ده ها تاپیک در همین بخش موجوده یه سرچ کوچولو جواب همه سوالاتتو می ده
rezakhj
شنبه 04 آذر 1385, 13:01 عصر
در بچ فایل ایجاد شده برای اجرای برنامه
ابتدا همه ایندکسها را پاک کنید و در ابتدای برنامه همه ایندکسها را دوباره سازی کنید البته کمی وقت گیر است (اگر تعداد رکوردها زیاد باشد) ولی با سرعت این کامپیوترها اصلا مشکلی نیست .
در مورد برنامه های تحت داس بعد از replaceها یا دستور gather حتما دستور flush فراموش نکنید اگر دستور فوق را اضافه نکنید بعد از خروجهای ناگهانی مثل قطعی برق و غیره نه رکوردی و نه بانکی خواهید داشت علی الخصوص هنگام ثبت اطلاعات و بازبودن جداول
append blank
gather memvar
flush
یا
append blank
replace myfield with myvar
flush
mehran_337
شنبه 04 آذر 1385, 13:56 عصر
البته مشکل ایشان خرابی بانک بعد از قطع برق بوده که دوستان زیادی به این موضوع اشاره کردند
rezakhj
یک شنبه 05 آذر 1385, 11:01 صبح
البته منظورم اینست که برای آینده باید این کارها را انجام داد
فکر کنم منظور ایشان از طرح سوال این نبود که بانکم خراب شده چکار کنم تصور من اینست که منظور ایشان این بود که برای رفع مشکلاتی این چنینی چکار باید کرد ؟ این مشکلات در اوایل کار خیلی برایم پیش میامد مثلا اپراتورها کامپیوتر را ریست میکردند یا برق قطع میشد و ... تا اینکه دستور FLUSH را استفاده کردم .
rezaTavak
یک شنبه 05 آذر 1385, 13:13 عصر
در مورد کلاسهای فاکس پرو چه عملی انجام میدهید؟ کلاسی مانند txtBtn
rezakhj
دوشنبه 06 آذر 1385, 08:06 صبح
مطمئن باشید که در کلاسهای ویژوال فاکس پرو آن احتمالات در نظر گرفته شده و نیازی به دستور اضافه ندارد ولی اگر خواستید دکمه دیگری برای اضافه و یا ویرایش اطلاعات تعریف کنید بعد از replace و یا gather حتما flushاستفاده کنید . من مدت زیادی با این مشکل درگیر بودم
rezakhj
دوشنبه 06 آذر 1385, 08:49 صبح
البته در جریان باشید که دستور flush کمی سرعت سیستم را کاهش میدهد زیرا اطلاعات در بافر نگهداری میشوند و در فرصت مناسب روی دیسک ذخیره میشوند این عمل در بانکهائی با رکوردهای بالا خیلی ارزش دارد علی الخصوص در محیط شبکه مثل بانکها ( منظور بانک ملی - سپه - تجارت و... است ) که اپراتورهای زیادی همزمان اطلاعات را وارد می کنند و بانک باید منتظر اپراتور بعدی باشد و در صورتی که اطلاعات روی دیسک ذخیره شود چون این عمل وقت گیر است اشکال در کار اپراتور ایجاد میشود به همین دلیل اطلاعات در ابتدا در بافر ذخیره شده و زمانی سر cpu خلوت است اطلاعات در دیسک سخت ذخیره میشود و چون بانکها روی سرور اصلی هستند و اپراتور با reset کردن سیستم دخل و تصرفی در جداول ندارد استفاده از flush خوب نیست . ولی در سیستمهای تک کاربره که بانکها در روی سیستم کاربر وجود دارد که اغلب برنامه های ما به این شکل است بهتر است و حتما از flush استفاده شود .
rezaTavak
دوشنبه 06 آذر 1385, 09:56 صبح
اما دقیقا من همیشه از بانک txtbtn استفاده می کنم و این مشکل در ۳ ساله اخیر برای بیش از ۱۰۰ نسخه ۲ بار روی داده است!
rezakhj
دوشنبه 06 آذر 1385, 11:46 صبح
آقای توکل من کلاس فوق را کاملا بررسی نکردم که ببینم از flush استفاده شده یا نه ولی مطمئنا چون این کلاسها برای سیستمها و نرم افزارهای تحت شبکه طراحی شده اند قطعا از flush استفاده نمی کنند چون در این حالت ثبت اطلاعات وقت گیر است ولی اگر شما احساس می کنید که با رفتن برق یا ریست کردنهای اپراتور در بانک اشکال ایجاد میشود در کلاس فوق در قسمت add و edit بعداز replace و در صورت استفاده از gather از دستور flush استفاده کنید ولی اگر به سرور متصل هستید و برنامه اصلی روی سرور بوده و سرور از نظر ups مشکلی ندارد لزومی به استفاده نیست چون سرعت نرم افزار شما را کاهش میدهد. علی الخصوص در بانکهائی با رکوردهای بالا که اصلا جایز نیست ( البته در شبکه ) ولی در حالت تک کاربره دقیقا برعکس حتما از flush استفاده کنید چون در بانکهای بزرگ با خروجهای ناگهانی بانک دچار اشکال خواهد شد و هیدر دچار اشکال میشود . من زیاد برخورد کردم
rahro
دوشنبه 06 آذر 1385, 13:14 عصر
سلام
منظورتون از "چون در بانکهای بزرگ با خروجهای ناگهانی بانک دچار اشکال خواهد شد " چیه ؟!!!!
فکر میکنم فقط تلرانس و برق رفتگی باعث تخریب هدر فایل میشه و این گزینه نایابه!
rezakhj
سه شنبه 07 آذر 1385, 08:09 صبح
یعنی در جداولی با تعداد رکوردهای بالا یا حجم بالا در صورت برق رفتگی یا ریست کردن
علی الخصوص زمانی که در حالت replace باشیم امکان از دست دادن هیدر به مراتب بیشتر از جداول با رکوردهای پائین یا حجم پائین است و این مورد در جداول دارای فیلدهای زیاد نیز بیشتر میشود
rezaTavak
سه شنبه 07 آذر 1385, 08:16 صبح
هدر خراب نمیشه بلکه در ادامه جدول رکوردها قرار می گیرد. و اگر از FLUSH استفاده کنید اینها پاک خواهد شد. یعنی روی هارد نوشته میشه اما توی جاهایی که رکورد های واقعی هست نه.
به کدی که برای اصلاح یک جدول خراب نوشته ام توجه کنید توی اون اگر حجم فایل از اونی که هدر نشون میده بیشتر باشه حجم را اصلاح می کنه!
mehran_337
سه شنبه 07 آذر 1385, 14:54 عصر
کدوم کد؟ می
--------------------
کدوم کد؟ می شه لینکشو بزارین؟
عفت بزرگه
پنج شنبه 16 آذر 1385, 16:34 عصر
شما در onshutdown دستور بسته شدن کل دیتابیس رو بدید . حتی برق رفتگی هم تکون نمیده دیتابیس رو
mehran_337
شنبه 18 آذر 1385, 13:10 عصر
آخه وقتی برق بره onshoutdown اجرا نمی شه
عفت بزرگه
شنبه 18 آذر 1385, 13:52 عصر
شما نمی خواهد قربون کسی بری اینرو تست کن بعد جواب بده
mehran_337
یک شنبه 19 آذر 1385, 14:14 عصر
چیزی برای تست نمی بینم یا شاید هم من اشتباه می کنم.
اگر ارسال بنده توهین آمیز بود به رسم قوانین این سایت و به احترام مدیران محترم عذر خواهی می کنم.
در ضمن از پاسخ پر از متانت حضرتعالی هم سپاگزارم
Mohammad_Mnt
یک شنبه 19 آذر 1385, 17:22 عصر
شما در onshutdown دستور بسته شدن کل دیتابیس رو بدید . حتی برق رفتگی هم تکون نمیده دیتابیس رو
این دستور چه موقع می تواند اجرا شود ؟
mehran_337
سه شنبه 21 آذر 1385, 08:55 صبح
وقتی که فاکس بتونه به درستی quit بشه . مثل شات دان ویندوز
rahro
سه شنبه 21 آذر 1385, 09:10 صبح
به نظر من عملی نیست !
Mohammad_Mnt
سه شنبه 21 آذر 1385, 11:16 صبح
وقتی که فاکس بتونه به درستی quit بشه . مثل شات دان ویندوز
وقتی برق نباشد که فاکس به درستی quit نمی شود :افسرده:
mehran_337
سه شنبه 21 آذر 1385, 16:37 عصر
منم دارم همین و می گم دیگه .
اما دوست ما "عفت" این راه و پیشنهاد کردن و بنده این توضیحات
mehran_337
سه شنبه 21 آذر 1385, 16:38 عصر
منم دارم همین و می گم دیگه .
اما دوست ما "عفت" این راه و پیشنهاد کردن و بنده این توضیحات و دادم ایشون دلخور شدند
new_day
سه شنبه 21 آذر 1385, 21:51 عصر
بهترین راه استفاده از ups از نوع online مخصوصا برای سرور - ما الان از این روش استفاده میکنیم
که یکم هزینه بره اما مطمئن هستش ضمنا شما میتونید از خود فایلهای dbc که 3تا فایل هستش
کپی بگیری اگه خراب شد اونا برگردونی و شاخص ها را هم که میتونید راحت بازسازی کنی اگه خود جداول خراب بشه با برنامه که دوستان زحمت کشیدند و توی همین سایت گذاشتند اونا را درست کنی من برای خطرهای احتمالی و مشکلاتی که ممکنه برای فایلها اتفاق بیوفته یه برنامه برای سرور نوشتم که تایمر داره علاوه بر نشان دادن تبلیغ و ساعت و تاریخ هر 45 دقیقه یکبار با دستور copy to از اطلاعات برنامه پشتیبان تهیه و فشرده میکنه همانطور که میدونید این دستور
با فایلهای باز کار میکنه و نیازی نداره کاربران از برنامه خارج بشند
عفت بزرگه
سه شنبه 21 آذر 1385, 22:28 عصر
یعنی یکیتون حاضر نیست حرف منو تست کنه ؟ عجب آدمهایی هستین شماها
new_day
چهارشنبه 22 آذر 1385, 18:32 عصر
این که شما میگید من هم شنیدم اما در مورد بعضی از مادربرد ها فکر نمیکنم همه مادربردها چنین سیستمی داشته باشه که بسیار سریع تمام فایلها را ببنده بقول شما باید امتحان کرد
عفت بزرگه
چهارشنبه 22 آذر 1385, 21:24 عصر
لطفا امتحان کنید . این مشگل در 99 درصد برای همه حله
rahro
پنج شنبه 23 آذر 1385, 08:33 صبح
یعنی یکیتون حاضر نیست حرف منو تست کنه ؟ عجب آدمهایی هستین شماها
سلام
کاربر محترم:
همانطور که اشراف دارید اولا در70 درصد مواقع (این درصد رو خودم تخمین زده ام ) با قطع برق , بانکهای اطلاعاتی آسیب نمی بینند حال خودتان وجدانتان را قاضی قرار دهید چطور یک کاربر میتونه این عمل قطع برق رو تست کنه ؟ فکر میکنم ضرری که در خصوص مشکلات سیستم ویندوز و اتلاف وقت پیش میاد کم هزینه ای نباشد؟
دوما" من از این دستور استفاده کرده ام و در برنامه ام وجود داره ولی باز گزارشی در این مورد داشته ام که فکر میکنم اون هم مربوطه به 30 درصد باقی مانده است
سوما" شما لطف کنید علمی توضیح دهید سیستم در حین قطع ناگهانی برق چگونه میتونه این فرمان را اجرا کنه ؟ قبول کنید تائیدش خیلی مشکله
رهرو
rezaTavak
پنج شنبه 23 آذر 1385, 10:19 صبح
لطفا امتحان کنید . این مشگل در 99 درصد برای همه حله
منطقی که شما برای این دارید چیست؟
بالاخره یک دلیل باید داشته باشد.
mehran_337
شنبه 25 آذر 1385, 11:17 صبح
در قطع برق باز بودن بانک به خرابی بانک منجر نمی شه بلکه تغییر اطلاعات رکوردها که مستلزم تغییر در هدر فایل می شه اگر ناگهانی برق بره منجر به خرابی می شه که البته با کدهای دوستان قابل تعمیره
اینکه تست نکردیم چرا ! تست کردیم مثلا من در دستور on shoutdown نوشتم که یک مقداری در یک فایل قرار بده و بعد برق و قطع کردم که مطمئن بشم چون موارد اشاره شده خیلی با تاکیید بود ولی با منطق من جور در نمیومد.
به هر حال اگر یه همچین کاری می شد کرد یا به قولی اگرماردبورد ها می تونستند کمی برق و نگه دارند تا برنامه فایلهای بازشو ببنده اول از همه مایکروسافت این امکان و برای ویندوز می گذاشت تا وقتی برق رفت ویندوز آسیب نبینه اما همانطوریکه می بینیم وقتی سیستم ریست می شه یا برق می ره ویندوز باید یکبار اسکن کنه تا خرابی ها رو تعمیر کنه
rezaTavak
شنبه 25 آذر 1385, 11:31 صبح
این تکه کد من برای تعمیر است:
********************************************** * * Show Record Number, Length Header, * Length Record, FileSize, * Current File Size * ********************************************** FUNCTION RepairDbf LPARAMETERS tcFileName IF TYPE("tcFileName")<> "C" ? "No Parameter!" RETURN -1 && No parameter! ENDIF LOCAL ARRAY laFileProperties[1,2] LOCAL lnFileLen, lnRecNo, lnLenRec, lnLenHeader ADIR(laFileProperties, tcFileName) lnFileLen = laFileProperties[2] && File Size lnFileHandle = FOPEN(tcFileName,2) IF lnFileHandle < 1 ? FERROR(), ErrorFileLowLevelWork() RETURN -2 && Can't Open File! ENDIF FSEEK(lnFileHandle, 4) lnRecNo = FREAD(lnFileHandle, 4) && Record Number lnLenHeader = FREAD(lnFileHandle, 2) && Length Header lnLenRec = FREAD(lnFileHandle, 2) && Length Record lnRecNo = BytestringToNumber(lnRecNo) lnLenHeader = BytestringToNumber(lnLenHeader) lnLenRec = BytestringToNumber(lnLenRec) && Show Numbers ?"Record Number:", lnRecNo ?"Length Header:", lnLenHeader ?"Length Record:", lnLenRec ? ? ? ?"File Length:", lnFileLen ?"Currecnt Must:", lnRecNo*lnLenRec+lnLenHeader ?"Diffrent is:", lnFileLen - (lnRecNo*lnLenRec+lnLenHeader ) IF lnFileLen - (lnRecNo*lnLenRec+lnLenHeader) <> 0 AND ; MESSAGEBOX("Currect Size file?",16+4)=6 && if filesize not correct and IF Press Yes FCHSIZE(lnFileHandle, lnRecNo*lnLenRec+lnLenHeader) ENDIF FCLOSE(lnFileHandle) RETURN 0 ENDFUNC ************************************************** * THIS FUNCTION GET STRING OF BYTE AND RETURN * EQUVALENT NUMBER * * * ************************************************** FUNCTION BytestringToNumber LPARAMETERS tcStr LOCAL i, lcHex lcHex = "" FOR i = LEN(tcStr) TO 1 STEP -1 lcHex = lcHex + RIGHT(TRANSFORM(ASC(SUBSTR(tcStr,i,1)),"@0"),2) NEXT RETURN EVALUATE("0x" + ALLTRIM(lcHex)) ENDFUNC ************************************************** * * THIS FUNCTION GET STRING OF BYTE AND RETURN * EQUVALENT NUMBER * * * ************************************************** * FUNCTION ErrorFileLowLevelWork LOCAL ARRAY laArray[31] laArray[2] ="File not found" laArray[4] ="Too many files open (out of file handles)" laArray[5] ="Access denied" laArray[6] ="Invalid file handle given" laArray[8] ="Out of memory" laArray[25] ="Seek error (can't seek before the start of a file)" laArray[29] ="Disk full" laArray[31] ="Error opening file" RETURN laArray[FERROR()] ENDFUNC
البته قبلا گذاشته بودم اما پیدا نکردم
rahro
شنبه 25 آذر 1385, 11:37 صبح
این تکه کد من برای تعمیر است:
********************************************** * * Show Record Number, Length Header, * Length Record, FileSize, * Current File Size * ********************************************** FUNCTION RepairDbf LPARAMETERS tcFileName IF TYPE("tcFileName")<> "C" ? "No Parameter!" RETURN -1 && No parameter! ENDIF LOCAL ARRAY laFileProperties[1,2] LOCAL lnFileLen, lnRecNo, lnLenRec, lnLenHeader ADIR(laFileProperties, tcFileName) lnFileLen = laFileProperties[2] && File Size lnFileHandle = FOPEN(tcFileName,2) IF lnFileHandle < 1 ? FERROR(), ErrorFileLowLevelWork() RETURN -2 && Can't Open File! ENDIF FSEEK(lnFileHandle, 4) lnRecNo = FREAD(lnFileHandle, 4) && Record Number lnLenHeader = FREAD(lnFileHandle, 2) && Length Header lnLenRec = FREAD(lnFileHandle, 2) && Length Record lnRecNo = BytestringToNumber(lnRecNo) lnLenHeader = BytestringToNumber(lnLenHeader) lnLenRec = BytestringToNumber(lnLenRec) && Show Numbers ?"Record Number:", lnRecNo ?"Length Header:", lnLenHeader ?"Length Record:", lnLenRec ? ? ? ?"File Length:", lnFileLen ?"Currecnt Must:", lnRecNo*lnLenRec+lnLenHeader ?"Diffrent is:", lnFileLen - (lnRecNo*lnLenRec+lnLenHeader ) IF lnFileLen - (lnRecNo*lnLenRec+lnLenHeader) <> 0 AND ; MESSAGEBOX("Currect Size file?",16+4)=6 && if filesize not correct and IF Press Yes FCHSIZE(lnFileHandle, lnRecNo*lnLenRec+lnLenHeader) ENDIF FCLOSE(lnFileHandle) RETURN 0 ENDFUNC ************************************************** * THIS FUNCTION GET STRING OF BYTE AND RETURN * EQUVALENT NUMBER * * * ************************************************** FUNCTION BytestringToNumber LPARAMETERS tcStr LOCAL i, lcHex lcHex = "" FOR i = LEN(tcStr) TO 1 STEP -1 lcHex = lcHex + RIGHT(TRANSFORM(ASC(SUBSTR(tcStr,i,1)),"@0"),2) NEXT RETURN EVALUATE("0x" + ALLTRIM(lcHex)) ENDFUNC ************************************************** * * THIS FUNCTION GET STRING OF BYTE AND RETURN * EQUVALENT NUMBER * * * ************************************************** * FUNCTION ErrorFileLowLevelWork LOCAL ARRAY laArray[31] laArray[2] ="File not found" laArray[4] ="Too many files open (out of file handles)" laArray[5] ="Access denied" laArray[6] ="Invalid file handle given" laArray[8] ="Out of memory" laArray[25] ="Seek error (can't seek before the start of a file)" laArray[29] ="Disk full" laArray[31] ="Error opening file" RETURN laArray[FERROR()] ENDFUNC
البته قبلا گذاشته بودم اما پیدا نکردم
استاد اگر میشه متن رو جوری اصلا کنید که بصورت عمودی باشی !
rezaTavak
شنبه 25 آذر 1385, 13:36 عصر
این فایلش آخه من توی لینوکس کار میکنم و این مشکل پیش اومده!
rahro
شنبه 09 دی 1385, 10:36 صبح
این فایلش آخه من توی لینوکس کار میکنم و این مشکل پیش اومده!
سلام
بعد از چند وقت بلاخره گزراش خرابی یک فایل بدستم رسید اون رو با برنامه بک آپ اطلاعاتی قبلی درست کردم و فایل رو برای تست نزد خودم نگه داشتم امروز برای تست این نتیجه حاصل شد که
برنامه FOXFIX که یک برنامه اجرایی بود توان اصلاح نداشت .
برنامه Advanced DBF Repair فایل مرا اصلاح کرد.
برنامه dbffix توان اصلاح نداشت
برنامه repairdbf جناب توکل فایل مرا اصلاح کرد
البته دو برنامه اول exe و دو برنامه دیگه prg هستند
از زحمات جناب توکل بخاطر این برنامه زیبایشان کمال تشکر و قدردانی را دارم
رهرو
m_moein
چهارشنبه 23 اسفند 1385, 13:31 عصر
با تشکر از همه دوستان .منظور این بود که کاربر در نزدیکی و دسترس نیست که بشه بانک اطلاعاتیش رو درست کرد البته من خودم نسخه پروفشنال
Advance Data Repair
رو دارم و خیلی راحت خرابی بانک رو رفع میکنم ولی در کد نویسی کلا چکار کنیم که اگر از نظر مسافت امکان سرویس دهی به کاربر نبود مشکل حل بشه و یا حتی پیش نیاد
در ضمن من با ویژوال فاکس 9 کارمیکنم و طیق تجربه خودم نسخه 7 آن این مشکل رو نداشت ؟
mehran_337
چهارشنبه 23 اسفند 1385, 14:32 عصر
نه اینکه برنامه نویس بانک را درست کند خود برنامه این کار را باید انجام دهد.
مثلا متغیر err = .f.
on error stor .t. to err
حالا اگه خطای رخ بده متغیر err مقدارش true میشه.
use tablename
if err
do repairDBF
endif
بجای repairDBF همان برنامه آقای توکل را بزار.
این کار بهتره اول برنامه چک بشه یعنی همه بانکها یکبار در برنامه فوق باز بشن تا اگه مشکلی داشته باشند خودشون تعمیر بشند.
mehdi_doraghi
سه شنبه 14 فروردین 1386, 16:21 عصر
با سلام
اگر چنین اتفاقی رخ دهد اکثر اوقات ویژوال فاکس یک فایل پشتیبان بصورت Temp مانند در شاخه جاری کپی می کند
mehran_337
یک شنبه 23 اردیبهشت 1386, 07:54 صبح
همیشه وجود فایل tmp دلیل بر خرابی جدول نیست.
Esikhoob
جمعه 29 آذر 1387, 18:47 عصر
سلام بعد از گذشت تقریبا 2 سال
برنامه بسیار جالب آقای rezaTavak یعنی repairdbf.prg همه فایلهای DBF را به خط بر میگرداند و برای ما خیلی کمک بود، ولی آیا تمام رکوردهای قابل برگشت را بر میگرداند ؟؟؟
خیر
این DBF را ببینید ، تمام برنامه های تجاری(که من امتحان کردم)،تعداد 9262 record بر میگردانند ولی برنامه repairdbf.prg یک record کمتر برمیگرداند ، یعنی 9261
آقای rezaTavak آیا میتوان این برنامه خوب را طوری اصلاح کرد که مثل برنامه هایی نظیر Advanced DBF Repair آن record اضافه را هم برگردانند؟؟
با تشکر فراوان .
frahimi
شنبه 30 آذر 1387, 07:34 صبح
آیا سایر بانکهای اطلاعاتی هم دچار این مشکل میشوند. منظورم SQL و یا Oracle و غیره است.
Esikhoob
یک شنبه 08 دی 1387, 14:06 عصر
برنامه ای repairdbf.prg و برنامه ای که لینکش را خواهم گذاشت مال موقعی است که آماری که DBF در مورد تعداد رکورد هایش میدهد ، درست نیست.
VFP9 چون این موضوع را امتحان میکند پیغام میدهد، اما ورژن های قدیمی تر امتحان نمیکردند.
و این یک امتحان عالی است.
برای حل مشکل راه درست ، همانطور که این لینک گفته:
http://support.microsoft.com/kb/263902
اینست که این آمار را درست کنیم(که یک عدد است که در header فایل DBF قرار دارد).
در حالی که برنامه RepairDBf.prg فایل را کوتاه میکرد تا با آمار تعداد رکوردها بخواند ، و رکوردها از بین میرفتند.
البته RepairDBf.prg یک اشکال دیگر هم داشت و آن اینکه برای بعضی Table های سالم هم ، می گفت که به اندازه 1 عدد بین رکورد ها اختلاف است که درست نبود .
برای دوستانی که می خواهند از این برنامه سر در بیاورند ، اول باید این بخش را در HELP VFP9 ببینند:
Table File Structure (.dbc, .dbf, .frx, .lbx, .mnx, .pjx, .scx, .vcx)
و این هم برنامه برای کسانی که حوصله ندارند:
rahro
دوشنبه 09 دی 1387, 06:45 صبح
سلام
يعني اين فانكشن دقيق عمل ميكند؟ شما تستش كرديد!؟
Esikhoob
سه شنبه 10 دی 1387, 17:02 عصر
fixheadercount را فقط با 2 فایل خراب تست کردم ، که همان نتیجه ای را میداد که برنامه های تجاری هم همان را میدادند.
منطق برنامه خیلی ساده است ، اگر در مورد آن سئوالی هست ، خوشحال میشوم اگر بتوانم پاسخ بدهم.
باید یک برنامه نویس انگلیسی بداند .الگوریتم این برنامه درست مثل الگوریتمی هست که اون لینک Microsoft گفته ، ولی اول متن نوشته که استفاده از این برنامه بدون هیچ ضمانتی است.
باید بگویم شما دوستان هم اگر این برنامه را با فایلهای خرابتان امتحان کنید ، و نتیجه را با برنامه های تجاری مقایسه کنید (از این نظر که چند رکورد را برمیگرداند) به من کمک بزرگی کرده اید تا با اطمینان بیشتر این را داخل برنامه بگزاریم.
این تکنیک تا حالا همه جور Table خرابی که من دیدم را درست کرده ( از memo استفاده نمیکنم) ، اما این دلیل نمی شود که همه را درست کند ، مگر دلیل منطقی داشته باشیم.
به عنوان تمرین برای اینکه واقعیت را بیشتر معلوم کنیم ، آیا کسی میتواند با :
microsoft visual foxpro 9\Tools\HexEdit
یک فایل TXT را تبدیل به یک فایل DBF کند؟
farhad_shiri_ex
چهارشنبه 11 دی 1387, 23:35 عصر
به نظر من بهتر روش این که از خراب شدن بانکها جلوگیری کرد اینست که ابتدا بدانی که اطلاعات هدر بانکها فاکس به چه ترتیب است وقتی این مطلب را متوجه شدید می توانید خودتان با دستورات سطح پایین فاکس کدی متناسب با بانکهای برنامه خودتان بنویسید
*!* Header Block
*!*
*!* Byte Value
*!* 1 0x02 FoxBASE
*!* 0x03 FoxBASE+/dBASE III PLUS, FoxPro, dBaseIV, no memo
*!* 0x30 Visual FoxPro (with or without memo)
*!* 0x43 dBASE IV SQL table files, no memo
*!* 0x63 dBASE IV SQL system files, no memo
*!* 0x83 FoxBASE+/dBASE III PLUS, with memo
*!* 0x8B dBASE IV with memo
*!* 0xCB dBASE IV SQL table files, with memo
*!* 0xF5 FoxPro 2.x (or earlier) with memo
*!* 0xFB FoxBASE with memo
*!*
*!* 2-4 Date of last update YYMMDD
*!*
*!* 5-8 Number of records LSB-MSB format (see function UnLSBMSB)
*!*
*!* 9-10 Offset to start of data LSB-MSB format, same as HEADER()
*!* (+1 is deletion flag 2Ah if deleted and 20h if not deleted
*!* +2 is the actuall address where the data begins).
*!*
*!* 11-12 Size of record LSB-MSB format (including deletion flag)
*!*
*!* 13-28 Not used
*!*
*!* 29 Bit flags
*!* 1 Structural compound index (FoxPro, Visual FoxPro)
*!* 2 Memo fields (Visual FoxPro)
*!* 3 Database container (DBC) (Visual FoxPro)
*!* 4
*!* 5
*!* 6
*!* 7
*!* 8
*!*
*!* 30 Code Page
*!*
*!* 31-32 Not used
*!*
*!*
*!* Field Blocks - 32 bytes describe each field in the table.
*!*
*!* Byte Value
*!* 1-10 Field name
*!*
*!* 11 OOh
*!*
*!* 12 42h Double , B
*!* 43h Character , C
*!* 44h Date , D
*!* 46h Float , F
*!* 47h General , G
*!* 49h Integer , I
*!* 4Ch Logical , L
*!* 4Dh Memo , M
*!* 4Eh Numeric , N
*!" 50h Picture , P
*!* 54h DateTime , T
*!* 59h Currency , Y
*!*
*!* 13-14 Offset of field from beginning of record, LSB-MSB format
*!* Where the data of this field begins is calculated as:
*!* ASC(DBFHdrByte9)+ASC(DBFHdrByte10)*256+1+ASC(FldHd rByte13)+;
*!* ASC(FldHdrByte14)*256 (same as)
*!*
*!* 15-16 Not used
*!*
*!* 17-18 Field length (non-numeric fields), LSB-MSB format
*!*
*!* 17 Field length (numeric fields)
*!*
*!* 18 Field decimals (numeric fields)
*!*
*!* 19 Visual Foxpro Sum of:
*!* 01h Invisible system column
*!* 02h Null value support
*!* 04h Indicate binary data (Character, Memo, Currency, Integer,
*!* DateTime, Double fields)
*!* Others not used
*!*
*!* 20-32 Not used
*!*
امیدوارم مفید باشد.
Esikhoob
دوشنبه 05 مرداد 1388, 13:00 عصر
بعد از مدتها - در یکی از محلها - چند تا بانک خراب شد ، من هم با استفاده از برنامه خودم درستش کردم ، ولی بانک درست شده بعد از Browse یک رکورد اضافی دارد ، که در عکس میبینید:
ولی برنامه آقای rezaTavak یعنی repairdbf.prg ، در این مورد درست کار میکرد و این رکورد اضافی را نداشت.
ALI RAFFIE
سه شنبه 13 مرداد 1388, 18:04 عصر
من جستجو كردم ولي repairdbf.prg رو در اين سايت پيدا نكردم اگه امكان داره برا دانلود بزارين.
Esikhoob
شنبه 17 مرداد 1388, 13:19 عصر
توی همین تاپیک هست ، در صفحه اول foxpro ،همین تاپیک کنارش عکس یک گیره هست که همه فایل های attach شده در آن تاپیک را در خودش داره.
mostafa_zamani
چهارشنبه 25 فروردین 1389, 09:04 صبح
با اهدا سلام
1- به نظر من احتمال خراب شدن بانک ها در هنگام قطع برق در VFP9 به مراتب بیشتر از VFP7 است !
آیا این نظر مورد تایید دوستان نیز هست ؟
2- دیروز مشتری ام که در اثر قطعی برق جدولهایش خراب شده بود و حسابی عصبانی بود ! به من گفت :
"چرا سایر برنامه ها خراب نمی شوند !؟؟ این برنامه 2 ریال هم نمی ارزد !!! و ... "
من واقعا چه بگویم !!؟؟ ؟؟
ضمن تشکر از همه دوستان گرامی بهترین راه حل برای رفع این مشکل چیست ؟
mostafa_zamani
چهارشنبه 25 فروردین 1389, 10:22 صبح
با اهدا سلام
به نظر من برنامه CMrepair برای تعمیر dbf , dbc نیز خیلی عالی .
http://dl.dropbox.com/u/5571476/CMrepair.zip
لطفا این برنامه را نیز تست کنید و در باره آن نظر دهید .
و بهترین راه حل را پیشنهاد کنید .
با تشکر و سپاس .
Esikhoob
جمعه 27 فروردین 1389, 21:40 عصر
CMrepair به نظر من هم توی این برنامه های اصلاح کننده بهترین است اما پولی است.(من دیدم بعد ازیک مدت از کار میافتد)
ولی دوست عزیز شما به برنامه ای احتیاج داری که بتوانی آن را جزء برنامه خودت به کابر بدهی .
معلوم نیست کی بانکش خراب میشود ، کاربر باید بتواند خودش اصلاح کند.
بهتر است وقتی بانک خراب شد ، برنامه پیغام بدهد که " برو برنامه اصلاح را اجرا کن . . . "
برای اینکه کمتر پیش بیاد اگر کامپیوترش ایرادی چیزی دارد ، آن را برطرف کند ، در بعضی از کامپیوتر ها کلا اشکال زیاد پیش میآید.(به خاطر سخت افزار)
VFP7 از روی اشکال رد میشود (خیلی بی خیال است) . اما VFP9 بانکها را چک میکند، این دستور را که در VFP7 وجود ندارد را ببین:
SET TABLEVALIDATE TO
mehran_337
شنبه 28 فروردین 1389, 08:04 صبح
این روش من است و راضی هم هستم :
در ابتدای برنامه یه صفحه لودینگ درست می کنم سپس در این صفحه توسط توابعی که در همین فروم دوستان به اشتراک گذاشته اند همه جداول را چک می کنم یعنی در هر بار اجرای برنامه ، قبل از شروع برنامه سالم بودن جداول بررسی می شود و در صورت خرابی با توابع مذکور برطرف می شوند در اینصورت کاربر نمی فهمد که چه اتفاقی افتاده جدولی خراب شده یا نه
بني حسيني
شنبه 28 فروردین 1389, 10:07 صبح
فايلهايي كه براي تعمير dbf گذاشتيد براي محيط ويژوال هست برادران عزيز جهت فايلهاي خراب در محيط داس اگه فايلي دارند لطفا بذارن يا راهنمايي كنن. ممنون
mostafa_zamani
یک شنبه 29 فروردین 1389, 09:54 صبح
[quote=Esikhoob;954168]CMrepair به نظر من هم توی این برنامه های اصلاح کننده بهترین است اما پولی است.(من دیدم بعد ازیک مدت از کار میافتد)
با عرض سلام و ارادت
1- نسخه رجیستر نشده CMrepair فقط در محیط ویژوال فاکس کار می دهد و با نسخه exe جواب نمی دهد و لی آیا محدویت زمانی و یا محدودیت دیگری هم دارد .؟
در ضمن اگر دوستان خرید این برنامه را صلاح بدانند بنده نیز حاضرم شریک شوم .
2- با توجه به محاسن و معایبی که نسبت برنامه های ارایه شده در این تاپیک مطرح شد لطفا بفرمایید که از هر روال چه موقع و چگونه استفاده کنیم ؟
و میزان اطمینان آن چگونه است ؟
بسیار سپاسگزارم .
Esikhoob
چهارشنبه 01 اردیبهشت 1389, 10:29 صبح
در مورد CMrepair، بله طبق نوشته سایت مربوطه فقط همان محدودیتهایی که شما گفتید را دارد.
ولی من علاوه بر آن در محیط VFP ، محدودیت زمانی دیدم(که طبق گفته سازنده نباید اینطوری میبود)
به نظرم اگر از فیلد memo استفاده نمیکنید ، راحت ترین راه حل آن برنامه ای است که در همین thread یکی از دوستان قبل از برنامه من ارائه کرده بود ( repairdbf.prg) . من آن را پیشنهاد میکنم.
mostafa_zamani
سه شنبه 07 اردیبهشت 1389, 08:16 صبح
با سلام و احترام
استاد گرامی لطفا بفرمایید :
با توجه به استفاده از repairdbf آیا دیگر لازم است از fixheadercount استفاده کنیم ؟
ارادتمند مصطفی زمانی
Esikhoob
سه شنبه 07 اردیبهشت 1389, 08:35 صبح
نه - لازم نیست .
mostafa_zamani
پنج شنبه 30 اردیبهشت 1389, 06:45 صبح
در مورد CMrepair، بله طبق نوشته سایت مربوطه فقط همان محدودیتهایی که شما گفتید را دارد.
ولی من علاوه بر آن در محیط VFP ، محدودیت زمانی دیدم(که طبق گفته سازنده نباید اینطوری میبود)
به نظرم اگر از فیلد memo استفاده نمیکنید ، راحت ترین راه حل آن برنامه ای است که در همین thread یکی از دوستان قبل از برنامه من ارائه کرده بود ( repairdbf.prg) . من آن را پیشنهاد میکنم.
با اهدا سلام و احترام
بنده از repairdbf استفاده نمودم و جواب گرفتم و خیلی خیلی سپاسگزارم .
حال اگر در صورت ضرورت مجبور به استفاده از فیلد memo باشیم چه باید بکنیم ؟
با تشکر و احترام .
Esikhoob
شنبه 01 خرداد 1389, 21:46 عصر
نمیدانم ، شاید یکی از این برنامه های پولی مثل CMrepair ولی . . .
در قسمت Sample های VFP9 که از طریق:
Task Pane----> Solution Sample
میتوانید به آنها دست پیدا کنید، در شاخه "New in Visual FoxPro 9" در اینمورد یک برنامه دارد که نگاه کردن آن خالی از لطف نیست.
mehran_337
چهارشنبه 26 خرداد 1389, 09:12 صبح
با سلام
با برنامه های مختلف تست کردم و لیکن اولین باریست که فایلی خراب می شود و برنامه های قادر به تعمیر آن نیستند از دوستان اگر کسی می تونه این فایل رو باز کنه کمک بزرگی کرده.
not a database file میده.
با تشکر
abdorreza
جمعه 28 خرداد 1389, 01:06 صبح
سلام.
هيچ جوري درست نميشـــــــــــــــــــــ ـــه !!!
mostafa_zamani
شنبه 12 تیر 1389, 09:27 صبح
سلام
من استفاده از برنامه CMrepair را توصیه می کنم .
اگر یک نمونه سالم از ساختار جدول را داشته باشی امکان (struct compare ) آن انشاا... چاره ساز است .
http://www.cmstory.com/index.php?name=Pages&func=display&pageid=5&lang=en
سعید20
دوشنبه 18 مرداد 1389, 20:52 عصر
دوستان عزیز کلیه مطالب این بخش تک به تک برای من مفید بود ولی هیچکس در خصوص فایل ها و فیلدهای memo یک تیبل توضیح نداده بانکهای من هرازچندگاهی فیلد memo آنها خراب میشود کل تیبل سالم است ولی فایل memo را نمیتواند باز کند چرا اینتور میشود از راهنمایی شما متشکرم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.