PDA

View Full Version : تهیه بک آپ از داخل خود فایل اکسس توسط کاربر



ahmad2006
سه شنبه 16 خرداد 1385, 13:51 عصر
با سلام
می خواهم داخل برنامه امکانی قرار بدهم که کاربر با فشار کلید بک آپ تهیه نماید .
البته بک آپ جدید را در محل جدید یا با شماره جدید حفظ نماید.
با تشکر

moustafa
سه شنبه 16 خرداد 1385, 14:35 عصر
docmd.copyobject یا ماکرویcopyobject از اشیاءاز قبیل جدول فرم ..... کپی تهیه می کند که مسیر ان در یکی از ارگومانهای ماکرو یا کد مربوط باید مشخص شود

MM_Mofidi
سه شنبه 16 خرداد 1385, 17:26 عصر
من برای کاهش حجم داده های پشتیبان معمولا فقط جداول را کپی میکنم آن هم حتما zip شده
اینم تابع Export تمام جداول با ارتباطهایشان
کار خودم هست تا حالا باهاش مشکلی نداشتم اگر مشکلی داشتید مطرح کنید:خجالت:

Function Export_All_Tabels(ByVal MDB_FileNamePath As String, _
Optional ByVal RelationSh As Boolean = True, _
Optional ByVal SystemTables As Boolean = False, _
Optional ByVal OverWriteAll As Boolean = True) As Boolean

On Error GoTo Export_All_Tabels_Err_Handler
'*************** Init ************
Export_All_Tabels = False
'*********************************
Dim Des_Name As String
Dim AllTableDefs As TableDefs
Dim MyDb As Database
Dim LErrAction As VBA.VbMsgBoxResult

Set MyDb = CurrentDb
Set AllTableDefs = MyDb.TableDefs

For i = 0 To AllTableDefs.Count - 1
ANS = vbNullString
If (AllTableDefs(i).Attributes = 0) Or SystemTables Then _
ANS = Export_To_External_Database(MDB_FileNamePath, AllTableDefs(i).Name, _
AllTableDefs(i).Name, acExport, acTable, OverWriteAll)
If Len(ANS) > 0 Then
Debug.Print AllTableDefs(i).Name & vbTab & "Exported Correctly as " & ANS
Else
Debug.Print "Some Error Accured on Exporting" & vbTab & AllTableDefs(i).Name
End If
Next
MyDb.Close
'If RelationSh Then Set MyDb.CreateRelation = CurrentDb.Relations
'For j = 0 To AllTableDefs.Count - 1
If RelationSh Then
Set MyDb = OpenDatabase(MDB_FileNamePath)
Dim rel As Relation
Dim L As Field
For i = 0 To CurrentDb.Relations.Count - 1
Set rel = MyDb.CreateRelation

rel.Name = CurrentDb.Relations(i).Name
rel.Table = CurrentDb.Relations(i).Table
rel.ForeignTable = CurrentDb.Relations(i).ForeignTable
rel.Attributes = CurrentDb.Relations(i).Attributes
For j = 0 To CurrentDb.Relations(i).Fields.Count - 1
Set L = rel.CreateField
L.Name = CurrentDb.Relations(i).Fields(j).Name
L.ForeignName = CurrentDb.Relations(i).Fields(j).ForeignName
rel.Fields.Append L
Next
MyDb.Relations.Append rel
Debug.Print "Crete relation from " & CurrentDb.Relations(i).Table & _
vbTab & "To " & CurrentDb.Relations(i).ForeignTable
Next
MyDb.Close
End If

If LErrAction <> vbIgnore Then Export_All_Tabels = True Else Export_All_Tabels = False
Exit Function
Export_All_Tabels_Err_Handler:
ANS = MsgBox(Err.Number & vbCrLf & Err.Description & vbCrLf & "Do you want to Try Again?" _
, vbCritical + vbAbortRetryIgnore)
Select Case ANS
Case vbRetry
LErrAction = vbRetry
Resume
Case vbIgnore
LErrAction = vbIgnore
Resume Next
Case vbAbort
LErrAction = vbAbort
Export_All_Tabels = vbNullString
Exit Function
Case Else
LErrAction = vbAbort
Export_All_Tabels = vbNullString
Exit Function
End Select
End Function

mmha_85
سه شنبه 16 خرداد 1385, 17:46 عصر
آیا این کد برای برنامه هایی که دیتا بیس آنها روی sql و خود برنامه اکسس هست هم کاربرد داره یا اینکه باید دیتا بیسم هم اکسس باشه؟

