با سلام
می خواهم داخل برنامه امکانی قرار بدهم که کاربر با فشار کلید بک آپ تهیه نماید .
البته بک آپ جدید را در محل جدید یا با شماره جدید حفظ نماید.
با تشکر
با سلام
می خواهم داخل برنامه امکانی قرار بدهم که کاربر با فشار کلید بک آپ تهیه نماید .
البته بک آپ جدید را در محل جدید یا با شماره جدید حفظ نماید.
با تشکر
docmd.copyobject یا ماکرویcopyobject از اشیاءاز قبیل جدول فرم ..... کپی تهیه می کند که مسیر ان در یکی از ارگومانهای ماکرو یا کد مربوط باید مشخص شود
من برای کاهش حجم داده های پشتیبان معمولا فقط جداول را کپی میکنم آن هم حتما 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
آیا این کد برای برنامه هایی که دیتا بیس آنها روی sql و خود برنامه اکسس هست هم کاربرد داره یا اینکه باید دیتا بیسم هم اکسس باشه؟
مرسی اقای مفیدی
در خود اکسس بوسیله کد زیر می تونی هر ابجکتی را به هر مسیر از فلاپی گرفته تا هارد ارسال کنی
...,DoCmd.TransferDatabase acExport
فقط فرقش با تابع اقای مفیدی اینکه zip نیست در ضمن sqlserver را نیز ساپورت میکنه
اقای مفیدی ممکنه با نحوه استفاده از تابع export خود جدول tbl1 را در یک فلاپی با تمام ارگومانهای ان بنویسی
آقا مصطفی
از این کدی که دادی ممنون. فقط یه مسئله هستش و اون هم اینکه برای من یک مقدار حجم فایل مهمه و اگه بشه فایل رو زیپ کرد خیلی بهتره و چون من دیتا بیسم روی sql هستش هنوز برام این سواله که اون کدی که دوستمون mm_mofidi نوشتن برای دیتابیس sql هم مفید هستش یا نه و یک سوال دیگه هم که داشتم اینکه این فایل زیپ، با چی زیپ شده؟ با زیپ خود ویندوز و یا با برنامه winzip؟ اگر با winzip زیپ شده از کدوم فرمت استفاده شده؟ (منظورم اینه که مثلا فایل SFX هستش یا یک زیپ معمولیه؟)
ممنون از کمکتون
سوالات شما را باید اقا ی مفیدی زحمتشو بکشند جواب بدند
اما من جدوالم را در یک برنامه اکسس export یا کپی می کنم سپس ان برنامه اکسس را zip یا rar میکنم
tools/utillitydatabase/compact and repair
تا اندازه ای حجم فایل را کاهش میده
سلام
حدس زدم اگه شرایطی رو که دارم براتون توضیح بدم شاید بهتر بشه باهم همفکری کنیم.
راستش من 5 تا انبار در مناطق مختلف ایران دارم که می خوام کاربرم با زدن یک دکمه خیلی ساده از دیتا بیسش بک آپ بگیره و من هم تقریبا هر 2 ، 3 روز یه بار به کامپوتر اون وصل می شم و بک آپش رو بر می دارم. متاسفانه به خاطر زیرساخت ضعیف مخابراتی، سرعت این کار خیالی کمه و به همین خاطر حجم فایل برای من خیلی مهمه و من هم باید اون بک آپ ها رو از تهران از روی کامپیوتر اون بردارم.
از طرفی هم من دیتا بیسم روی sql و برنامم روی access هستش و اگه بتونم با گذاشتن یک کلید در خود برنامم این امکان رو به کاربرم بدم که بک آپ بگیره و خودم مستقیما برم اون بک آپ رو از آدرس مورد نظرم بردارم خیلی خوب می شه. چون من نمی تونم به کاربرم که چیزی از پشت برنامه سر در نمیآره بگم برو پشت برنامه و تیبلها رو export کن و اصلا فکر هم نمی کنم که صلاح باشه کاربر رو به پشت برنامه فرستاد.
اما در قسمت اول برای من مهم اینه که بتونم از sql با یک دکمه در برنامه بک آپ بگیرم و زیپ کردن برام در مرحله دوم اهمیت داره. چون من با ریموت دسکتاپ به کامپیوتر اون وصل می شم و خودم هم می تونم دیتابیس رو زیپ کنم. ( البته اگه نشه با اون کلید این کار رو کرد.)
با این شرایط اگه فکری به نظرتون می رسه، ممنون می شم که من رو راهنمایی کنین.
فایلهای جالبی بودند.ممنونم.
در مورد فایل اول دقیقا همون مشکلی رو دارم که قبلا گفتم. من تیبلهایی که می خوام ازشون بک آپ بگیرم توی sql هستن و من اونا رو به access لینک کردم. در صورتی که فایل اول از کل برنامه access بک آپ می گیره. من اینطوری متوجه شدم. اگر اشتباه می کنم لطفا راهنماییم کنید.
در مورد فایل دوم هم میشه لطفا یک مقدار توضیح بدین؟ من نفهمیدم دقیقا چی کار می کنه و در ضمن فرمتش هم برام جدید بود. اگه می شه در مورد این فرمت هم توضیح می دین؟
ممنون از لطفتون
شما میتونی برای برنامه های شعب تون یک ماکروی send object بذاری که جدوال مورد نظر را کاربر مربوط با یک کلیک باتن به ادرس ایمیل مرکز ارسال کنه بعد با یک union query دادها را تلفیق کنی یا با appenquery در یک جدول ادغام کنی (کلید بزاری تا دادها تکراری الصاق به جدول اصلی نشوند ) یا در ست منظور شما را متو جه نشدم
البته من هنوز فایلهای ارسالی شاپرک را ندیدم
آقا مصطفی متاسفانه یکی از مشکلات ما اینه که برناممون نمی تونه وب بیس باشه تا با یک دکمه به ایمیل مرکز بفرسته فایل رو. چونکه انبارهای ما در نقاطی هستند که امکانات اینترنتی خیلی کمه. مثلا یکی از انبارهای ما در نشتارود هستش که اصلا نمی شه درست حسابی به اینترنت وصل شد. چه برسه که بخواد یک فایل رو اپلود کنه و بفرسته.
ما در مرحله اول باید فایل رو روی خود کامپیوتر انبار بک آپ بگیریم و با روش ریموت دسک تاپ به تهران منتقل کنیم.( کاری که در حال حاضر داریم می کنیم.) در مراحل بعدی برنامرو وب بیس می کنیم و اون کاری رو که شما گفتی انجام می دیم.
اما الان مشکل اینه که کاربر باید برای بک آپ گرفتن از برنامه خارج بشه. sql رو stop کنه. بره توی پوشه مورد نظر و از فایل کپی بگیره. بعدش دستی بیاد اونو پیست کنه تا بک آپ بگیره و بعدش باید اون رو زیپ کنه و ما بریم اون فایل زیپ رو برداریم.
من می خوام که همه این کارها رو با یک دکمه در داخل خود برنامه انجام بدم. البته اگرم زیپ نشد خیلی مهم نیست. اون در مرحله دوم برام اهمیت داره. در مرحله اول این مهمه که بشه بک آپ اتوماتیک گرفت.
DoCmd.CopyDatabaseFile "c:\export\tbl1.mdf", True, False
یا ماکروی CopyDatabaseFile
با سه ارگومان
اولی نام فایل جدید ومسیر ان فکر کنم با پسوند mdf
دومی ایا رونوشت شود یا نه ؟
سومی ایا کاربران باید به بانک ارتباط داشته باشند یا نه ؟
بهترین راه اجرای یک پروسیجر روی sql سرور است. به راحتی کار بکاپ گیری را انجام می دهد برای t-sql آن هم بهتر است یا به books on line مراجعه کنی یا در بخش sql اسنجا مطرح کنی.
این کد ها ممکن است با تغییراتی جواب دهد ولی شرایزی که کد با عدم موفقیت روبرو شواید طیاد خواهد بود
با تشکر از همه دوستانی که در این بحث شرکت کردند و از نظراتشون استفاده کردیم.
بحث قشنگی بود و خیلی چیزا ازش یاد گرفتم. اگر کسی چیز دیگری هم به ذهنش می رسه ممنون می شم که در میون بذاره.
موفق باشید
با سلام
آقای MM_Mofidi یه تابع در مورد Export نوشته بودید ( صفحه یک) که جداول را Export می کرد.
وقتی من میخوام از این تابع استفاده کنم پیغام میده که Export_To_External_Database که ازش استفاده کردید تعریف نشده.
اگر ممکنه یه مثال بشکل یه فایل MDB بزنید ممنون میشم.
پیشاپیش سپاسگذارم.
برای استفاده از zip انواع و اقسام زیادی کد هست همینجا با یک جستجو شما میتوانید مقدار زیادی ActivX پیدا کنی که اینکار را به راحتی انجام میدهند.
من ممعمولا ترجیح میدم برای کاهش حجم ابتدا Compact & repair کنم بعد جداول را صادر کنم و بکمک یک ActivX آفایل حاصله را zip کنم.برای هر سه مورد اینجا هم کد هست هم کامپوننت بازم مشکلی بود مطرح کنید.بلد باشم جواب میدم.
کد زیر جدول table1 را از فایل موجود به درایو E و در فایلی به نام test به اسم tblbackup بصورت zip نشده می فرسته .
docmd.transferdatabase acexport , "microsoft access" , "e:\test.mdb" , actable , "table1" , "tblbackup"
در مورد zip کردن فکر کنم نیازی به activexنباشه و میشه از امکانات commandline برنامه winzip هم استفاده کرد (با دستور shell)
سلام بر دوستان
چگونه می توانم make table بسازم خواهشا توضیح کامل باشد متشکرم seyedaga
سلام و خسته نباشدمن یک برنامه دارم که با دلفی نوشته ام و بانک آن اکسس است می خواستم من را راهنمایی کنید که در دلفی از چه کامپوننتی استفاده کنم که بتوان آن را zip و مجددا بازگردانی کنم.h_m_1258@yahoo.com
سلام
به نظر بنده از نرم افزارهای تخصصی بک اپ استفاده کنید
به دلایل زیر
1:کاهش حجم برنامه نویسی
2: زمانبندی متنوع
3:استفاده از رمز مطمئن
4: زیپ های مختلف
5: اجرای عملیات قبل وبعد از بک اپ
6:بک اپ بانکهای مختلف بصورت همزمان
من خودم نرم افزار ساده ای بنامcobian backup استفاده میکنم
سلام دوستان
خسته نباشد
من با اکسس زياد کار نکردم ولي با استفاده از فايل هاي که دوستان ديگه اينجا ضميمه کرده بودند از جداولم نسخه پشتيبان تهيه مي کنم ولي براي باز گردوندن اطلاعات نمي دونستم چه کار کنم اگه ممکنه راهنمايي کنيد ضمناً فايل بک آپ هم ضميمه کردم
جستجو هم کردم اما فايل هايي که ضميمه بود درست کار نمي کرد
قبلاً از راهنمايي شما عزيزان متشکرم
دوست عزيز ببينيد اين تاپيك به دردتون ميخوره.
http://www.barnamenevis.org/sh...4&postcount=68
موفق باشيد
..........................
دوست عزيز اگر كد كامند باتون ها رو به اين صورت اصلاح كنين فكر ميكنم مشكلتون برطرف بشه در ضمن كپي از تمامي بانك صورت ميگيره بنابراين ارتباطات رو هم شامل ميشه.
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
آخرین ویرایش به وسیله amirzazadeh : شنبه 14 دی 1387 در 08:21 صبح