PDA

View Full Version : سوال: مشکل در backup گیری در حالت linktable



pmoshir
یک شنبه 20 بهمن 1387, 19:32 عصر
با سلام خدمت همکاران گرامی

در backup گیری در حالتی که جداول لینک هستند مشکل دارم.وقتی دکمه مورد نظر رو میزنم فایل در مسیر ایجاد میشه ولی جداول انتقال داده نمیشه.
اگر در گذاشتن restor از همین backup هم کمکم کنید ممنون میشم.
با تشکر

pmoshir
یک شنبه 20 بهمن 1387, 20:25 عصر
دوستان با عرض پوزش فراموش کردم جدول لینک شده رو ضمیمه کنم.این فابل رو دریافت کنید لطفا.

pmoshir
دوشنبه 21 بهمن 1387, 19:26 عصر
دوستان مجدد خواهش میکنم کمکم کنید.واقعا نیاز دارم.

e601
دوشنبه 21 بهمن 1387, 20:48 عصر
با سلام

دوست عزیز فایل زیر رو دریافت کنید. مشکل شما حل شده

چند جا در کدتون اشکال کوچیکی وجود داشت که هم اصلاح کردم و هم توضیح دادم

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

pmoshir
دوشنبه 21 بهمن 1387, 22:08 عصر
متشکرم آقای مسعودی
فقط یک مشکلی هست هنگامی که فایل backup رو با اکسس باز میکنیم باز هم جداول بصورت لینک از همان فایل لینک شده کپی می شود.میخواهم جداول لینک نباشه.
یک پیشنهاد دارم ولی نمیدونم شدنی هست یا نه آیا میشه فایلی که جداول از آن لینک شده در فایل جاری ازش کپی تهیه کرد؟

e601
سه شنبه 22 بهمن 1387, 00:51 صبح
متشکرم آقای مسعودی
فقط یک مشکلی هست هنگامی که فایل backup رو با اکسس باز میکنیم باز هم جداول بصورت لینک از همان فایل لینک شده کپی می شود.میخواهم جداول لینک نباشه.

دوست عزیز در این مورد چیزی عنوان نکرده بودید


یک پیشنهاد دارم ولی نمیدونم شدنی هست یا نه آیا میشه فایلی که جداول از آن لینک شده در فایل جاری ازش کپی تهیه کرد؟

شدنی که هست شما میتونی با استفاده از دستور CopyObject از جدول لینک شده موجود در همین فایل یک کپی موقت بگیرید (با این کار لینک جدول موقت تولید شده با جدول اصلی از بین میره). بعد این جداول موقت رو صادر کرده و در نهایت اونها رو با دستور DeleteObject حذف کنید.
اما به هر حال اینکار نواقصی هم داره.
مثلا با این حذف و اضافه های زیادی که انجام میشه به دلایل مختلف سایز برنامه میره بالا (البته میتونید با Compact کردن برنامه کمی این حجم رو کم کنید)

2 تا پیشنهاد دارم:
1. چرا از دستور BackupDatabase استفاده نمیکنید؟ کافیه آین آیتم رو در منوها قرار بدین و بقیه کارها رو به اون بسپارید
2. اگه بر روش خودتون اصرار دارید حداقل بجای اینکه سعی کنین تمام جداول موجود رو Export کنید(که با اینکار همه جداول سیستمی هم درون حلقه قرار میگیرن) ، یک لیست از جداول مهم تر که باید پشتیبان گیری بشن رو آماده و فقط همونها رو با روشهای یاد شده Export کنید

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

pmoshir
سه شنبه 22 بهمن 1387, 10:40 صبح
جناب مسعودی فکر میکنم اگه از یک فرم که کاملا فارسیه استفاده کنیم جلوه زیبا تری داشته باشه.استفاده از backup database خود اکسس زیاد جالب نیست.ضمنا من فقط میخوام جداول کپی بشن با استفاده از backupdatabase تمامی فایل کپی خواهد شد.

من واقعا در حد شما نیستم اگر کدهای من رو اصلاح کنید و آن طوری که خودتون صلاح میدونید تغییر بدید ممنون میشم.

مجدد از همکاری شما تشکر میکنم.

