# پایگاه‌های داده > سایر پایگاه‌های داده > Access >  نمونه ای مطمئن جهت بک آپ گیری و ریستوری جداول اکسس

## royasaz_bam

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

*تا کاربران همچون بنده بتوانند بر حب نیاز و حساسیت کار خود انتخاب نماید
*باشد با مشارکت اساتید این موضوع از سردرگمی و پراکندگی در آید
*
و به امید روزی که *اکتیوکسی برای بک آپ گیری* تولید شود و همانند اکتیوکس تاریخ شمسی بسیاری از مشکلات این موضوع نیز مرتفع گردد؟*
*

----------


## royasaz_bam

در نمونه ذیل که از سایت cpsd گرفته شده  با نحوه تهيه نسخه پشتيبان به صورت *فشرده* ( زيپ شده ) از يك فايل اكسس آشنا خواهيم شد

نمونه بر اساس معماري *FEBE* طراحي و پياده سازي شده است.
در توضیحات آن طبق سایت منبع توصیه شده جهت *بالاتر رفتن ايمني و كاهش احتمال از دست دهي اطلاعات* ، اقدام به طراحي بانك به صورت دو بخشي نماييم

*جهت مشاهده نحوه عملكرد در اين مثال :*

ابتدا اقدام به كپي نمودن فايلها در داخل ريشه درايو C نماييد ( در داخل هيچ فولدري قرار نداشته باشد )

فايل XZip.dll را رجيستر كنيد

اقدام به باز نمودن فايل FrontEnd.mdb نموده و عمليات تهيه نسخه پشتيبان از فايل BackEnd.mdb را به انجام برسانيد

به جهت سهولت ايده گيري ، مثال موجود در ساده ترين حالت ممكن طراحي و پياده  سازي گرديده و امكان پيچيده سازي تا سطوح بسيار بالاتري را خواهد داشت

بديهيست اجراي آن مراحل در اختيار خودتان قرار گرفته است *که هینجا از سایر عزیزان درخواست میشود که با ایده های خود نسبت به بالا بردن سطوح کارائی نمونه اقدام و ارسال نمایند..
آدرس سایت منبع* http://cpsd.ir/forum/showthread.php?...pid=361#pid361

----------


## Abbas Amiri

برای زیپ کردن فایل جاری بنده از سابروتین زیر استفاده میکنم . لازم بذکر است که احتیاج به هیچ فایلی نمی باشد.

Sub ZipFile(SourceFile, FileNameZip)
    '   SourceFile :مسیر فایل مبدا         Example: "F:\MyFolder\Myfile.mdb"
    '   FileNameZip :   مسیر فایل زیپ Example: "F:\MyFolder\BackUp\Myfile_90-09-25.zip"
    On Error GoTo errzip
    Dim oApp As Object
    If Len(Dir(FileNameZip)) > 0 Then Kill FileNameZip
    NewZip FileNameZip
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(FileNameZip).CopyHere SourceFile
    Set oApp = Nothing
    Exit Sub
errzip:
    MsgBox Err.Number & "  - " & Err.Description
End Sub

Sub NewZip(sPath)
    If Len(Dir(sPath)) > 0 Then Kill sPath
    Open sPath For Output As #1
    Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
End Sub



در روتین فوق چنانچه فایل زیپ وجودداشته باشد ، آنرا پاک می کند (چون در برنامه من ابتدا یک پسوند تاریخ به نام آن اضافه می شد وسپس به این روال پاس می شد و درهر تاریخ فقط به یک بک آپ احتیاج بود ) در صورت عدم نیاز آن قسمت را حذف کنید .
فقط دقت کنید مقصد و مبدا اشتباه نشود

----------


## Abbas Amiri

برای استفاده آسان فایل نمونه زیر را مشاهده نمایید

----------


## emami.sie

