PDA

View Full Version : سوال: برگرداندن بک اپ SQL به وسیله کد مانند منوی Restore sql Databse ...



sajjad_kochekian
دوشنبه 01 اسفند 1390, 13:51 عصر
با سلام
در یک برنامه برای راحتی کاربر می خواهم فرمی داشته باشم که کاربر بویسله آن یکی از بک آپ ها SQL انتخاب کند و برگرداند.(داخل اکسس پروجکت)
لطفا دوستان راهنمایی کنند.

mjdeveloper
دوشنبه 01 اسفند 1390, 14:10 عصر
use master
alter database DatabaseName set single_user with rollback immediate
restore database DatabaseName from disk =N'C:\DBBackup.bak'
alter database DatabaseName set multi_user

sajjad_kochekian
دوشنبه 01 اسفند 1390, 14:16 عصر
دوست عزیز مثل اینکه سوال را کامل نخوانده اید
من یک فرم می خواهم برای کاربر
این دستور را که نمیشه به کاربر داد و گفت وارد محیط SQL بشود؟
:متعجب:

reza_ppc
سه شنبه 02 اسفند 1390, 15:33 عصر
با استفاده از آزمون و خطا بالاخره كد زير در سيستم من جواب داد فردا تو شبكه هم امتحان مي كنم اگر ايرادي داشت اطلاع ميدم
اما اگر توضيحي در مورد المانهاي فرمان داريد لطفا راهنمايي بفرمائيد چون اصلا چيزي نفهميدم


Dim dbconnection As New ADODB.Connection
Dim path As String
Dim strConnection As String
strConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=نام ديتابيس;Data Source=نام سرور;"

path = "'" & "D:\D\فايل بكاپ" & "'"
SQL = "ALTER DATABASE نام ديتابيس SET SINGLE_USER with ROLLBACK IMMEDIATE USE MASTER " _
& "Restore database نام ديتابيس FROM DISK = " & path & " WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10" _
& "ALTER DATABASE Pardakht SET MULTI_USER"

With dbconnection
.Mode = adModeReadWrite
.CursorLocation = adUseClient
.ConnectionString = strConnection
.ConnectionTimeout = 0
.Open
DoEvents
.Execute SQL
.Close
End With

MsgBox "عمليات ريستور با موفقيت انجام شد" & vbCrLf & path

reza_ppc
سه شنبه 02 اسفند 1390, 15:38 عصر
Dim dbconnection As New ADODB.Connection
Dim path As String
Dim strConnection As String
strConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=نام ديتابيس;Data Source=نام سرور;"

path = "'" & "D:\D\فايل بكاپ" & "'"
SQL = "ALTER DATABASE نام ديتابيس SET SINGLE_USER with ROLLBACK IMMEDIATE USE MASTER " _
& "Restore database نام ديتابيس FROM DISK = " & path & " WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10" _
& "ALTER DATABASE نام ديتابيس SET MULTI_USER"

With dbconnection
.Mode = adModeReadWrite
.CursorLocation = adUseClient
.ConnectionString = strConnection
.ConnectionTimeout = 0
.Open
DoEvents
.Execute SQL
.Close
End With

MsgBox "عمليات ريستور با موفقيت انجام شد" & vbCrLf & path


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

در ضمن بيشتر در مورد اين موارد
WITH FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10
اگر توضيحي بديد ممنون چون در بكاپ گرفتن هم وقتي عبارت STATS رو نمي نوشتم مدام خطاي تايم اوت ميداد

sajjad_kochekian
سه شنبه 02 اسفند 1390, 22:44 عصر
عالی بود دوست عزیز
البته من به این صورت تغییر دادم
Public Sub DbRestore(BackUpPath As String)

Dim dbnames As String, server_names As String
Dim dbconnection As New ADODB.Connection
Dim Path As String
Dim strConnection, str As String

strConnection = CurrentProject.Connection
dbnames = GetDBName
Path = BackUpPath
str = "ALTER DATABASE " & dbnames & " SET SINGLE_USER with ROLLBACK IMMEDIATE USE MASTER " _
& "Restore database " & dbnames & " FROM DISK = '" & Path & "' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10" _
& "ALTER DATABASE Pardakht SET MULTI_USER"

With dbconnection
.Mode = adModeReadWrite
.CursorLocation = adUseClient
.ConnectionString = strConnection
.ConnectionTimeout = 0
.Open
DoEvents
.Execute str
.Close
End With

MsgBox "ÚãáíÇÊ ÑíÓÊæÑ ÈÇ ãæÝÞíÊ ÇäÌÇã ÔÏ" & vbCrLf & Path
End Sub
بدست آوردن نام دیتابیس
Public Function GetDBName() As String
Set rst = SQL.OpenRst("select DB_NAME() as dbname")
If rst.EOF Then
GetDBName = ""
Else
GetDBName = rst!dbname
End If
End Function

sajjad_kochekian
چهارشنبه 03 اسفند 1390, 21:50 عصر
یک مشکل کوچک دیگه وجود داره
بعد از برگرداندن بک آپ باید یک با برنامه بسته بشه و دوباره باز بشه.
اگه این طور نباشه خیلی بهتره؟