e601
سه شنبه 22 بهمن 1387, 16:07 عصر
با سلام

من فایل شما رو کمی تغییر دادم. نگاه کنید متوجه تغییرات میشید. توضیحات کامل هم جهت راهنمایی شما اضافه شده
بجای اینکه تمام جداول منتقل بشن فقط جداولی که اسمشون در ListBox هست صادر میشن

موفق باشید
التماس دعا...

pmoshir
سه شنبه 22 بهمن 1387, 23:34 عصر
با تشکر فراوان از جنابعالی که مشکل من رو حل کردید بسیار ممنونم.

Mahsa Hatefi
پنج شنبه 24 بهمن 1387, 18:46 عصر
سلام

يه سوال : اگر از داخل برنامه Front_End ، فقط از بانك كه Back_End است در حاليكه اتصال برقرار است كپي بگيريم مشكلي بوجود مي آيد يا حتما بايد از روش بيان شده در اينجا استفاده كرد يعني ساخت يك بانك و انتقال جداول به آن ؟

e601
پنج شنبه 24 بهمن 1387, 23:45 عصر
يه سوال : اگر از داخل برنامه Front_End ، فقط از بانك كه Back_End است در حاليكه اتصال برقرار است كپي بگيريم مشكلي بوجود مي آيد

دوست عزیز منظورتون از برقرار بودن اتصال چیه؟ اگه از روش Bound استفاده میکنید یعنی فرمها با جداول مستقیما ارتباط دارن ، بهتره که فرمها رو ببندین تا ارتباط ها قطع بشه و بعد عملیات مورد نظر رو انجام بدین در غیر اینصورت مشکلی نیست


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

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

Mahsa Hatefi
جمعه 25 بهمن 1387, 08:26 صبح
سلام دوست بزرگوار

فرمهام همه unbound هستن فقط يك Recordset ابتداي برنامه بازميشه تا يكسري اطلاعات لازم رو در فرمها و گزارشات پر كنه مثل : نام شركت - تاريخ تاسيس - كداقتصادي - آدرس - تلفن و.... و دست آخر كه برنامه بسته مي شه اون ركوردست هم بسته مي شه .
البته شايد بهتر باشه بعد از بازشدن ركوردست ، مقادير مربوطه رو به كانست هايي بدم و ركوردست رو ببندم .
يه سوال ديگه : اگه كمبوباكسي توي فرم باشه كه اطلاعاتشو از يه جدول مي گيره چي ؟ موقع كپي بانك مشكلي ايجاد مي كنه ؟
راهنمايي دوستان مورد امتنان خواهد بود .

e601
جمعه 25 بهمن 1387, 12:50 عصر
سلام دوست بزرگوار
فرمهام همه unbound هستن فقط يك Recordset ابتداي برنامه بازميشه تا يكسري اطلاعات لازم رو در فرمها و گزارشات پر كنه مثل : نام شركت - تاريخ تاسيس - كداقتصادي - آدرس - تلفن و.... و دست آخر كه برنامه بسته مي شه اون ركوردست هم بسته مي شه .البته شايد بهتر باشه بعد از بازشدن ركوردست ، مقادير مربوطه رو به كانست هايي بدم و ركوردست رو ببندم .

متقابلا سلام
حتما این کار رو بکنید نیازی به برقراری دائم ارتباط نیست. خود میکروسافت هم به همین نتیجه رسیده و در معماری تکنولوژی جدیدش یعنی ADO .NET بحث ارتباط غیر دائم رو مطرح کرده


يه سوال ديگه : اگه كمبوباكسي توي فرم باشه كه اطلاعاتشو از يه جدول مي گيره چي ؟ موقع كپي بانك مشكلي ايجاد مي كنه ؟ راهنمايي دوستان مورد امتنان خواهد بود .
مشکلی پیش نمیاد دوست عزیز. این موردی که شما نگرانش هستید (و این نگرانی رو بعنوان یک برنامه نویس تحسین میکنم) موقعی پیش میاد که عملیاتی از قبیل حذف و اضافه اطلاعات در حال رخ دادن باشه یا رکوردستی باز باشه یا اینجور چیزا که موقع رونوشت برداری (کپی گرفتن) از فایل ، برنامه رو دچار خطای احتمالی میکنه
به هر حال برای اطمینان از عدم بروز هر گونه خطایی میتونید یک سری از تمهیدات رو در نظر بگیرید. پیشنهاد میکنم در فرمهایی که عملیات اجرایی انجام میدن خاصیت Modal و Pop Up فرم رو yes کنید تا کاربر نتونه حین کار به بخش بک آپ گیری مراجعه کنه