سلام
راستش من اين نمونه رو از همين سايت دانلود كردم (ولي نمي دونم كي و از كدوم تاپيك) و توي تمام برنامه هام هم ازش استفاده مي كنم، به جرات ميشه گفت خيلي كامله ضمن اينكه كل تنظيمات Backup رو هم در اختيار كاربر قرار ميده تا با هر تركيبي كه مي خواد اين كار رو انجام بده مثلا اينكه توي نام بك آپ تاريخ روز باشه يا شمارنده،مسير ذخيره بك آپ، زيپ كردن، چند بك آپ همزمان، Compact كردن هنگام بك آپ و .... و از همه مهمتر نتيجه بك آپ رو نشون ميده كه آيا به درستي انجام شده يا نه، و اگر نه، خطاي مورد نظر رو هم توي قسمت Results نشون ميده...
موفق باشيد
يا علي

----------


## emami.sie

دوستان یه موردی که یادم رفته بود بگم و حداقل برای من خیلی مهم بوده:
چون من همیشه دیتابیس برنامه هام از اینترفیس جدا هستش؛ بهترین نمونه برای بک آپ، فایل بالاست، چون این قابلیت رو داره که آدرس فایلی که قراره ازش بک آپ گرفته بشه رو بهش بدید... (در برنامه نگهداری و تعمیراتی که توی همین سایت گذاشتم از این نمونه استفاده کردم)
یا علی

----------


## Zero Defect

سلام

دوست من royasaz_bam , نمونه موجود بر مبنای پیغام خصوصیتون ارائه شد و بر همین اساس متناسب با نیاز

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

این کار تا حد ممکن باید از طریق یک نرم افزار برون سیستمی به انجام برسه , در نرم افزارهای خودم روال بدین صورته

در زمان نیاز به تهیه نسخه پشتیبان ( حال چه از طریق درخواست صریح کاربر و یا چه از طریق پیشنهاد سیستم ** ) , برنامه اصلی بسته شده و سیستم بک آپ گیری ( یک فایل exe جانبی ) باز شده و عملیات تهیه نسخه پشتیبان و یا جایگذاری نسخه پشتیبان رو به انجام خواهد رسوند ( این فایل اجرایی متناسب با نیاز شخصی خودم طراحی شده )

حال چرا باید برنامه اصلی باز نباشه :

متاسفانه این مورد به یکی از مشکلات خود اکسس مرتبط میشه

اکسس برنامه ای هستش که در هنگام کار به اصطلاح دچار پدیده Bulbing میشه , در واقع برنامه به صورتی غیر متناسب و با رابطه ای غیر خطی با حجم اطلاعات وارد شده , شروع به رشد میکنه

این پدیده تا هنگام بسته شدن فایل اکسس به همراه فایل خواهد بود , البته جهت رفع کامل این نقیصه نیاز به انجام عملیات Compact وجود داره

در واقع عملیات Compact به نوعی همین تخلیه تورم ( Bulb ) ایجاد شده در داخل فایل هستش

خوشبختانه اکسس بدون انجام عملیات Compact قادر هستش که اطلاعات موقتی ایجاد شده در داخل خودش رو حذف کنه ولیکن پدیده ای دیگه که در این اثنا رخ میده این امر هستش که همچنان فضای اشغال شده اختصاص داده شده به اطلاعات موقتی ( Temp ) به صورت آزاد در نخواهند اومد , در همین اینجاست که جهت بازیافت این فضا شما ناگزیر به انجام عملیات Compact هستید

حال اگر شما بدون بستن یک فایل اکسس اقدام به تهیه نسخه پشتیبان از اون کنید , در واقع شما به فایل اکسس این فرصت رو نخواهید داد که پروسه بالا رو کامل کنه

در این حالت شما با فایل اکسسی رو برو هستید که همچنان درگیر با پدیده Bulb بوده و این احتمال وجود داره که در هنگام بازیافت اقدام به کج رفتاری کنه

هر چه زمان باز بودن فایل اکسس و تراکنشهای داخلی اون ( مرتبط با جداول ) بیشتر بوده باشه , لزوم بک آپ گیری برون سیستمی الزام بیشتری پیدا میکنه , چرا که پدیده نامناسب تورم در اینگونه موارد بیشتر نمود پیدا کرده

نمونه های دوستانمون نمونه های جالبی هستند خصوصا نمونه دوم