moustafa
سه شنبه 16 خرداد 1385, 19:43 عصر
مرسی اقای مفیدی
در خود اکسس بوسیله کد زیر می تونی هر ابجکتی را به هر مسیر از فلاپی گرفته تا هارد ارسال کنی
...,DoCmd.TransferDatabase acExport
فقط فرقش با تابع اقای مفیدی اینکه zip نیست در ضمن sqlserver را نیز ساپورت میکنه
اقای مفیدی ممکنه با نحوه استفاده از تابع export خود جدول tbl1 را در یک فلاپی با تمام ارگومانهای ان بنویسی

mmha_85
سه شنبه 16 خرداد 1385, 22:12 عصر
آقا مصطفی
از این کدی که دادی ممنون. فقط یه مسئله هستش و اون هم اینکه برای من یک مقدار حجم فایل مهمه و اگه بشه فایل رو زیپ کرد خیلی بهتره و چون من دیتا بیسم روی sql هستش هنوز برام این سواله که اون کدی که دوستمون mm_mofidi نوشتن برای دیتابیس sql هم مفید هستش یا نه و یک سوال دیگه هم که داشتم اینکه این فایل زیپ، با چی زیپ شده؟ با زیپ خود ویندوز و یا با برنامه winzip؟ اگر با winzip زیپ شده از کدوم فرمت استفاده شده؟ (منظورم اینه که مثلا فایل SFX هستش یا یک زیپ معمولیه؟)
ممنون از کمکتون

moustafa
سه شنبه 16 خرداد 1385, 22:50 عصر
سوالات شما را باید اقا ی مفیدی زحمتشو بکشند جواب بدند
اما من جدوالم را در یک برنامه اکسس export یا کپی می کنم سپس ان برنامه اکسس را zip یا rar میکنم
tools/utillitydatabase/compact and repair
تا اندازه ای حجم فایل را کاهش میده

mmha_85
چهارشنبه 17 خرداد 1385, 11:12 صبح
سلام
حدس زدم اگه شرایطی رو که دارم براتون توضیح بدم شاید بهتر بشه باهم همفکری کنیم.
راستش من 5 تا انبار در مناطق مختلف ایران دارم که می خوام کاربرم با زدن یک دکمه خیلی ساده از دیتا بیسش بک آپ بگیره و من هم تقریبا هر 2 ، 3 روز یه بار به کامپوتر اون وصل می شم و بک آپش رو بر می دارم. متاسفانه به خاطر زیرساخت ضعیف مخابراتی، سرعت این کار خیالی کمه و به همین خاطر حجم فایل برای من خیلی مهمه و من هم باید اون بک آپ ها رو از تهران از روی کامپیوتر اون بردارم.
از طرفی هم من دیتا بیسم روی sql و برنامم روی access هستش و اگه بتونم با گذاشتن یک کلید در خود برنامم این امکان رو به کاربرم بدم که بک آپ بگیره و خودم مستقیما برم اون بک آپ رو از آدرس مورد نظرم بردارم خیلی خوب می شه. چون من نمی تونم به کاربرم که چیزی از پشت برنامه سر در نمیآره بگم برو پشت برنامه و تیبلها رو export کن و اصلا فکر هم نمی کنم که صلاح باشه کاربر رو به پشت برنامه فرستاد.
اما در قسمت اول برای من مهم اینه که بتونم از sql با یک دکمه در برنامه بک آپ بگیرم و زیپ کردن برام در مرحله دوم اهمیت داره. چون من با ریموت دسکتاپ به کامپیوتر اون وصل می شم و خودم هم می تونم دیتابیس رو زیپ کنم. ( البته اگه نشه با اون کلید این کار رو کرد.)
با این شرایط اگه فکری به نظرتون می رسه، ممنون می شم که من رو راهنمایی کنین.

شاپرک
چهارشنبه 17 خرداد 1385, 11:42 صبح
ببینید به دردتون میخوره

شاپرک
چهارشنبه 17 خرداد 1385, 11:47 صبح
اینم یک ویزارد آماده :

mmha_85
چهارشنبه 17 خرداد 1385, 13:21 عصر
فایلهای جالبی بودند.ممنونم.
در مورد فایل اول دقیقا همون مشکلی رو دارم که قبلا گفتم. من تیبلهایی که می خوام ازشون بک آپ بگیرم توی sql هستن و من اونا رو به access لینک کردم. در صورتی که فایل اول از کل برنامه access بک آپ می گیره. من اینطوری متوجه شدم. اگر اشتباه می کنم لطفا راهنماییم کنید.
در مورد فایل دوم هم میشه لطفا یک مقدار توضیح بدین؟ من نفهمیدم دقیقا چی کار می کنه و در ضمن فرمتش هم برام جدید بود. اگه می شه در مورد این فرمت هم توضیح می دین؟
ممنون از لطفتون

