PDA

View Full Version : سوال: زيپ كردن و عمل فشرده سازي



Mahsa Hatefi
پنج شنبه 24 بهمن 1387, 19:07 عصر
سلام بر اساتيد محترم

ابتدا قبل از اينكه دوست بزرگوار جناب قرباني بفرمايند " اول جستجو ....." عرض كنم اينكارو قبلا انجام دادم .

تا حالا وقتي مي خواستم از اطلاعات برنامه هام پشتيبان تهيه كنم :
1- جداول مورد نظر را به تكست تبديل مي كردم
2- آنها را با كدپيج ويندوز عربي (1256) ذخيره مي كردم
3- با بچ فايل داس از Pkzip براي فشرده سازي استفاده مي كردم

اما به توصيه استاد ارجمند جناب پيروزمهر تصميم گرفتم بانك را از برنامه جدا كنم . در اين مورد براي تهيه پشتيبان به روش زير عمل كردم :

1- در حالي كه به بانك (Back_End) متصل هستم از بانك يك كپي مي گيرم
2- باز با بچ فايل داس و Pkzip آن را فشرده مي كنم
3- با نام و مسير دلخواه كاربر ذخيره مي كنم


حالا :

اولا آيا طريق صحيحي را مي پيمايم ؟
دوما كپي از بانك در حاليكه به آن متصل هستم اشكالي ايجاد نمي كند ؟
سوما كه قبلا هم با آن مشكل داشتم اين بود كه وقتي از بچ فايل داس براي فشرده سازي استفاده مي كنم بنا به علتي بايد عمل ذخيره سازي را دو بار انجام دهم زيرا دفعه اول دستور بعد از اجراي بچ فايل اجرا نمي شود و دفعه دوم عمل ذخيره سازي تكميل مي شود .


بخاطر اين مشكل تصميم دارم از يك dll يا كامپوننت مناسب تحت ويندوز استفاده كنم . البته Xzip رو امتحان كردم اما عمل نمي كند . حالا اساتيد گرانقدر اگر چنين امكاني در اختيار دارند راهنمايي بفرمايند ممنون خواهم شد .

nabeel
پنج شنبه 24 بهمن 1387, 19:48 عصر
سلام دوست عزیز

راه حل درست و منطقی رو در پیش گرفتید

تهیه نسخه پشتیبان در حالت اتصال به Back End هیچ مشکلی رو ایجاد نمیکنه فقط به یک مورد توجه داشته باشید که تا حد امکان , Front End در حال اتصال به جدولی در داخل Back End از طریق Action Query نباشه . ( به طور مثال فرمی مرتبط با این نوع آبجکتها باز نباشه )

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


یک توصیه : جهت حصول یک نتیجه بدون خطا قبل از عملیات فشرده سازی فایل Back ٍدی کار Compat/Repair رو هم انجام بدید . این عملیات احتمال خطای عنوان شده در بند قبلی رو هم به طور کامل پوشش میده .