** در سیستم بک آپ گیری بنده ( نسخه شخصی و نه نمونه ارائه شده فعلی ) , این سیستم بر مبنای تعداد دفعات اجرا و یا فاصله زمانی آخرین نسخه پشتیبان عمل میکنه , ضمن اینکه همواره اجازه نگهداری 5 نسخه پشتیبان قبلی رو میده و با اضافه شدن نسخ بعدی از ابتدایی ترین نسخه شروع به حذف میکنه

فقط در خصوص نمونه دوستمون آقای Abbas Amiri

هیچ وقت ابتدا به ساکن نسخه بک آپ موجود رو حذف نکنید 

If Len(Dir(FileNameZip)) > 0 Then Kill FileNameZip

ایتدا عملیات تهیه نسخه بک آپ جدید رو انجام بدید ( با یک نام موقتی ) در صورت موفقیت آمیز بودن عملیات , جایگزینی رو انجام بدید

همیشه اینطور در نظر داشته باشید که با کلیک بر روی دکمه تهیه نسخه پشتبان , این احتمال وجود داشته باشه که فرضا برق قطع بشه و دیگه فایل اصلیتون هم باز نشه
اون وقت شما هستید و یک فایل معیوب و نسخه پشتیبانی که حذف شده

موفق باشید

----------


## Abbas Amiri

با تشکر ازرهنمود استادمان جناب  Zero Defect تغییرات لازم درفایل ضمیمه پست 4 جهت علاقمندان ایجادشد.

----------


## RESMAILY

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

----------


## Zero Defect

سلام




> اما اگر به برنامه خارج از آکسس دسترسی نداشتیم می شود که در کنار فایل back_end ابتدا یک کپی از روی آن تهیه شود. سپس با عملیات مورد نظر- مثلا کدی که اقای امیری ارایه کرده است - اقدام به گرفتن پشتیبان از روی این فایل که در حالت غیر فعال قرار داردنمود


مورد بالايي كه خدمتتون عرض كردم رو دقيق مطالعه نفرموديد

فايل اكسس در هنگام بسته شدن خودش ميتونه اون مشكل داخلي خودش رو حل كنه

شما اگر از يك فايل كپي بگيريد و از اون بخوايد نسخه پشتيبان تهيه كنيد باز هم همون داستانها جاري هستش

در هر حال اون سيستم ، پيشنهادي بود

موفق باشيد

----------


## RESMAILY

به نام خدا



> شما اگر از يك فايل كپي بگيريد و از اون بخوايد نسخه پشتيبان تهيه كنيد باز هم همون داستانها جاري هستش


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

----------


## Zero Defect

با سلام RESMAILY

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

بنا به روایت فیلم مارمولک برای رسیدن به خدا راههای زیادی وجود داره

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

راه حل اول مشمول یک رویه پیچیده شده غیر الزام آور هستش و رویه دوم اشاره به یک راه حل ساده تر و کم ریسک تر داره




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


در محدوده مسائل نظری , بخشی وجود داره با نام آمار و احتمال , به بیانی دیگه اگر مساله ای فاقد قطعیت 100% بوده باشه در مباحث آمار و احتمال قابلیت بررسی و کند و کاو رو خواهد داشت

فلسفه تهیه نسخه پشتبان به طرق مختلف و یا اساساً اختلاف سلیقه در خصوص چگونگی تهیه نسخه پشتبان , مرتبط خواهد بود با همین امر که هر کسی چه احتمالی رو به مثمرثمر تر بودن یک روش اختصاص بده

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

موفق باشید

----------


## RESMAILY

به نام خدا
با سلام. پاسخ نبيل عزيز مثل هميشه خو ب و تميز و ديفراگمنت شده است. ولي خوب البته پاسخ عرايض من هم نيست.

----------


## Zero Defect

> ... ولي خوب البته پاسخ عرايض من هم نيست.


سلام دوست من , پاسخ سئوال خیلی شفاف بود , توضیحات تکمیلی رو با استناد به همون موارد بسط میدم امیدوارم که پاسخ کامل رو دریافت کنید




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


