سلام
اولا عذر می خواهم که پیام شما ویراش شد چون بهتر که کد چپ به راست باشه
اما من کل کلاسهایی که باهاشون کار می کنم را گذاشتم برای دابلود دوباره میگذارم.
ولی جواب من را ندادید که فیلد ذخیره شما عددی است یا غیر عددی؟
Printable View
سلام
اولا عذر می خواهم که پیام شما ویراش شد چون بهتر که کد چپ به راست باشه
اما من کل کلاسهایی که باهاشون کار می کنم را گذاشتم برای دابلود دوباره میگذارم.
ولی جواب من را ندادید که فیلد ذخیره شما عددی است یا غیر عددی؟
سلامنقل قول:
نوشته شده توسط rezaTavak
من عذر میخواهم زیرا به نحوه تایپ زیاد آشنا نیستم .
پروژه ذیل تکه جدا شده از پروژه اصلیست.
میشه لطف کنید اون رو که عین مصداق فوق میباشد رو تست کنید در ضمن تقاضا دارم
موارد ذیل رو دقت بفرمائیدکه:
1- پروژه تا موقعی که exe نشده درست جواب میده یعنی دقیقا" چیزی که من میخوام ولی بعد از exe کردن خراب میشه !!
امتحان کنید. یکباره بصورت معولی و دفعه بعد exe کنید!!!!!!!!!
2- آیا راه کاری بهتر از این رو سراغ دارید ؟ من میخواهم حتی المقدور از آرایه استفاده کنم
منتظر رفع ایراد واشکال و ارائه هر گونه پیشنهاد بهترازطرف شما دوستان هستم
متشکرم
رهرو
خب برنامه شما را من عوض کردم ناراحت نشید اما زیاد استاندارد نیست. مثلا از متغیر عمومی اگر استفاده کنید به مشکل بر می خورید من آرایه شما را در form.hazineh ذخیره کردم.
دوم اینکه من فقط cboCenter1 را درست کردم.
سوم مشکل شما به دلیل خط زیر بود:
COPY TO ARRAY hazineh FIELDS nam,kod
همچنین در valid
LOCAL nFind
nFind = ASCAN(THISFORM.hazineh, THIS.Value, 1, ALEN(THISFORM.hazineh,2), 2)
IF nFind > 0 && IF find!
THISFORM.cboCenter1.Value = THISFORM.hazineh[nFind, 1]
THISFORM.cboCenter1.Enabled = .F.
ELSE
THISFORM.cboCenter1.Enabled = .T.
THISFORM.cboCenter1.ListIndex = 1
ENDIF
نمی دانم چگونه از لطفتون تشکر کنم
تقاضایی دارم و آن اینکه در خصوص بعضی از کدهایی که اضافه کرده اید توضیحاتی دهید آخه من این نمونه کد نویسی رو در هیچ کتابی و یا پروژه ای ندیدم
شما در تکست باکس مربوطه در رویداد lostfocus بعداز کدی که برای تغییر حالت رنگ به پیش فرض درج شده بود کد this.valid رو اضافه کردید! میشه بگوئید این کد چکار میکنه ؟!!
و شما در رویداد valid که در کد نویسی بالا نیز مشهود است این کد را نوشته اید thisform.hazineh[nfind,1
این کد یعنی چی!؟ من تنها میدانستم که با thisform فقط شی ها رو صدا میزنند در حالی که !!!!!!
بحرحال بی نهایت متشکرم
رهرو
سلام
رویه ها و رویدادها در واقع تکه های برنامه هستند که به طور معمول رویه توسط کدی که برنامه نویس می نویسد فراخوانی می شود و روداید بر اثر وقوع رویداد مرتبط. در واقع رویداد رویه ای است که بسته به شرایط خاصی اتفاق می افتد. خب من هم در برنامه هایم می توانم این رویداد را به صورت رویه صدا بزنم.
THIS.Valide()
or
THIS.Valide
هر کلاس می تواند دارای مشخصه ای باشد که آرایه نیز هست برای تعریف آرایه در کلاس باید :
laArrayName[10,10]
در منوی اضافه کردن مشخصه به کلاس بکار برد. این کمک خواهد کرد که یک آرایه در مثلا فرم ذخیره شود و تمام کنترلهای دیگر هم به آن دسترسی داشته باشند و شما دیگر لازم نیست که آن را به صورت عمومی تعریف کنید.
همچنین شما برای جستجو در آرایه از روش حلقه استفاده کرده اید اما تابعی به اسم ASCAN هست که این کار را برای شما انجام می دهد.
شما به کنترلهایتان اسامی درست بدهید مثلا cboCenterBodjet1 گرچه تایپ آن طولانی است اما درک آن سریعتر است در برنامه طولانی.
راستی یکبار شاکی شده بودی چیزی که گداشته بود دانلود نشده اگر دقت کنید می بیند همین که آقای رهرو دانلود کرده ولی درست نشان داده نمی شود!
توضیح: رویداد event - رویه procedure - مشخصه properties
سلام
شاید این بهترین و بزرگترین چیزی بود که تا کنون از ویژوال فاکس آموختم از شما متشکرم .
نوشته بودید:من آرایه شما را در form.hazineh ذخیره کردم.
این آرایه رو دیدم ولی چگونه اینکار رو کردید!؟ ببخشید ولی واقعا" تا کنون با این موضعات آشنا نشده ام
خواهش میکنم در این خصوص بیشتر توضیح دهید مطمئنم بیشتر کسانی که تازه با ویژوال آشنا شده اند این مبحث برایشان خیلی شیرین و اموزنده است
رهرو
سلام
فاکس پرو اینقدر ریزه کاری داره که اگر بدونید برنامه نویسی توش خیلی راحت و خوب میشه.
این کارها را بکنید :
۱- از منوی from گزینه new property را انتخاب کنید
۲- در name آرایه خود را تعریف کنید مثلا: laArray1[100,10]
۳- بعد از بستن این فرم در پنجره properties این باید باشد: laArray1[100,10] و مقدار آن .F. که آن را نمی توانید تغییر دهید.
۴- برای دسترسی به هر عنصر آن باید: THISFORM.laArray1[nRow,nCol] مثلاTHISFORM.laArray1[5,3]
خب به عنوان یک آرایه معمولی با آدرس بالا در عر جای فرم قابل دسترسی است همچنین در کلاسها هم به همین منوال با این تفاوت که دیگر به جای THISFORM باید آدرس کلاس باشد.
در تابع ascan منظور از گزینه nSearchColumn ,nFlags چه میباشد من سعی کردم help رو ترجمه کنم ولی چیزی عایدم نشد
متشکرم .
دوستان کسی نیست در این خصوص کمک کنه !نقل قول:
نوشته شده توسط rahro
سلام
اینترنتم خراب بود نتونستم امروز صبح سر یزنم.
اما گزینه های ascan
1- نام آرایه ای که می خواهد در آن جستجو شود
۲- چیزی که می خواهید جستجو شود
۳- از چندمین عنصر شروع شود؟
۴- چند تا عنصر جستجو شود؟
۵- اگر آرایه دوبعدی بود کدام ستون آن؟
۶- اما در مورد فلاگ:
فرض کن چهار بیت داری بیت اول از سمت راست به چپ هر کدام یک بود فلاگ مخصوص روشن می شود فلاگها ۰ اگر روشن بود یعنی بزرگ بودن و کوچک بودن حروف فرقی ندارد فلاگ یک در نگارشهای قدیمی استفاده میشد و فلاگ ۲ یعنی دقیقا برابر مثلا ali=alireza اما اگر این فلاگ روشن باشد این صحیح نیست. (به عنوان قانون کلی اگر excat off باشد فقط له تعداد اولین سمت بررسی می شود. البته از ansi هم قافل نشوید)
و فلاگ آخری شماره ردیف را بر می گرداند.
توضیحات راهنمای فاکس پرو شما را بیشتر کمک می کند اگر خواستی بگو بیشتر توضیح بدم.
متشکرم جناب تاوک
آیا روشی هست که در ویژوال فاکس 9 خرابی فایلها رو ترمیم کرد!؟ ( صدمات ناشی از برق رفتگی و غیره که باعث خرابی هندل فایل میشه)
سلام
بله!
یک شما باید از استراکچر فایل dbf آگاه باشید (که در راهنما است) و آن را با توابع سطح پایین باز کنید و تر میم کنید.
یک راه ساده این است که
۱- شما یک کپی از جدول که در آن چیزی نیست تهیه می کنید (قبل از خرابی) مثلا من یک شاخه در برنامه هایم دارم به اسم cleandbf که تمام جداول و شاخصها و... در آن است اما هیچ اطلاعاتی در اینها نیست برای ترمیم هر جدول را به شاخه tmp هم که درست کرده ام کپی میکنم.
۲- جدول خراب و سالم را با vfp7 باز میکنم.
۳- داده های آن را به جدول سالم در شاخه tmp کپی میکنم.
۴- فایل خراب را پاک و فایل tmpرا جایگزین میکنم.
البته منظور از vfp7 فایلهای اجرایی هستند که توسط این نگارش ترجمه شده و نیاز به فایلهای زمان اجرای نگارش مذکور هم هست.
ضمنا من «محمد رضا توکل» هستم و برای یکتا بودن در اینترنت از rezatavak در همه جا استفاده میکنم (:
سلام
منظورم بیشتراین بود که اینکار توسط برنامه ای نوشته شده و توسط شخص کاربر انجام شود !؟
آیا شما در این خصوص برنامه ای دارید ؟
میشه لطف کنید برای من و دیگران بگذارید
سلام
من دارم اما به درد خودم می خوره.
چشم درست می کنم می ذارم شاید یک ماهی طول بکشه چون آخره ساله و نگارش برنامه من هنوز مشکل دارم سرم خیلی شلوغه اما از این شب عید!
امان!!!!!!!!!!!!!!
سلام
یه فایل خراب کم حجم بذارید اینجا من ببینم چکارش می تونم بکنم.
البته آقای جواد حسینی گذاشته بودند من هر چی گشتم پیدا نکردم.
سلام
آیا تابعی وجود دارد که مشخص کند در یک فرم در بین چندین تکست باکس , کرسر در کدام یک قرار دارد؟
از این تابع میخواهم در کد نویسی استفاده کنم !
و آیا تابعی وجود دارد که بتواند تشخیص دهد در حال حاضر کدام تکست باکس یا شی فعال است که بشود کرسر را به آنجا منتقل کرد؟
متشکرم
سلام
بله:
*ActiveForm in FormSet
*ActiveObject in others!
البته یه چیزی اینکه فقط کنترلهایی که می شه توش کنترل اضافه کرد دارند.
استاد اصلا متوجه نشدم !!
آیا اینها تابع هستند؟!
چطور میتوان مشخص کند در یک فرم در بین چندین تکست باکس , کرسر در کدام یک قرار دارد؟
چطور میتوان تشخیص دهد در حال حاضر کدام تکست باکس یا شی فعال است که بشود کرسر را به آنجا منتقل کرد؟ خروجی و دستورالعمل استفاده از آنها چگونه است
لطف میکنید اگر جامع تر توضیح دهید.
رهرو
سلام
راستش خودم کار نکردم چون موردش پیش نیومده و چون من از کلاس در فرمهام استفاده میکنم کنترل اونها آسون تره.
یه فاکس پرو کار باید همیشه برنامه foxplus رو داشته باشه
این برنامه تحت داس کار میکنه و تمام جدولهای خراب رو باز میکنه
توجه:وقتی یک فایل خراب رو باز کردید از استراکچر اون یه کپی بگیرید و با دستور کپی تمام اطلاعات رو به جدول جدید کپی کنید
مهم:اگر شما در جدول خراب رکوردهایی داشته باشید که برای delete شدن مارک دار شده باشند در زمان کپی این فیلدها هم کپی میشوند ولی در جدول جدید هیچ مارکی براشون گذاشته نمیشه
نکته:foxplus چون به هدر جداول کاری نداره به این خاطر میتونه اونها رو باز کنه و تقریبا 95 درصد از خرابی جداول مربوط به خرابی هدر جداول میباشند
سلام
ولی من اینو می خوام با خود فاکس انجام بدم.
سلام
اونهایی که فایل خراب شده دارند این را امتحان کنند و در ویژوال 9 نمی توانند باز کنند.
********** تذکر مهم **********
ممکن است اطلاعات شما را خراب کند مواظب باشید!!!!!!!!!!!!!!!!!!!!!!!!!!!! اول از فایل خود پشتیبان بگیرد
********** تذکر مهم **********
اول فایل باز میشود و میزان ها محاسبه می شود و تناقضها گزارش می شود اگر تناقضی بود درست میکند.
**********************************************
*
* 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
این کد را با:
SET PROCEDURE to repairdbf.prg
RepairDbf("Path\tablename.extention")
فرا بخوانید.
اقایان لطفا بفرمائید چگونه میشود اتومات از اطلاعات در یک ساعت خاص از شبانه روز کپی گرفت
جهت اطلاع برنامه شبانه روز در حال کار میباشد
سلام
بستگی داره.
اینکه برنامه تحت شبکه است؟ چند نفر در هر لحظه کار می کنند؟ ساعت 2 شب هم کسی در حال کار با برنامه است؟ کمترین ساعتی که از برنام استفاده می شه چه ساعتیه؟ برنامه شما چند تا جدول داره؟ و...
مثلا اگر یه تایمر روی یک فرم مخفی بگذارید و این کار را به آن بسپارید و در شبکه باشید و 3 نفر در حال کار باشند سه نسخه گرفته میشود!
اول شرایط محیط کارتون را بررسی کنید.
سلام
برنامه ترمیم Dbf را حتی یکنفر هم امتحان نکرده؟؟؟؟
البته من خودم جواب گرفتم خواستم مطمئن بشم.
استاد عزیز سلامنقل قول:
نوشته شده توسط rezaTavak
باور کنید هر چی سعی کردم یک فایلی رو معیوب کنم نشد که نشد!
در حین وارد کردن اطلاعات به بانک در یک حلقه نامحدود چندین بار سیستم خود را ریست کردم ولی نشد ! لج کرده !
بحرحال از لطف شما متشکرم
سلام استاد
من یک دیتابیس فاکس تحت داس دارم که به اس کیو ال سرور 2000 import کردم. ولی فونتش بهم ریخته. لطف می کنید اگه راهنمایی کنید.
متشکرم.
سلام
آقای رهرو ممنون. فقط منطق برنامه را ببینید مشکل نداره؟ آخه من فهمیدم که اگر فایلی باز نشه اندازه اون بزرگتر از ان چیزی هست که باید باشه و از همین ترفند بهره بردم.
آقا بهنام اول شما باید اطلاعاتتون را به ویندوز تبدیل می کردید.
با تشکر از شما اقای توکل
برنامه مورد نظر من شبانه روز در حال کار میباشد ولی از 10 یا 12 شب تا 7 صبح کاربران تغریبا یک نفر میاشد ولی در سایر اوقات پنج شش نفری همزمان کار میکنند در خصوص نوع تایمر و چه مقادیری لطفا راهنمائی فرمائید
سلام
سعی می کنم برنامه ای به شما بدم البته یک دو روز دیگه. حجم اطلاعاتتون چقدره؟
چند تا فایله؟
حجم اطلاعاتی که میخواهم کپی بگیرم فقط اطلاعات یک روز میباشد و زیاد نیست
یا بعبارتی ورودیهای یک روز را و فعلا یک فایل میباشد
البته اگر بشود که کل اطلاعات نیز در یک روز خاص در هفته کپی بصورت اتومات گرفت که خیلی جالب میشود
سلام
یعنی برای هر روزی یک فایل دارید؟!؟
3 محصول جدید بی نیاز در سایت آپلود شد
www.binyazprograms.com
با سلام
جناب اقای توکل خیر قربان یک فایل ورودی دارم که اطلاعات ورودی یک روزه در آن ثبت میگردد و یک فایل مرکزی ... از روی فایل ورودی هر روز ورودی همان روز تحت عنوان یک فایل با نام تاریخ میخواهم ذخیره گردد و .....
ببینید از حرفهای شما معلومه که می خواهید مثلا فایلهای امروز با ۱۳۸۴۱۲۱۴.dbf ذخیره گردد؟نقل قول:
نوشته شده توسط naderigh
خب با این حساب شما فقط ساعت ۲۴:۰۰ باید از اطلاعات پشتیبان تهیه کنید. و چون فقط همان روز باید باشد برنامه عملا از ساعت ۲۴:۰۰ تا اتمام کپی باید متوقف گردد. اگر درست گرفتم بگید شروع کنم.
سلام
من در خصوص محیط data environment این رو میدونم که میشه بانکهای اطلاعاتی خود را در این محیط add کرده و بعد از رابطه های احتمالی از آن استفاده کرد و محیطی واقعا ساده و مورد پسند میباشد ولی مواردی که برایم مبهم است این است
1- آیا استادان انجمن این محیط رو برای بازکردن بانکها و استفاده از آن محکم می بینند و یا سعی میکنند با select و use و ایجاد رابطه ها دستی از بانکهای اطلاعاتی استفاده کنند؟
2- آیا در صورتی نخواهیم از این روش استفاده کنیم تنها راه ارتباط موقت بانکها اطلاعاتی فقط همین روش است ؟
3- مشاهده کردم که میشه یک بانک اطلاعاتی رو چندین بار توسط این دستور add کرد آیا و این کار توصیه میشود؟
4- در هنگام استفاده از این روش , در کد نویسی برای فراخوانی بانک مربوطه تنها دستور
select nametable مرا به مقصود خود میرساند آیا روش بهتر و محکمتری برای باز کردن بانک مربوطه وجود دارد؟
5- این بانکها در چه ناحیه ای باز میشوند؟ و روش تشخیص ناحیه در این روش چیست ؟
و در آخر اگر از این محیط استفاده های دیگر و بهتری هم میشود خوشحالم میشوم از شما بیاموزم
مرا یاری در فرا گیری علم یاری کنید
رهرو
سلام
۱- یعنی چی محکم می بینیم؟ این DataEnvironment یک شی است اگر مفاهیم شی گرایی را بدانید دیگر هیچ سوالی باقی نخواهد ماند.
۲- اگر ارتباط از طریق داس را بلد باشید می توانید مثل آن عمل کنید ولی کارتان بهمراتب سخت می شود. و کدهای شما غیر استاندارد و بدون در نظر گرفتن شی گرایی.
۳-چرا چند بار یک بانک باید use بشه؟ اینکار از سیستم و برنامه منابع اضافی در خواست خواهد کرد.
۴- باز هم محکم یعنی چه؟
۵- این بانکها در DataSession ها باز می شود. بر خلاف تحت داس که یک همچین چیزی نداره. چچون این یک شی است. اگر یک فرم باز دارای بانک باشد و در خط فرمان دستور Set
زده شود تا لیست فایلهای را ببینید یک کامبو بالای صفحه هست که به اسم DataSessin شما را مشخص میکند. محیط پیش فرض برای کار در فاکس پرو Default است. هر فرم دارای DataSession مخصوص به خود است که به همین شی در فرم تعریف می شود.
برای استفاده از این محیط میتوانید از شی
THISFORM.DataEnvironment.Cursor1.
استفاده کنید. و جدول اطلاعاتی را به صورت یک شی در آورید. این کار شی گرایی شما را زیاد خواهد کرد.
جناب اقای توکل همانطوریکه شما میفرمائید
سلام
من یه برنامه برای گرفتن اطلاعات و ریسیت کردن یه ساعت حضور غیاب مدل
pw1400
میخوام . البته با فاکس داس . اگه کسی داره لطفا کمک کنه .
اگه برای فروش هم بود من میخام
فقط خیلی عجله دارم
ممنون از زحمات مدیران سایت
سلام جناب تاوک
منظورم از محکم, قابل اطمینان برای پروژهای بزرگ , بود اخه بیشتر پروژ هایی که دوستان در سایت گذاشته بودند از این روش استفاده نکردند.
سوالی دیگر هم داشتم و ان اینکه چطور میتوانم یک آرایه دو بعدی رو به یک گرید متصل کنم . منظورم اینه بجای استفاده از table از آرایه استفاده کنم
متشکرم
خود شرکت دنیای پردازش این برنامه رو تحت داس و با زبان فاکس دارد
زنگ بزنید شرکت و با آقای حکیمی صحبت کنید
سلام
جناب رهرو:
برنامه نویسی شی گرا یک موضوع به اثبات رسیده است. گرچه سرعت در این نوع برنامه ها بسیار کندتر است اما درک برنامه از لحاظ کلی بیشتر است. محدود کردن برنامه در یک چیز کوچک.
مثل زمانی که برنامه نویسی ساختیافته و غیر ساختیافته مطرح بود. استفاده از دستور Goto آن زمان توصیه نمی شد. امروز هم همین است. شی گرایی محض توصیه می شود. که جاوا سردمدار آن است.
اما در مورد آرایه در گرید هم قبلا بحث شده است. بایستی آن به طور موقت داخل یک جدولی یا ویو کپی شود.
اقای توکل برنامه کپی لطفا ....
سلام
دارم مینویسم
خیلی سرم شلوغه . چشم
سلام
ببخشید آخر سال همه گرفتارند:
************************************************** ************************************************
* Procedure Make backup on midnight
* Last Update : 03/08/2006
* By : M.R.TAVAKOL
* Parameters:
* TableName : table name that you chack it
* Path : path for filename destention
* Attention*************Attention*************Attent ion
* ***** Warning: if you use timer in other part of program
* it can be slow or siop your codes!
* ***********************
************************************************** ************************************************
LPARAMETERS tcTableName, tcPath
#DEFINE MESSAGEUSERBYANOTHER "ÈÇä˜ ÑÇ ˜Óí ÏíÑ ÈÇÒ ˜ÑÏå ÇÓÊ"
#DEFINE MESSAGEFILENOTFOUND "ÝÇíáí Èå Çíä ÇÓã æÌæÏ äÏÇÑÏ"
_SCREEN.AddObject("tmrBackup","tmrMyTimer")
_SCREEN.tmrBackup.cPathBackup = tcPath
_SCREEN.tmrBackup.cTableName = tcTableName
DEFINE CLASS tmrMyTimer as Timer
Interval = 1000 && On a minute.
cTableName = '' && Table Name that you want to create backup
cToday = ''
cBackUpname = ''
cPathBackup = ''
PROCEDURE INIT &&Initial Properties
LOCAL o
o = THIS
o.cToday = o.ToDay()
o.cBackupName = o.cToDay+".DBF"
ENDPROC
************************************************** ************************************************
* Procedure Make backup on midnight
* Last Update : 03/08/2006
* By : M.R.TAVAKOL
* Parameters:
* None
* Return: Today
*
*
************************************************** ************************************************
FUNCTION ToDay
LOCAL lcPreDateSet, lcPreCenturySet, lcToDay
lcPreDateSet = SET("Date")
lcPreCenturySet = SET("Century")
SET CENTURY ON
SET DATE YMD
lcToDay = STRTRAN(DTOC(DATE()),"/","")
SET CENTURY &lcPreCenturySet
SET DATE &lcPreDateSet
RETURN lcToday
ENDFUNC
************************************************** ************************************************
* THIS Procedure check for midnight and if occure create backup
* Last Update : 03/08/2006
* By : M.R.TAVAKOL
* Parameters:
* none
*
* Return Values:
* none
*
************************************************** ************************************************
PROCEDURE timer
WITH THIS
LOCAL lcToday
lcToDay = THIS.Today()
IF lcToday > THIS.cToday
.Makebackup(.cTableName, .cPathBackup+"\"+.cBackUpname )
.cToday = lcToday
.cBackUpname = .cToday +".dbf"
ENDIF
ENDWITH
ENDPROC
************************************************** ************************************************
* THIS Function Make backup
* Last Update : 03/08/2006
* By : M.R.TAVAKOL
* Parameters:
* TableName : table name that you chack it
* FileName : path and filename destention
* Return Values:
* -1: Table Open By Another
* -2: Table Dose not exist?!
* 0: Successful!
*
************************************************** ************************************************
FUNCTION MakeBackup
LPARAMETERS tcTablename, tcDestFile
LOCAL lnUseByAnother, lnPreSelect, lnSelectUse
lnUseByAnother = UseByAnother(tcTablename)
lnPreSelect = SELECT(0)
DO CASE
CASE INLIST(lnUseByAnother,1,3)
MESSAGEBOX(MESSAGEUSERBYANOTHER,16)
RETURN -1
CASE lnUseByAnother=2
lnSelectUse = USEDBF(tcTablename)
COPY TO (tcDestFile)
IF lnSelectUse = 2
USE
ELSE
SELECT (lnPreSelect)
ENDIF
RETURN 0
MESSAGEBOX("Ok")
CASE lnUseByAnother=4
MESSAGEBOX(MESSAGEFILENOTFOUND,16)
RETURN -2
ENDCASE
ENDFUNC
ENDDEFINE
************************************************** ************************************************
* THIS Function determin Table use by another
* Last Update : 02/16/2004
* By : M.R.TAVAKOL
* Parameters:
* TableName : table name that you chack it
* Return Values:
* 1: File Open By Another share
* 2: File Not Open By Another
* 3: File Open Exclusive
* 4: File Dose not exist!
************************************************** ************************************************
FUNCTION UseByAnother
LPARAMETERS lcTableName &&TableName And Path and Extention Must Be Entered
LOCAL lnFileHandle1
lnFileHandle1=FOPEN(lcTableName,0)
IF lnFileHandle1>0 THEN
=FCLOSE(lnFileHandle1)
lnFileHandle1=FOPEN(lcTableName,2)
IF lnFileHandle1<0
RETURN 1 && File Open By Another Share
ELSE
=FCLOSE(lnFileHandle1)
RETURN 2 && File not Open By Another
ENDIF
ELSE
IF FILE(lcTableName)
RETURN 3 && File Open Exclusive
ELSE
RETURN 4 && File Dose not exist!
ENDIF
ENDIF
ENDFUNC
************************************************** ************************************************
* THIS Function use or select table
* Last Update : 02/16/2004
* By : M.R.TAVAKOL
* Patameters:
* table name that select or use
* Return Values:
* 1: select only
* 2: select new area and use
*
* Remeber: it work on this datasession
*
************************************************** ************************************************
FUNCTION USEDBF
LPARAMETERS tcTableName
IF USED(tcTableName)
SELECT (tcTableName)
RETURN 1
ELSE
SELECT 0
USE (tcTableName)
RETURN 2
ENDIF
ENDFUNC
البته چیزی که هست اینه که با سرعت نوشتم و مشکل حتما داره خودتون روش تست کنید.
روش صدا زدن:
CreateBackup("table.dbf","c:\")
اقا بسیار بسیار سپاسگزارم
اقا رضا سلامنقل قول:
نوشته شده توسط rezaTavak
من بانکهای اطلاعاتی خود را در محیط DataEnvironment باز نموده ام و با توجه به گفته شما در خصوص گرید , یک table که نام آنرا از توابع ایجاد یک نام به صورت تصادفی بدست آوردم بصورت زیر ساختم
file_new=SYS(2015)
SELECT 0
create table &file_new (mol n(10),mbpr n(10), datpr c(10), mbgh n(10), datsr c(10), rd n(3))
و این table رو به گرید اتصال دادم ولی در انتها کارم که میخواهم این table رو حذف کنم خطای
file is use رو دریافت میکنم چطور میتوانم این فایل رو ببندم و حذف کنم
با فرمان use به تنهایی امتحان کردم مثمر ثمر نبود !؟
سلام
شاید DataSession درست نباشد.
اول با تابع used باز بودن جدول را تست کنید.
سلامنقل قول:
نوشته شده توسط rezaTavak
منظورتون رو در خصوص خط اول متوجه نشدم
اینکار رو کردم فرمان used نشان میده که فایل بازه ولی فرمان use نمی تواند فایل رو ببندد!؟
خواهش میکنم یک دفعه دیگه پست قبلی مرا مطالعه کنید و ببنید ایرادی ندارد!؟
منتظرم
رهرو