در خصوص معرفی DLL , محصول شرکت Xceed (http://xceed.com/) جایگاه خوبی داره ولی تصور میکنم کار با اون یک مقدار براتون مشکل باشه . متاسفانه در خصوص بقیه Dll های موجود اطلاع چندانی ندارم ( یه باز توی یکی از تاپیکها یه فایل Dll در این رابطه دیدم ولی خاطرم نیست کجا ... )

موفق باشید

Mahsa Hatefi
جمعه 25 بهمن 1387, 08:31 صبح
بازم سلام

من مي روم كه اين Xceed رو ببينم چيه ، اما دوستان عزيز در صورتي كه روش ساده اي تحت ويندوز سراغ دارن ممنون مي شم راهنمايي كنن . در ضمن Xzip رو هم كه توي همين فوروم معرفي شده بود رو اگر دوستي تونسته ازش جواب بگيره لطفا اطلاع بدن .

nabeel
جمعه 25 بهمن 1387, 10:28 صبح
سلام

XZip رو دیدیم , جالبه .یه مثال ساده براتون آماده کردم اونو اجرا کنید احتمالاً مشکل شما رو حل میکنه .

نکات :

فولدر رو توی درایو C قرار بدید

XZip.dll رو توسط دستور زیر رجیستر کنید


regsvr32 C:\Sample BackUp Zip\XZip.dll

برنامه رو اجرا کنید

فایل بک آپ توی فولدر BackUp Folder ایجاد میشه

توضیح : شما میتونید خودتون مسیرها رو به صورت متغیر ایجاد کنید , به نتهای تاریخ اضافه کنید و ...

موفق باشید


28240

Mahsa Hatefi
جمعه 25 بهمن 1387, 14:18 عصر
ممنون دوست من

اشكال كار من توي رجيستر كردن بود . درست شد .
حالا لطفا بفرماييد عمل رجيستر رو چطوري با كد بايد موقع نصب روي سيستم كاربر انجام بدم . روي سيستم خودم خوب مشكلي ندارم . اما بهترين و ساده ترين روش كدام است ؟

آيا يه بچ فايل بنويسم و موقع نصب اونو فراخواني كنم ؟

nabeel
جمعه 25 بهمن 1387, 19:17 عصر
سلام

نه دوست من . شما نیاز به رجیستر شدن اونها قبل از اجرا دارید . برای اینکار هم از یک برنامه SetUp ساز استفاده کنید . اجرای Batch File رو توصیه نمیکنم .

سعی کنید نحوه ارجاع به کامپوننت رو به اون صورتی که براتون نوشتم تغییر بدید .

موفق باشید .

e601
جمعه 25 بهمن 1387, 19:34 عصر
ممنون دوست من

اشكال كار من توي رجيستر كردن بود . درست شد .
حالا لطفا بفرماييد عمل رجيستر رو چطوري با كد بايد موقع نصب روي سيستم كاربر انجام بدم . روي سيستم خودم خوب مشكلي ندارم . اما بهترين و ساده ترين روش كدام است ؟

آيا يه بچ فايل بنويسم و موقع نصب اونو فراخواني كنم ؟

با عرض سلام خدمت Mahsa Hatefi بزرگوار

برای رجیستر کردن Runtime میتونید از دستور Shell کمک بگیرید. بصورت زیر :



Shell "regsvr32 " & Chr(34) & Path & Chr(34)


بد نیست دستور آنرجیستر کردن رو هم داشته باشید. فقط کافیه بعد از عبارت regsvr32 سوئیچ U/ رو اضافه کنید. بصورت زیر :



Shell "regsvr32 /U " & Chr(34) & Path & Chr(34)


توضیح در مورد (Chr(34 : با توجه به اینکه مسیر فایل مورد نظر (یعنی همون Path در دستورات بالایی) باید درون "" مقابل عبارت regsvr32 قرار بگیره و کل عبارت پاس شده به دستور Shell نیز باید درون "" قرار بگیره بنابراین ناچاریم در ابتدا و انتهای مسیر پاس شده به regsvr32 کد اسکی کاراکتر " رو قرار بدیم تا دچار خطا نشیم

موفق باشید...

e601
جمعه 25 بهمن 1387, 19:50 عصر
راستی یادم رفت اینو بگم. پس از اجرای دستوراتی که در پست قبلی خدمتتون عرض کردم ، پیغام پیش فرض ویندوز که متنش بصورت زیر هست نمایش داده میشن !


ِDllRegisterServer in Path succeeded

در صورتی که مایل به نمایش این پیغام در کامپیوتر کاربرتون نیستید سوئیچ s/ در خدمت شماست. بصورت زیر عمل کنید :



Shell "regsvr32 /s " & Chr(34) & Path & Chr(34)


همینطور برای آنرجیستر کردن.

موفق باشید...

nabeel
جمعه 25 بهمن 1387, 23:21 عصر
سلام به حضور دوستای عزیز

دوست گرامی , سعی کنید تا حد امکان هر کاری رو از طریق اصولیش انجام بدید .

Mahsa Hatefi گرامی , دستورات معادل کم نیستند ولی هر یک دارای محدودیتهایی و گاهاً نقائصی .

پروسه بر پا سازی نرم افزارتون رو در داخل یک دستگاه دیگه بر مبنای یک برنامه SetUp ساز انجام بدید اینجور برنامه هایی میتونن خیلی از کارهایی رو که شما میخواید انجام بدید رو به صورت خودکار و با کمترین احتمال خطا اجرا کنن , به طور مثال :

نصب فایلها در مسیر مورد نظر به صورت شرطی

رجیستر کردن کامپوننتها به صورت شرطی

ایجاد Shortcut به برنامه مورد نظر در مکانهای مختلف و ....

اینجوری دیگه جهت ارائه نسخه جدید شما تنها نیاز به ارسال فایل اجرایی آماده شده توسط برنامه SetUp ساز دارید .

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

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

در روش ارائه شده در تاپیکهای قبلی شما دو حالت پیش رو دارید :

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

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

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

ضمناً یک نکته رو فراموش نکنید که : در صورت اجرای برنامه و عدم وجود کامپوننت مورد نظر بر روی سیستم ( قبل از پروسه رجیستر کردن ) , اکسس اون کامپوننت رو در حالت Missing در نظر میگیره .
در این جور مواقعی اگه دستور Shell در جایی نوشته شده باشه که بعد از اون فراخوانی وجود داشته باشه , دیگه ممکنه هیچ وقت نوبت به اجرای دستور Shell نرسه و برنامه با یک خطا کل پروسه رو متوقف کنه .

پس در حالت استفاده از دستور Shell , این دستور در همون ابتدا باید اجرا بشه وگرنه پتانسیل خطا در هنگام اجرا بالا میره

البته اگه Batch File رو از محیط بیرون فایل اجرا میکنید و کاربر هم اینکار رو انجام میده , اونهم میتونه به عنوان یک راه حل مقطعی مورد استفاده قرار بگیره ( البته اگه کاربرتون میره کامپوننتها رو توی مسیر مورد نظر هم قرار بده و ... ) ما از این روش معمولاً برای اعمال تغییرات از روی سرور استفاده میکنیم .

انتخاب با خودتونه . با توجه به نیاز و سطح عملیاتی مورد نظر انتخابهای متفاوتی پیش روتونه .

موفق باشید