به بیانی عامیانه تر , روش اول چیزی مشابه این امر هستش که لقمه رو به دور سر بچرخونیم و بعد وارد دهان کنیم

خیلی شفاف هستش : ابتدا یک فایل ایجاد کنیم ( خالی ) و بعد جداول رو به داخل اون Export کنیم !؟؟ تا در نهایت فایل جدید ایجاد شده , همسان با مرجع اولیه خودش بشه ؟!

بنده شخصاً از این روش استفاده نمیکنم و برای روش دیگران هم احترام قائلم

پس پاسخ سئوال اولتون تقدیم شده بود

.....

در خصوص اینکه تا همین لحظه هم با این روش مشکل پیدا نکردید و آیا مشکل ساز هست و یا خیر ؟!

رجوع کنید به :




> فلسفه تهیه نسخه پشتبان به طرق مختلف و یا اساساً اختلاف سلیقه در خصوص چگونگی تهیه نسخه پشتبان , مرتبط خواهد بود با همین امر که هر کسی چه احتمالی رو به مثمرثمر تر بودن یک روش اختصاص بده


وقتی در ابتدا عرض کردم خدمتتون که روش مدنظر شما رو به دلیل




> رویه پیچیده شده غیر الزام آور


شخصاً , پیرو اون نخواهم بود پس نظرم رو در خصوص اون هم عرض کرده بودم خدمت شما

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




> در این روش تاحال به مشکلی برنخوردم. حتی گاهی که فایل اصلی خراب شده از این فایل برای بازگرداندن اطلاعات استفاده کرده ام.


خوب , فلسفه ایجاد نسخه پشتیبان همینه , اگر غیر از این امر متصور بشه که نمیشه اسم اون رو نسخه پشتیبان گذاشت

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




> نا به روایت فیلم مارمولک برای رسیدن به خدا راههای زیادی وجود داره


معنای این جمله به روشنی یک جیز بود که روش شما هم راهی برای تهیه نسخه پشتیبان هستش , حتی شاید بهتر از مابقی راهها

در نهایت با توجه به اینکه شما هم نگاهی متفاوت به این موضوع دارید , در صورت امکان نمونه خودتون رو قرار بدید تا کسانی که مایل بودند از این روش استفاده کنند

موفق باشید

----------


## RESMAILY

به نام خدا
با سلام. گرچه شركت من در اين بحث حكم ادعاي خياطي آن بنده خدايي است كه رويه مبل درست مي‌كند(!) ولي ديدم بحثي اقاي پيروزمهر در مورد پشتيبان گرفتن مستقيم از فايل در حال اجراي آكسس مطرح كرد و من در تجربه صحت آن را ديده بودم. گفتم چيزي بگويم. آنكه براي حل اين موضع روشي  ابتدا به كار گرفتم (وبعدا هم به درد خورد) همين بود. يعني كه كپي را از فايلي كه در حال اجرا نيست بگيرم. گرچه در ادامه (طبق نظر نبيل) از برنامه هايي مانند smartbackup  و اين قبيل هم استفاده نمودم. اما كنترل كردن روش قبلي اسان تر بود. وقتي فايل سالم پشتيبان مزبوررا را داشتم مي شد به روش هاي تكميلي (مانند آنچه كه آقاي اميري نوشت) از روي آن zip و rar  و حتي فايل هاي رمز شده را باخيال راحت ازداخل برنامه(مثلا هنگان خروج از برنامه اصلي) تهيه نمايم. كه خوب مي نمايم.
در عين حال حق با شماست و بايد يك نمونه تقديم كنم. تا يكي دوساعت ديگر كه به منزل بروم اين كاررا مي كنم.(گرچه ساعت ثبتي اين تالار يك جوري است كه گاهي انگار ما نصف شب نشسنه ايم داريم  كامنت مي گذاريم. در صورتيكه مثلا الآن ساعت 8.5 است مثلا)

----------


## abdoreza57