moustafa
چهارشنبه 17 خرداد 1385, 16:08 عصر
شما میتونی برای برنامه های شعب تون یک ماکروی send object بذاری که جدوال مورد نظر را کاربر مربوط با یک کلیک باتن به ادرس ایمیل مرکز ارسال کنه بعد با یک union query دادها را تلفیق کنی یا با appenquery در یک جدول ادغام کنی (کلید بزاری تا دادها تکراری الصاق به جدول اصلی نشوند ) یا در ست منظور شما را متو جه نشدم
البته من هنوز فایلهای ارسالی شاپرک را ندیدم

mmha_85
چهارشنبه 17 خرداد 1385, 21:52 عصر
آقا مصطفی متاسفانه یکی از مشکلات ما اینه که برناممون نمی تونه وب بیس باشه تا با یک دکمه به ایمیل مرکز بفرسته فایل رو. چونکه انبارهای ما در نقاطی هستند که امکانات اینترنتی خیلی کمه. مثلا یکی از انبارهای ما در نشتارود هستش که اصلا نمی شه درست حسابی به اینترنت وصل شد. چه برسه که بخواد یک فایل رو اپلود کنه و بفرسته.
ما در مرحله اول باید فایل رو روی خود کامپیوتر انبار بک آپ بگیریم و با روش ریموت دسک تاپ به تهران منتقل کنیم.( کاری که در حال حاضر داریم می کنیم.) در مراحل بعدی برنامرو وب بیس می کنیم و اون کاری رو که شما گفتی انجام می دیم.
اما الان مشکل اینه که کاربر باید برای بک آپ گرفتن از برنامه خارج بشه. sql رو stop کنه. بره توی پوشه مورد نظر و از فایل کپی بگیره. بعدش دستی بیاد اونو پیست کنه تا بک آپ بگیره و بعدش باید اون رو زیپ کنه و ما بریم اون فایل زیپ رو برداریم.
من می خوام که همه این کارها رو با یک دکمه در داخل خود برنامه انجام بدم. البته اگرم زیپ نشد خیلی مهم نیست. اون در مرحله دوم برام اهمیت داره. در مرحله اول این مهمه که بشه بک آپ اتوماتیک گرفت.

moustafa
چهارشنبه 17 خرداد 1385, 22:52 عصر
DoCmd.CopyDatabaseFile "c:\export\tbl1.mdf", True, False
یا ماکروی CopyDatabaseFile
با سه ارگومان
اولی نام فایل جدید ومسیر ان فکر کنم با پسوند mdf
دومی ایا رونوشت شود یا نه ؟
سومی ایا کاربران باید به بانک ارتباط داشته باشند یا نه ؟

MM_Mofidi
چهارشنبه 24 خرداد 1385, 01:37 صبح
بهترین راه اجرای یک پروسیجر روی sql سرور است. به راحتی کار بکاپ گیری را انجام می دهد برای t-sql آن هم بهتر است یا به books on line مراجعه کنی یا در بخش sql اسنجا مطرح کنی.
این کد ها ممکن است با تغییراتی جواب دهد ولی شرایزی که کد با عدم موفقیت روبرو شواید طیاد خواهد بود

mmha_85
چهارشنبه 24 خرداد 1385, 07:52 صبح
با تشکر از همه دوستانی که در این بحث شرکت کردند و از نظراتشون استفاده کردیم.
بحث قشنگی بود و خیلی چیزا ازش یاد گرفتم. اگر کسی چیز دیگری هم به ذهنش می رسه ممنون می شم که در میون بذاره.
موفق باشید

شاپرک
چهارشنبه 24 خرداد 1385, 09:36 صبح
http://www.barnamenevis.org/forum/showthread.php?t=48150&page=2

hossein34
دوشنبه 19 تیر 1385, 10:16 صبح
با سلام
آقای MM_Mofidi یه تابع در مورد Export نوشته بودید ( صفحه یک) که جداول را Export می کرد.
وقتی من میخوام از این تابع استفاده کنم پیغام میده که Export_To_External_Database که ازش استفاده کردید تعریف نشده.
اگر ممکنه یه مثال بشکل یه فایل MDB بزنید ممنون میشم.
پیشاپیش سپاسگذارم.