نکته اینه که بخشهای حساس رو کنترل کنید تا کارهایی که متضاد همدیگه هستند صورت نگیرن هر چند که اصل استفاده از روش unbound خیلی از مسائل رو پوشش میده

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

pmoshir
پنج شنبه 04 خرداد 1391, 13:54 عصر
جناب آقاي مسعودي عزيز و ساير دوستان مشكلي پيش اومده كه در اكسس 2007 عمليات backup صورت نميگيرد و ايراد ميگيرد.
اگر كمك كنيد ممنون ميشم

pmoshir
دوشنبه 08 خرداد 1391, 09:07 صبح
دوستان كمك كنيد لطفا

emami.sie
دوشنبه 08 خرداد 1391, 09:34 صبح
با سلام و عرض خسته نباشد خدمت دوستان (این راه حل فقط یک پیشنهاده...)
راستش من برنامه ای تحت شبکه دارم (شبکه WorkGroup) که البته سیستم خودم رو به عنوان سرور (سورس دیتابیس) قرار دادم و برای اینکه به تمام مشکلات عنوان شده خاتمه بدم از روش زیر استفاده می کنم (احتمالا دوستان باهاش آشنایی دارن)
ضمن اینکه مشکلی که دوستمون در مورد باز بودن Back-End هنگام تهیه بک آپ عنوان کردن برای من که برنامم تحت شبکه هست و نمیشه پیش بینی کرد که چه زمانی هیچ کاربری از برنامه استفاده نخواهد کرد تا من بتونم بک آپ بگیرم هم حل شده
روش:
فايل ضمیمه رو روی سرور قرار بدید و با notepad ويرايش کنید و مسير فايل روي سرور رو بهش بدید
هرزمان شما اين فايل را اجرا کنيد از فايل مورد نظر شما در مسير دلخواهتون کپي ميگيرد،البته روي سرورتون... سپس
start\accessories\system tools\ Scheduled Tasks
رو اجرا کنيد و برنامه را انتخاب و زمان بک اپ گيري را تعيين نماييد (در زمانهای دلخواه به صورت اتومات از بانکتون کپی تهیه خواهد شد با ذکر تاریخ و ساعت در نام فایل کپی شده)
موفق باشید
یا علی

pmoshir
دوشنبه 08 خرداد 1391, 13:14 عصر
با تشكر از شما
ميشه در مورد اصلاح فايل بيشتر توضيح بديد چون من تغيير دادم ولي اجرا نشد.

emami.sie
سه شنبه 09 خرداد 1391, 08:57 صبح
با تشكر از شما
ميشه در مورد اصلاح فايل بيشتر توضيح بديد چون من تغيير دادم ولي اجرا نشد.

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

pmoshir
سه شنبه 09 خرداد 1391, 11:04 صبح
با تشكر
البته من حدس ميزنم اين كار بايد با يوزرAdmin صورت بگيره چون تو كلاينت كار نميكنه.درسته؟؟؟

emami.sie
سه شنبه 09 خرداد 1391, 11:26 صبح
با تشكر
البته من حدس ميزنم اين كار بايد با يوزرAdmin صورت بگيره چون تو كلاينت كار نميكنه.درسته؟؟؟
سلام
نه اینطور نیست (ببینید این یک دستور کپی سادست که میتونید در قسمت Cmd‌ ویندوزتون هم تستش کنید)
کاری که من کردم: طبق زمانبندی روزانه که تعریف کردم در ساعتی خاص سیستمم روشن میشه و چون یوزرم پسورد داره اصلا وارد ویندوز نمیشه، و سر ساعتی که در قسمت Schedule Task تعریف کردم کپی از دیتابیسم تهیه میکنه و بعدش هم سیستمم خاموش میشه...
موفق باشید
یا علی