سلام   ضمن تشکر از جناب امیری بابت زحمات فراوانی که در طول حضورشون تو سایت هم در زمان کاربری و همینطور پس ار مدیریتشون ...
 نمونه خوبی (ضمیمه پست شماره 4 )که استاد امیری ارائه نمودند امروز متوجه شدم در صورتی که اقدامی جهت کنترل اون صورت نگیره ممکنه دردسر ساز بشه !!! 

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

لذا بر آن شدم از خود استاد بپرسم راه حلی هست یا خیر ؟   نمونه ضمیمه را برای تست قرار میدم ضمنا قبلا باید برنامه را با فرمها و جداول دیگه سنگین کنید    خدا نگهدار

----------


## Abbas Amiri

> سلام   ضمن تشکر از جناب امیری بابت زحمات فراوانی که در طول حضورشون تو سایت هم در زمان کاربری و همینطور پس ار مدیریتشون ...
>  نمونه خوبی (ضمیمه پست شماره 4 )که استاد امیری ارائه نمودند امروز متوجه شدم در صورتی که اقدامی جهت کنترل اون صورت نگیره ممکنه دردسر ساز بشه !!! 
> 
> در صورت افزایش حجم برنامه اگر هنگام بک آپ گیری از برنامه خارج شویم عملیات فشرده سازی فرصت انجام پیدا نمیکنه و برنامه پشتیبان خراب میشه ! من برای کنترل این کار از پروگرس بار استفاده کردم نشد دکمه خروج را بعد از پشتیبان گیری قرارد دادم نشد و ... 
> 
> لذا بر آن شدم از خود استاد بپرسم راه حلی هست یا خیر ؟   نمونه ضمیمه را برای تست قرار میدم ضمنا قبلا باید برنامه را با فرمها و جداول دیگه سنگین کنید    خدا نگهدار


احتمالا بکار گیری تابع sleep بعد از عملیت زیپ چاره ساز هست .

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub ZipFile(SourceFile, FileNameZip)
    '   SourceFile : نام ومسيرکامل فايلي که زيپ خواهدشد         Example: "F:\MyProgram\Myfile.mdb"
    '   FileNameZip :   نام ومسيرکامل فايل مقصد که ايجادخواهدشد Example: "F:\MyProgram\BackUp\Myfile_90-09-25.zip"
    On Error GoTo errzip
    Dim oApp As Object, Tmp As String
    
    If Len(Dir(FileNameZip)) > 0 Then
        Tmp = GetFilePathPart(FileNameZip, 1) & GetFilePathPart(FileNameZip, 2) & "tmp." & GetFilePathPart(FileNameZip, 3)
        FileCopy FileNameZip, Tmp
        Kill FileNameZip
    End If
    NewZip FileNameZip
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(FileNameZip).CopyHere SourceFile
    Set oApp = Nothing
    DoEvents
    Sleep 3000          'سه ثانيه معطل مي کند
    If Tmp <> "" Then
        Kill Tmp
    End If
    Exit Sub
errzip:
    MsgBox Err.Number & "  - " & Err.Description
End Sub

----------


## Access2013

سلام

دیشب که این تاپیک بوسیله کاربر عبدالرضا بالا اومد تصادفا امار بازدید را هم دیدم که  1100 نفر بود  پست اخیر جناب امیری را بررسی کردم نمونه ای کم نظیر و بی نقص که واقعا با خیال راحت میتونید تو پروژه هاتون استفاده کنید ولی الان که ساعت 6 بعد ازظهر هست آمار بازدید بالای 1700 هست (دست کم 600 نفر از این تاپیک بازدید کردند ) تاپیکی که پاسخ اصلی و  نهایی را فقط یه نفر داده یعنی همون پست آخری !!!

حدس بزنید این 600 نفر تو تاپیک چکار کردند ؟
خودم میگم :
1 پاسخ پرسش را بررسی کردند یا نکردند دیدند یا ندیدند!!!
2 از اینکه یه نفر هست پاسخ اکثر قریب به اتفاق سوالات را میدونه بدون اینکه مسائل را به حاشیه بکشه متعجب شدند!!
3 فقط رو تاپیک کلیک کردند بدون اینکه کاری داشته باشند !!!
4 به نظرشون این سمپل به درد نمی خورده ؟ دلیلش ؟ ها !؟ نمی دند 
5 ...

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

