View Full Version : بازیابی اطلاعات در بانک SQL
alizanganeh
شنبه 24 دی 1390, 16:49 عصر
سلام
من این کد رو میزنم تا اطلاعاتی که قبلا backup گرفتم رو بازیابی کنم
Dim db As New Connection
Dim rs As New Recordset
db.Open "provider=msdasql;driver={sql server};server=;uid=;pwd=;database=CM"
rs.Open "restore database CM from Disk='d:\CMBackUp.bak'", db
Unload Me
FrmMainPage.Visible = True
db.Close
اما وقتی اجرا میکنم این پیغام رو میده :
http://up.vatandownload.com/images/eb0olbwvl60zr4n8vrk.jpg
چیکار کنم ؟
ممنون
maktoom
شنبه 24 دی 1390, 21:32 عصر
سلام.
پیغامت داره میگه دیتا بیست در حال استفادست.
یخورده در مورد اینکه چرا می خوای بک آپ بگیری توضیح بده.
آخه ممکنه خیلی راحت با از درگیری در آوردن پایگاهت قضیه حل بشه.
و یا اینکه باید کار دیگه ای انجام داد.
alizanganeh
شنبه 24 دی 1390, 22:28 عصر
خب خودم میدونم چی میگه
مشکلش چیه؟
میخوام کاربر بتونه از بانک بک آپ بگیره و بعدش بازیابی کنه دیگه
ولی موقع بازیابی ارور بالا رو میده
alizanganeh
یک شنبه 25 دی 1390, 20:58 عصر
انجمن به این عظمت هیچکی بلد نیست جواب منو بده ؟
kitcat_m18
یک شنبه 25 دی 1390, 21:42 عصر
سلام دوست من،
Private Sub Attach_And_Detach()
'ÞØÚ ÇÊÕÇá ÈÇä˜ ÈÇ ÓÑæÑ
With Cn
If .state = 1 Then .Close
.Open "Provider=SQLNCLI10.1;Data Source=SERVER_Name;User ID=User_Name;Password=Your_Password;Initial Catalog=master"
.Execute "ALTER DATABASE Database_Name SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
.Execute "EXEC sp_detach_db @dbname = N'Database_Name' , @keepfulltextindexfile='true';"
.Execute "ALTER DATABASE Database_Name SET MULTI_USER"
.Close
End With
'˜í ÝÇíáåÇí ÔÊíÈÇä ÏÑ æÔå ÇÕáí
fso.CopyFile "MDF.Bak", "MDF"
fso.CopyFile "LDF.Bak", "LDF"
'ÇÊÕÇá ãÌÏÏ ÈÇä˜ ÈÇ ÓÑæÑ
With Cn
If .state = 1 Then .Close
.Open "Provider=SQLNCLI10.1;Data Source=SERVER_Name;User ID=User_Name;Password=Your_Password;Initial Catalog=master"
.Execute "EXEC sp_attach_db @dbname = N'Database_Name'," & _
"@filename1 = N'D:\Database_Name.mdf'," & _
"@filename2 = N'D:\Database_Name_log.LDF'"
.Close
End With
End Sub
استفاده از کد بالا راحته فقط داخلش Database_Name , User_Name , Your_Password , Server_Name همچنین مسیر بانکت رو ست می کنی.
موفق باشی :لبخندساده:
alizanganeh
یک شنبه 25 دی 1390, 22:22 عصر
خیلی ممنونم
ولی داداش فهم کد ها خیلی برام سخته
اصلا نمیفهمم اینا یعنی چی
اگر میشه کمی برام توضیح بده
یا اینکه نام بانک و ... رو بهت میدم و بی زخمت کدها رو برام ویرایش کن و بزار
ممنون
نام بانک : cm
دکمه ای که قراره این کد رو اجرا کنه : cmdload
پسورد هم نداره
user name هم نداره
server name نداره
راستی
من با این کد از بانکم بک آپ میگیرما
فکر کنم کد شما با این کد و چسوندش مغایرت داره
این کد بک آپ منه :
Dim db As New Connection
Dim rs As New Recordset
Dim ask As Integer
db.Open "provider=msdasql;driver={sql server};server=;uid=;pwd=;database=CM"
rs.Open "backup database CM to Disk='d:\CMBackUp.bak'", db
MsgBox "äÓÎå ÔÊíÈÇä ÈÇ ãæÝÞíÊ ÇíÌÇÏ ÔÏ", vbInformation, "Êåíå äÓÎå ÔÊíÈÇä"
Unload Me
FrmMainPage.Show
db.Close
بازم ممنون
kitcat_m18
یک شنبه 25 دی 1390, 23:52 عصر
سلام،
داداشم با این وضع خیلی وقت می بره بخوام این مفاهیم رو برات توضیح بدم،
دیدم نوشتی
انجمن به این عظمت هیچکی بلد نیست جواب منو بده ؟ گفتم حتما لنگ کدی که برات گذاشتم.دیگه اینکه بخوام یه کلاس آموزش SQL Server هم برات بذارم دیگه شرمنده.
فقط می تونم بهت پیشنهاد بدم بری در رابطه با ارتباط با بانک SQL Server در شبکه یه کم مطالعه کنی.
شما به بانک Local خودت کانکشن زدی اگه بخوای از این کد استفاده کنی اون رو تو ماژول قرار بده و بعد در رویداد کلیک دکمه مورد نظرت اونو اینطوری Call کن:
Call Attach_And_Detach
هر بانک SQL که نصب می کنی به اسم PC Name کامپیوترت نصب میشه که میشه همون Server Name
شما داری در حالت windows Atentication به SQL وصل میشی برای همین ازت نام کاربری و کلمه عبور نمی خواد.
اول باید با مود بالا به SQL وصل بشی بعد بری نام کاربری Sa رو فعال کنی و براش پسورد هم تعریف کنی و یه سری تنظیمات دیگه رو انجام بدی تا بتونی با مود SQL Server Atentication وصل بشی.
دوستان اگه کسی حوصلشو داره مفاهیم بالا رو برای دوست عزیزمون توضیح بده.
موفق باشی :لبخندساده:
alizanganeh
دوشنبه 26 دی 1390, 01:27 صبح
دوست عزیز
من خودم اینایی که در مورد sql گفتی رو میدونم
من چون بیشتر از local نیاز نداشتم اینطوری کار کردم
من گفتم کدهای بالا رو چطوری استفاده کنم که فکر میکنم یک مقدار کدهای حرفه ای هستن و بدرد من نمیخورن
چون واسه تحویل پروژه میخوام واسه همین امکان داره استادمون متوجه بشه که کدها کار خودم نیست
اگر کد ساده تری دارید بدید
اگر ندارید که هیچی
ولی سر کلاس استادمون با اون کدی که اول کار بهتون دادم کار کرد و انجام شد
ولی الان نمیشه
نمیدونم چرا
بنظرتون چیکار کنم که با همون کد ها کار کنه ؟
kitcat_m18
دوشنبه 26 دی 1390, 02:00 صبح
ببین راه کار خیلی سادست
شما ابتدا باید دیتابیسی که می خوای ازش پشتیبان بگیری رو Detach کنی چون وقتی Attach باشه در حال استفاده هست و نمی تونی ازش کپی بگیری.
برای Detach کردن دیتابیس هم ممکنه کاربر یا کاربرانی در حال استفاده از دیتابیسی که ما می خوایم ازش پشتیبان بگیریم باشن. برای همین کانکشن اون کاربرا رو هم باید RollBack کنیم تا دیتابیس آزاد بشه.
و بعد ازش پشتیبان می گیریم.
امیدوارم تونسته باشم کمکی کنم.
موفق باشین :لبخندساده:
alizanganeh
دوشنبه 26 دی 1390, 08:33 صبح
ببین حرفت درسته
ولی با کدی که من برای بک آپ استفاده میکنم بدون نیاز به detach کردن database از بانک بک آپ میگیره
بازم ممنون
موفق باشی
kitcat_m18
سه شنبه 27 دی 1390, 09:30 صبح
سلام،
شما یه زحمتی بکش، فقط کانکشن های فعال به دیتا بیست رو RollBack کن کد خودتم اینطوری اصلاح کردم ببین کار می کنه یا نه
Dim db As New Connection
Dim rs As New Recordset
db.Open "provider=msdasql;driver={sql server};server=;uid=;pwd=;database=Master"
rs.Open "restore database CM from Disk='d:\CMBackUp.bak'", db
Unload Me
FrmMainPage.Visible = True
db.Close
موثع باز کردن کانکشن دیتابیس Master رو باز کن تا کانکشن فعالی به دیتابیسی که می خوای Restore کنی وجود نداشته باشه.
البته سعی کن با دستوری که گذاشتم همه رو RollBack کنی
موفق باشی :لبخندساده:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.