pmoshir
سه شنبه 09 خرداد 1391, 13:04 عصر
دوست عزيز من در حال حاضر تو شبكه domain كار ميكنم در هنگام اجرا اين فايل با اينكه مسير ها رو تغيير دادم عمليات كپي صورت نميگيره.خواهشي كه دارم اينه كه جاهايي از كد كه بايد اصلاح بشه رو درج كنيد.با تشكر

azadich
سه شنبه 08 اسفند 1391, 22:36 عصر
دوست عزیز منظورتون از برقرار بودن اتصال چیه؟ اگه از روش Bound استفاده میکنید یعنی فرمها با جداول مستقیما ارتباط دارن ، بهتره که فرمها رو ببندین تا ارتباط ها قطع بشه و بعد عملیات مورد نظر رو انجام بدین در غیر اینصورت مشکلی نیست


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

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

e601
پنج شنبه 10 اسفند 1391, 10:30 صبح
سلام
یکی از دوستان در مورد بک آپ گیری که در این تاپیک مطرح شده یک سوال خصوصی از من پرسید که من ترجیح دادم در اینجا پاسخ بدم شاید مشکل یه نفر دیگه هم حل بشه.

راستش من خیلی وقته دیگه با اکسس و vb6 و ... کار نمیکنم و کدها درست یادم نیست. الانم فایل آرشیوش رو یه نگاه کردم تا بتونم راهنمایی کنم. ضمنا همونطوری که در یکی از پستها نوشته بودم فقط فایل اون دوستمون رو اصلاح کردم. خودم در آخرین برنامه ای که با اکسس نوشتم و الان هم دارن ازش استفاده میکنن از روش زیر استفاده کردم :

مدل برنامه نویسی بصورت front end/back end هست یعنی بخش اینترفیس برنامه که حاوی فرمها و گزارشات و ... هستش (همون بخش fron end) در یک فایل و جداول و اطلاعات در یک فایل دیگه (همون بخش back end) قرار میگیره.
بعد شما در فایل front end ، جداول لینکی درست میکنید که به فایل back end لینک میشن. حالا شما برای کار کردن با اطلاعات در فایل front end خیلی راحت کار میکنید. یعنی اصلا لینک بودن جداول رو در نظر نمیگیرید و فرض میکنید جداول واقعا برای همون فایل front end هستن. شما کارتون رو بصورت معمولی انجام میدین و در پس زمینه ، اطلاعات خود به خود در فایل back end هم ثبت میشه.

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


FileCopy "source", CurrentProject.Path & "\Backup\" & Me.txtFileName & ".mdb"
MsgBoxFa "Finished"


میتونید یه فرم درست کنید (شکل و شمایلش به سلیقه خودتون بستگی داره) که حاوی یه تکست باکس و یه دکمه باشه. کد بالا رو در رویداد click دکمه قرار بدید و بجای source آدرس فایل back end تون رو بذارید. همونطوری که مشاهده میکنید کاربر میتونه یه نام دلخواه برای بک آپش قرار بده که txtFileName در واقع نام همون تکست باکس هست.

امیدوارم مفید بود باشه. ضمنا من این کد رو با اکسس 2003 نوشتم و با نسخه 2007 و 2010 هم کار نکردم....
موفق باشید...

azadich
پنج شنبه 10 اسفند 1391, 10:38 صبح
سلام
یکی از دوستان در مورد بک آپ گیری که در این تاپیک مطرح شده یک سوال خصوصی از من پرسید که من ترجیح دادم در اینجا پاسخ بدم شاید مشکل یه نفر دیگه هم حل بشه.

راستش من خیلی وقته دیگه با اکسس و vb6 و ... کار نمیکنم و کدها درست یادم نیست. الانم فایل آرشیوش رو یه نگاه کردم تا بتونم راهنمایی کنم. ضمنا همونطوری که در یکی از پستها نوشته بودم فقط فایل اون دوستمون رو اصلاح کردم. خودم در آخرین برنامه ای که با اکسس نوشتم و الان هم دارن ازش استفاده میکنن از روش زیر استفاده کردم :