موفق باشید و در پناه حق

----------


## New Account

سلام Access2013

لطف ميكنيد ، شما دوست گرامي عملكرد دستور Sleep رو توضيح بديد ؟

موفق باشيد

----------


## Abbas Amiri

> سلام Access2013
> 
> لطف ميكنيد ، شما دوست گرامي عملكرد دستور Sleep رو توضيح بديد ؟
> 
> موفق باشيد


با تشکر از دوست عزیزم جناب پیروزمهر بابت تذکر به جای ایشان .

سلام گرچه این راه فوری جواب می دهد ولی کلا با روح تابع  sleep منافات دارد :

Sleep function: Suspends the execution of the current thread until the time-out interval elapses.

بنا براین باید بهترین کار را انجام داد :

بجای تابع sleep میتوانید مانند زیر عمل کنید. البته احتمالا راه های دیگری هم هست :

Sub ZipFile(SourceFile, FileNameZip)
    '   SourceFile : نام ومسيرکامل فايلي که زيپ خواهدشد         Example: "F:\MyProgram\Myfile.mdb"
    '   FileNameZip :   نام ومسيرکامل فايل مقصد که ايجادخواهدشد Example: "F:\MyProgram\BackUp\Myfile_90-09-25.zip"

    On Error GoTo errzip
    Dim oApp As Object, Tmp As String
    
    If Len(Dir(FileNameZip)) > 0 Then
        Tmp = GetFilePathPart(FileNameZip, 1) & GetFilePathPart(FileNameZip, 2) & "tmp." & GetFilePathPart(FileNameZip, 3)
        FileCopy FileNameZip, Tmp
        Kill FileNameZip
    End If
    NewZip FileNameZip
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(FileNameZip).CopyHere SourceFile
    Set oApp = Nothing
    DoEvents
    Do While Len(Dir(FileNameZip)) = 0
    
    Loop
    
    Do Until FileLen(FileNameZip) > 1024
    
    Loop
    If Tmp <> "" Then
        Kill Tmp
    End If
    Exit Sub
errzip:
    MsgBox Err.Number & "  - " & Err.Description
End Sub

----------


## abdoreza57

سلام

متاسفانه زمان بک آب گیری طولانی و در نهایت ارور file not fond 53 میده !
لطف میکنید بررسی کنید ؟ در ضمن گاهی فایل بک اب دومی را داحل فایل زیپ شده قبل قرار میده .

اون تابع sleep مشکلش چی بود ؟ و سابروتین آخری ایرادش کجاست ؟

خدا نگهدار

----------


## Abbas Amiri

> سلام
> 
> متاسفانه زمان بک آب گیری طولانی و در نهایت ارور file not fond 53 میده !
> لطف میکنید بررسی کنید ؟ در ضمن گاهی فایل بک اب دومی را داحل فایل زیپ شده قبل قرار میده .
> 
> اون تابع sleep مشکلش چی بود ؟ و سابروتین آخری ایرادش کجاست ؟
> 
> خدا نگهدار


در روش اخیر خط 18 ابتدا چک می کند که فایل زیپ ساخته شده یانه(در روال NewZip) در این روال یک فایل زیپ خالی به حجم یک کیلو بایت ساخته می شود  و تا زمانی که محتویات فایل مورد نظر به آن منتقل نشود حجم آن بیشتر نمی شود . بنابر در خط 22 این موضوع چک شده و در صورت انجام از حلقه خارج می شود.

در ادامه فایل شما  پس از اصلاح ارائه می شود.

----------


## abdoreza57

سلام

ضمن تشکر از آقای امیری بابت زحمتی که کشیدند و تذکر جناب پیروزمهر  که نمیدونم چرا تو این مورد من متوجه نشدم !

اینو از دید خودم که مبتدیم میگم ...
متاسفانه به نظر من اومدیم ابروش را درست کنیم زدیم چشمشو کور کردیم :

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

