View Full Version : جداول آزاد
rahro
چهارشنبه 13 آبان 1388, 10:56 صبح
با تابع INDBC ميتوان چك كرد كه يك جدول جزء جداول ديتابيس است يا آزاد . البته اين بشرطي است كه هيچگونه اشكالي بر روي جدول و ديتابيس اتفاق نيفتاده باشد مثلا اگر اصل ديتابيس توسط كاربر اشتباها" حذف شده باشد تابع فوق مقدار را فالس بر ميگرداند يعني برابر با يك جدول آزاد . ولي بدون اجراي فرمان FREE Table كه هدر فايل رو ريست ميكنه نمي توان آنرا به ديتابيس اتصال داد .
خوب حال موقع چك كردن چگونه ميتوان فهميد يك جدول - جدولي آزاد است يا خير ؟! توجه داشته باشيد اگر DBC حذف شده باشد تابع INDBC درست عمل نميكند.
rahro
چهارشنبه 13 آبان 1388, 12:42 عصر
فانكشن زيبايي ديدم كه خيلي عالي خواسته منو برآورده ميكنه از اين تابع حتي دوستاني كه نمي دونن كه يك فايل ؛ جدولي از فاكس هست يا خير نيز ميتونن استفاده كنن .
FUNCTION IsTableInDBC
LPARAMETERS tcTableName
LOCAL lnOffset, lcBuffer, lcRetVal
lnFh1 = FOPEN(tcTableName)
IF lnFh1 < 0
lcRetVal = "CANNOT OPEN TABLE"
RETURN lcRetVal
ENDIF
lcBuffer = FREAD(lnFh1, 1)
DO CASE
CASE INLIST(ASC(lcBuffer), 0x03, 0x83, 0xF5)
lcRetVal = "FREE TABLE"
CASE NOT INLIST(ASC(lcBuffer), 0x30, 0x31, 0x32)
= FCLOSE(lnFh1)
lcRetVal = "NOT VFP TABLE"
RETURN lcRetVal
OTHERWISE
* Continue
ENDCASE
= FSEEK(lnFh1, 8, 0)
lnOffset = ASC(FREAD(lnFh1,1)) + ASC(FREAD(lnFh1,1)) * 256 - 263
= FSEEK(lnFh1, lnOffset, 0)
lcBuffer = FREAD(lnFh1, 263)
= FCLOSE(lnFh1)
IF ASC(lcBuffer) = 0
lcRetVal = "FREE TABLE"
ELSE
lcRetVal = LEFT( lcBuffer, AT( CHR(0), lcBuffer) - 1)
ENDIF
RETURN lcRetVal
Esikhoob
جمعه 15 آبان 1388, 11:11 صبح
با تشکر از نکات خوبتان.
یک راهنمایی : برای وارد کردن کد برنامه ، بهتر است از آیکون که علامتش # هست استفاده کنید.
بدون اجراي فرمان FREE Table كه هدر فايل رو ريست ميكنه نمي توان آنرا به ديتابيس اتصال داد .
من دستور FREE TABLE را برای یکی از DBF ایی که DBC اش نیست اجرا میکنم، بعد که میخواهم آن را دوباره به یک دیتابیس (DBC) دیگری وصل کن یا آن فایل را USE کنم ، با یک error مواجه میشوم:
Variable 'T_NUMBER_OF_INVOICE'is not found.
میدانم 'T_NUMBER_OF_INVOICE اسم یکی از فیلد هاست.
خودم فکر میکنم برای این است که اسم فیلد ها طولانی است.
آیا راه حلی برای باز کردن این table وجود دارد؟
rahro
شنبه 16 آبان 1388, 08:13 صبح
سلام
متشكرم از تذكرتون . اصلاحش كردم
ميخواي با كد نويسي مشكل رو حل كني يا با برنامه جانبي ؟
آيا با Filefix تست كردي ؟
Esikhoob
شنبه 16 آبان 1388, 20:41 عصر
من منظورم یک روش ساده یا یک تک دستوری مثل FREE TABLE بود.
خوب برنامه های جانبی کهDBF را تعمیر میکنند ، زیاد است و من منظورم آنها نبود.
همون کد نویسی را اگر ممکن است به من یاد بدهید.
rahro
دوشنبه 18 آبان 1388, 07:08 صبح
من منظورم یک روش ساده یا یک تک دستوری مثل FREE TABLE بود.
خوب برنامه های جانبی کهDBF را تعمیر میکنند ، زیاد است و من منظورم آنها نبود.
همون کد نویسی را اگر ممکن است به من یاد بدهید.
من تازه بطور عمقي دارم روي اين مبحث كار ميكنم .روش من كار بر روي بيتهاي هدر جداول فاكس است و هنوز به جمع بندي نرسيدم .البته تا اينجايي كه مطالعه داشتم تابعي در فاكس نيست كه خواسته شما را برآورده كنه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.