MM_Mofidi
سه شنبه 12 دی 1385, 14:10 عصر
با سلام
آقای MM_Mofidi یه تابع در مورد Export نوشته بودید ( صفحه یک) که جداول را Export می کرد.
وقتی من میخوام از این تابع استفاده کنم پیغام میده که Export_To_External_Database که ازش استفاده کردید تعریف نشده.
اگر ممکنه یه مثال بشکل یه فایل MDB بزنید ممنون میشم.
پیشاپیش سپاسگذارم.
همینجاهست
http://barnamenevis.org/forum/showthread.php?t=56734&highlight=Export_To_External_Database

صبا9841
سه شنبه 01 اسفند 1385, 16:15 عصر
من برای کاهش حجم داده های پشتیبان معمولا فقط جداول را کپی میکنم آن هم حتما zip شده
Ecode]

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

MM_Mofidi
چهارشنبه 02 اسفند 1385, 12:02 عصر
برای استفاده از zip انواع و اقسام زیادی کد هست همینجا با یک جستجو شما میتوانید مقدار زیادی ActivX پیدا کنی که اینکار را به راحتی انجام میدهند.
من ممعمولا ترجیح میدم برای کاهش حجم ابتدا Compact & repair کنم بعد جداول را صادر کنم و بکمک یک ActivX آفایل حاصله را zip کنم.برای هر سه مورد اینجا هم کد هست هم کامپوننت بازم مشکلی بود مطرح کنید.بلد باشم جواب میدم.

صبا9841
پنج شنبه 03 اسفند 1385, 10:08 صبح
با سلام
آقای MM_Mofidi یه تابع در مورد Export نوشته بودید ( صفحه یک) که جداول را Export می کرد.
وقتی من میخوام از این تابع استفاده کنم پیغام میده که Export_To_External_Database که ازش استفاده کردید تعریف نشده.
اگر ممکنه یه مثال بشکل یه فایل MDB بزنید ممنون میشم.
پیشاپیش سپاسگذارم.

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

همینجاهست
http://barnamenevis.org/forum/showthread.php?t=56734&highlight=Export_To_External_Database
آدرسها که فرمودید ملاحظه شد درصورت امکان اگر اینها را بصورت نمونه db لطف کنید.متشکرم

انگوران
پنج شنبه 03 اسفند 1385, 11:23 صبح
کد زیر جدول table1 را از فایل موجود به درایو E و در فایلی به نام test به اسم tblbackup بصورت zip نشده می فرسته .

docmd.transferdatabase acexport , "microsoft access" , "e:\test.mdb" , actable , "table1" , "tblbackup"

mazoolagh
جمعه 04 اسفند 1385, 09:09 صبح
در مورد zip کردن فکر کنم نیازی به activex‌نباشه و میشه از امکانات commandline برنامه winzip هم استفاده کرد (با دستور shell)

صبا9841
شنبه 05 اسفند 1385, 07:52 صبح
کد زیر جدول table1 را از فایل موجود به درایو E و در فایلی به نام test به اسم tblbackup بصورت zip نشده می فرسته .

docmd.transferdatabase acexport , "microsoft access" , "e:\test.mdb" , actable , "table1" , "tblbackup"
از راهنمایی متشکرم. اگر بخواهیم مسیر ثابت (برنامه و بک آپ آنرا) به برنامه بدهیم از این دستور میتوان استفاده نمود اما چون محل نصب و همچنین محل اسقرار بک آپ بنا به شرایط کاربر تغییر میکند در اینصورت نه تنها عمل بک آپ انجام نمیشور بلکه این دستور هم در برنامه کاربرد ندارد

seyedaga
یک شنبه 15 مهر 1386, 09:26 صبح
سلام بر دوستان
چگونه می توانم make table بسازم خواهشا توضیح کامل باشد متشکرم seyedaga

h_mohamadi
جمعه 02 آذر 1386, 12:17 عصر
سلام و خسته نباشدمن یک برنامه دارم که با دلفی نوشته ام و بانک آن اکسس است می خواستم من را راهنمایی کنید که در دلفی از چه کامپوننتی استفاده کنم که بتوان آن را zip و مجددا بازگردانی کنم.h_m_1258@yahoo.com

mohsenna30ri
شنبه 03 آذر 1386, 07:20 صبح
سلام بر دوستان
چگونه می توانم make table بسازم خواهشا توضیح کامل باشد متشکرم seyedaga

بهتره شما اول یک کوئری معمولی ایجاد کنید سپس در حالت طراحی آنرا باز کرده و نوع آنرا به حالت
Make -table Query
تغییر بدین در این حالت از شما نام جدولی که خواستار ایجاد آن هستید پرسیده می شود و پس از اجرای کوئری ، جدولی با عنوان فیلدهای کوئری ایجاد می شود