تابع Sleep مشکل ساز هست یا دلیل دیگری داشت که تغییر کرد؟ هر چند تو بند آخری فرمودید 



> بجای تابع sleep میتوانید مانند زیر عمل کنید. البته احتمالا راه های دیگری هم هست :


فکر میکنم باید به فکر راههای دیگری بود چون تو یه فایل حجیم کار کردن با این دکمه سخت هست!!!

خدا نگهدار

----------


## Abbas Amiri

> سلام
> 
> ضمن تشکر از آقای امیری بابت زحمتی که کشیدند و تذکر جناب پیروزمهر  که نمیدونم چرا تو این مورد من متوجه نشدم !
> 
> اینو از دید خودم که مبتدیم میگم ...
> متاسفانه به نظر من اومدیم ابروش را درست کنیم زدیم چشمشو کور کردیم :
> 
> تو نمونه آخری همانطور که عرض کردم زمان بکاب گیری به صورت عجیبی افزایش یافته است خطا نمیگیره ولی کلافه کننده است (البته این درصورتی است که حجم فایل زیاد باشه ) نمونه پست 13 را چرا تغییر دادید ؟
> 
> ...


 سلام

تا انجا که فهمیدم ، شما  می توانید از تابع sleep استفاده کنید چون به عملیاتی که  قبلا شروع شده اند کاری ندارد و فقط به عملیات جاری( که اجرای کدهای  همان خط به بعد است) محدود می شود. تنها موضوعی که می ماند این است که آیا چنانچه زمان تعیین شده کمتر از مدت پروسه مورد نظرمان بود ، و فرضا دکمه فرمانی زده شد عملیات نیمه کاره رها نخواهد شد؟
معنی جمله ای هم که در بالا آمده دقیقا به این صورت است :
"تعلیق عملیات  موضوع فعلی تا پایان زمان تعیین شده " بنابر این هیچ تداخلی با موضوع هایی(threads) که قبلا شروع شده ندارد .

احتمالا جناب پیروزمهر بتوانند توضیحات بیشتری در این  باب جهت بنده و دیگران دوستان پیگیر این تاپیک داشته باشند .

----------


## New Account

سلام




> احتمالا جناب پیروزمهر بتوانند توضیحات بیشتری در این باب جهت بنده و دیگران دوستان پیگیر این تاپیک داشته باشند .


با عنایت به پست شماره 14 کاربر گرامی Access2013 ،  متاسفانه ظاهراً توضیحات بیشتر و یا بحث بر سر کد فردی دیگه ، تفسیر به حاشیه روی میشه و بر همین اساس توضیح بیشتری ندارم چرا که حوصله جدل با کسی رو ندارم ، همون بهتر که اگر کسی کدی نوشت کسی نظری نده !

کار سختی در پیش ندارید ، در یک طرف بنده عنوان کردم کد شما با توجه به شرایط سئوال مشکل داره و در سویی دیگه در همون پست 14 ، دوستمون عنوان فرمودند :




> تاپیکی که پاسخ اصلی و نهایی را فقط یه نفر داده یعنی همون پست آخری


انتخاب نظرات با شماست !

بحث طولانی شد ، ببخشید

موفق باشید

پی نوشت : عبد الرضا ، دوست من 

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

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

موفق باشی

----------


## Abbas Amiri

با سلام 

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

لذا خواهشمند است چنانچه صلاح دانستید نسبت به شرکت در هر بحثی که احتیاج به راهنمایی و یا تذکر دارد ، اقدام نمایید . این مهم نیست که مغایر نظر کسی باشد. مهم راه حل صحیح است .(در مورد خودم عرض کردم)

با آرزوی سلامتی و موفقیت شما و همه دوستان

----------


## abas1388

> برای استفاده آسان فایل نمونه زیر را مشاهده نمایید


سلام جناب امیری
در این نمونه بکاپ گیری بصورت زیپ شده ازفایل جاری بعمل میآید ومن درکدهای فوق بجای CurrentDb.Name آدرس فایل دیگری را وارد کردم ولی نتیجه ایجاد یک فایل زیپ شده با حجم صفر گردید.
ممکن است خواهش کنم این نمونه را برای ایجاد فایل back end  بصورت زیپ شده اصلاح بفرمائید؟
باتشکر