مدل برنامه نویسی بصورت front end/back end هست یعنی بخش اینترفیس برنامه که حاوی فرمها و گزارشات و ... هستش (همون بخش fron end) در یک فایل و جداول و اطلاعات در یک فایل دیگه (همون بخش back end) قرار میگیره.
بعد شما در فایل front end ، جداول لینکی درست میکنید که به فایل back end لینک میشن. حالا شما برای کار کردن با اطلاعات در فایل front end خیلی راحت کار میکنید. یعنی اصلا لینک بودن جداول رو در نظر نمیگیرید و فرض میکنید جداول واقعا برای همون فایل front end هستن. شما کارتون رو بصورت معمولی انجام میدین و در پس زمینه ، اطلاعات خود به خود در فایل back end هم ثبت میشه.

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


FileCopy "source", CurrentProject.Path & "\Backup\" & Me.txtFileName & ".mdb"
MsgBoxFa "Finished"


میتونید یه فرم درست کنید (شکل و شمایلش به سلیقه خودتون بستگی داره) که حاوی یه تکست باکس و یه دکمه باشه. کد بالا رو در رویداد click دکمه قرار بدید و بجای source آدرس فایل back end تون رو بذارید. همونطوری که مشاهده میکنید کاربر میتونه یه نام دلخواه برای بک آپش قرار بده که txtFileName در واقع نام همون تکست باکس هست.

امیدوارم مفید بود باشه. ضمنا من این کد رو با اکسس 2003 نوشتم و با نسخه 2007 و 2010 هم کار نکردم....
موفق باشید...
روی این قسمت ارور دادMe.txtFileName بعد میخوام مسیر ذخیره از کاربر بپرسه و جای فایل که باید کپی زده بشه تشخیص بده و یه دکمه رستور هم بزاریم که فایل کپی شده بشه جایگزین قبلی کردممنون

e601
پنج شنبه 10 اسفند 1391, 11:59 صبح
روی این قسمت ارور دادMe.txtFileName بعد میخوام مسیر ذخیره از کاربر بپرسه و جای فایل که باید کپی زده بشه تشخیص بده و یه دکمه رستور هم بزاریم که فایل کپی شده بشه جایگزین قبلی کردممنون

عرض کردم که دوست عزیز. شما یه تکست باکس روی فرم بذار و اسمش رو بذار txtFileName یا هر چیز دیگه ای که دوست داری. البته نمیدونم شایدم در نسخه های جدید اکسس باید خاصیت Value رو مستقیما مقدار دهی کنی. از Me.txtFileName.Value هم استفاده کن ببین چی میگه.

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


Dim dlgSelFolder As FileDialog

Set dlgSelFolder = Application.FileDialog(msoFileDialogFolderPicker)

With dlgSelFolder
.AllowMultiSelect = False
.InitialFileName = CurrentProject.Path
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
strFilePath = vrtSelectedItem
Next vrtSelectedItem
End If
End With

بعد از اجرای کد بالا متغیر strFilePath حاوی مسیر انتخابی کاربر هست که شما باید نام فایل بک آپ رو بهش بچسبونی.

برای ری استور کردن هم که میتونی از همین روش بصورت برعکس استفاده کنی...

azadich
پنج شنبه 10 اسفند 1391, 17:05 عصر
عرض کردم که دوست عزیز. شما یه تکست باکس روی فرم بذار و اسمش رو بذار txtFileName یا هر چیز دیگه ای که دوست داری. البته نمیدونم شایدم در نسخه های جدید اکسس باید خاصیت Value رو مستقیما مقدار دهی کنی. از Me.txtFileName.Value هم استفاده کن ببین چی میگه.

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


Dim dlgSelFolder As FileDialog

Set dlgSelFolder = Application.FileDialog(msoFileDialogFolderPicker)

With dlgSelFolder
.AllowMultiSelect = False
.InitialFileName = CurrentProject.Path
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
strFilePath = vrtSelectedItem
Next vrtSelectedItem
End If
End With

بعد از اجرای کد بالا متغیر strFilePath حاوی مسیر انتخابی کاربر هست که شما باید نام فایل بک آپ رو بهش بچسبونی.

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