saeedyaz
چهارشنبه 29 آبان 1387, 07:55 صبح
سلام
به نظر بنده از نرم افزارهای تخصصی بک اپ استفاده کنید
به دلایل زیر
1:کاهش حجم برنامه نویسی
2: زمانبندی متنوع
3:استفاده از رمز مطمئن
4: زیپ های مختلف
5: اجرای عملیات قبل وبعد از بک اپ
6:بک اپ بانکهای مختلف بصورت همزمان
من خودم نرم افزار ساده ای بنامcobian backup استفاده میکنم

mehdi_fiz
پنج شنبه 12 دی 1387, 04:45 صبح
سلام دوستان
خسته نباشد
من با اکسس زياد کار نکردم ولي با استفاده از فايل هاي که دوستان ديگه اينجا ضميمه کرده بودند از جداولم نسخه پشتيبان تهيه مي کنم ولي براي باز گردوندن اطلاعات نمي دونستم چه کار کنم اگه ممکنه راهنمايي کنيد ضمناً فايل بک آپ هم ضميمه کردم
جستجو هم کردم اما فايل هايي که ضميمه بود درست کار نمي کرد
قبلاً از راهنمايي شما عزيزان متشکرم

amirzazadeh
پنج شنبه 12 دی 1387, 08:04 صبح
سلام دوستان
خسته نباشد
من با اکسس زياد کار نکردم ولي با استفاده از فايل هاي که دوستان ديگه اينجا ضميمه کرده بودند از جداولم نسخه پشتيبان تهيه مي کنم ولي براي باز گردوندن اطلاعات نمي دونستم چه کار کنم اگه ممکنه راهنمايي کنيد ضمناً فايل بک آپ هم ضميمه کردم
جستجو هم کردم اما فايل هايي که ضميمه بود درست کار نمي کرد
قبلاً از راهنمايي شما عزيزان متشکرم
دوست عزيز ببينيد اين تاپيك به دردتون ميخوره.
http://www.barnamenevis.org/forum/showpost.php?p=564684&postcount=68
موفق باشيد
..........................

mehdi_fiz
جمعه 13 دی 1387, 02:54 صبح
دوست عزيز ببينيد اين تاپيك به دردتون ميخوره.
http://www.barnamenevis.org/forum/showpost.php?p=564684&postcount=68
موفق باشيد
..........................
سلام
ممنون از عنايتي که فرموديد
ولي فايل شما هم مشکل داشت و اطلاعات را که تغيير دادم اطلاعات پشتيبان را بر نگرداند
ضمناً فايل من از رابطه بين جداول هم بک آپ ميگره و مي خوام که روابط هم اگه جدولي حذف شد برگرده
قبلاً از توجه و راهنمايي که مي کنيد سپاس گذارم

amirzazadeh
شنبه 14 دی 1387, 08:03 صبح
سلام
ممنون از عنايتي که فرموديد
ولي فايل شما هم مشکل داشت و اطلاعات را که تغيير دادم اطلاعات پشتيبان را بر نگرداند
ضمناً فايل من از رابطه بين جداول هم بک آپ ميگره و مي خوام که روابط هم اگه جدولي حذف شد برگرده
قبلاً از توجه و راهنمايي که مي کنيد سپاس گذارم
دوست عزيز اگر كد كامند باتون ها رو به اين صورت اصلاح كنين فكر ميكنم مشكلتون برطرف بشه در ضمن كپي از تمامي بانك صورت ميگيره بنابراين ارتباطات رو هم شامل ميشه.



Private Sub Command0_Click()
On Error GoTo err
' Dim source As String, desti As String
source = Application.CurrentProject.FullName
With CommonDialog2
.DialogTitle = "Backup"
.Filter = "mdbfles (*.mdb)|*.mdb"
.ShowSave
desti = .FileName
backfile.CopyFile source, desti, True
MsgBox "Databas has been backup", vbInformation
End With
Exit Sub
err:
Beep
End Sub

Private Sub Command1_Click()
On Error GoTo err
desti = Application.CurrentProject.FullName
If MsgBox("are you sure", vbOKCancel, "restore") = vbOK Then
With CommonDialog2

.DialogTitle = "Restore"
.Filter = "Access Files(*.mdb)|*.mdb"
.ShowOpen
source = .FileName
End With
backfile.CopyFile source, desti, True
MsgBox "Databas has been restored", vbInformation
Else
Cancel = True
End If
Exit Sub
err:
Beep
End Sub