----------


## Abbas Amiri

> سلام جناب امیری
> در این نمونه بکاپ گیری بصورت زیپ شده ازفایل جاری بعمل میآید ومن درکدهای فوق بجای CurrentDb.Name آدرس فایل دیگری را وارد کردم ولی نتیجه ایجاد یک فایل زیپ شده با حجم صفر گردید.
> ممکن است خواهش کنم این نمونه را برای ایجاد فایل back end  بصورت زیپ شده اصلاح بفرمائید؟
> باتشکر


اگر فایل FE  شما MyFile و فایل BE  با نام  MyFile_be ودر همان پوشه باشد ، می توانید روال GetBackup را مطابق زیر تغییر دهید

Sub GetBackup()
    Dim sDate As String, src, Dest
    Dim dt As Long

    dt = Shamsi()
    sDate = "(" & IL(dt) & "-" & ay(dt) & "-" & Guon(dt) & ")"
    src = CurrentProject.Path & "\" & GetFilePathPart(CurrentDb.Name, 2) & "_be." & GetFilePathPart(CurrentDb.Name, 3)
    'src = CurrentDb.Name
    If Dir(CurrentProject.Path & "\Backup", vbDirectory) = "" Then
        MkDir CurrentProject.Path & "\Backup"
    End If
    Dest = CurrentProject.Path & "\Backup\" & GetFilePathPart(src, 2) & sDate & ".zip"
    ZipFile src, Dest
End Sub


مورد مهم دیگر بازیابی فایل پشتیبان از فایل زیپ است که بزودی آنرا در همین تاپیک قرار می دهم  .

----------


## 1397mehrdad

امکان داره بک آپ های تهیه شده با این روش با پسورد ذخیره شوند . یعنی در قسمتی از برنامه قسمتی برای تنظیم پسورد فایل های بک آپ تعبیه بشه و وقتی دکمه تهیه نسخه پشتیبان رو می زنیم فایل پشتیبان بصورت فشرده و همراه با پسورد ذخیره شود ؟

----------


## hamid-nice

> امکان داره بک آپ های تهیه شده با این روش با پسورد ذخیره شوند . یعنی در قسمتی از برنامه قسمتی برای تنظیم پسورد فایل های بک آپ تعبیه بشه و وقتی دکمه تهیه نسخه پشتیبان رو می زنیم فایل پشتیبان بصورت فشرده و همراه با پسورد ذخیره شود ؟


با سلام
تاپیک زیر هم جوابگوی موضوع اصلی تاپیک هست هم برای پسورد گذاری مناسب چنانکه ابتدا فایل Back End را پسورد گذاشته و به فایل Front End ایمپورت کنید پس از آن به بهترین وجه عمل خواهد کرد 
موفق باشید
https://barnamenevis.org/showthread.p...B4%D8%AF%D9%87

----------


## sh.shahrokh

> سلام
> راستش من اين نمونه رو از همين سايت دانلود كردم (ولي نمي دونم كي و از كدوم تاپيك) و توي تمام برنامه هام هم ازش استفاده مي كنم، به جرات ميشه گفت خيلي كامله ضمن اينكه كل تنظيمات Backup رو هم در اختيار كاربر قرار ميده تا با هر تركيبي كه مي خواد اين كار رو انجام بده مثلا اينكه توي نام بك آپ تاريخ روز باشه يا شمارنده،مسير ذخيره بك آپ، زيپ كردن، چند بك آپ همزمان، Compact كردن هنگام بك آپ و .... و از همه مهمتر نتيجه بك آپ رو نشون ميده كه آيا به درستي انجام شده يا نه، و اگر نه، خطاي مورد نظر رو هم توي قسمت Results نشون ميده...
> موفق باشيد
> يا علي


با سلام 
فایل شما را دانلود کردم ولی هنگام باز شدن error می ده

----------

