# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  گرفتن Backup و Restore کردن

## ICEMAN

سلام من Sql Server رو روی یه سیستم دیگه به عنوان Server نصب کردم
*و میخوام کاربری که نصف کارشو محل کارش انجام داده بقیه کارشو بتونه بره خونه انجام بده؟*

اول باید بتونم روی Client هام یه Backup از بانک بگیرم 
و بعد بتونم restore ش کنم
1 ) این کار و چطوری انجام بده ؟

آیا لازمه که Sql Server روی سیستم منزل کاربر هم نصب باشه ؟Attach a database file as
 database name برای چی هست؟


ممنون

----------


## delphiprog3000

سلام دوست عزیز قبل از ایجاد اگه *جستجو* میکردید جواب سوالاتونو میگرفتید.......

لینک:
https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

https://barnamenevis.org/showth...backup+restore

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

----------


## ICEMAN

من همه اون ها رو دیدم و کد ها شو تست کردم ولی برای Restore کردن مشکل دارم میگه Database در حال استفاده می باشد همه Table هام رو Active= False کردم ولی هنوز این مشکل رو دارم Master و ... هم مشکلم و حل نکرد

----------


## delphiprog3000

سلام.

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

تاپیکشو یادم نیست ولی اسم آقای کشاورز رو اگه جستجو کنید میبینید اگه هم پیداش کنم میزارم براتون......

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

----------


## delphiprog3000

اینم دوتا لینک:
https://barnamenevis.org/showth...hlight=Restore

https://barnamenevis.org/showth...hlight=Restore

----------


## vcldeveloper

> من دقیقا این مشکل رو دیدم آقای کشاورز حل کردن.


من یادم نمیاد تا بحال  درباره Backup و Restore بانک در SQL Server پستی زده باشم. شاید منظورتون آقای خورسندی بوده.

----------


## delphiprog3000

> برای Restore کردن مشکل دارم میگه Database در حال استفاده می باشد همه Table هام رو Active= False کردم ولی هنوز این مشکل رو دارم Master و ... هم مشکلم و حل نکرد


سلام جناب کشاورز من در یکی از پستهاتون دیدم که این مشکل رو حل کردین.

حالا خودتون بهتر میدونین..............

----------


## dkhatibi

این مشکل حل شده و تاپیکهایی نیز برای این منظور هست.
برای رفع مشکلتون یک کوئری گذاشته و اون فقط به دیتابیس Master متصبل کنید.

----------


## delphiprog3000

سلام دوست عزیز جناب خطیبی.

میشه لطفا کاملتر توضیح بدین. 
کاره خاص دیگه ای نباید انجام داد؟؟

با تشکر......................

----------


## delphiprog3000

سلام .

از اساتید محترم خواستارم در مورد مطلبی که جناب خطیبی ذکر کردند توضیح کاملی بدهند....

با تشکر.....................

----------


## dkhatibi

با سلام
یک کوتری باید دیتابیس را restore کنه! اون کونری را به دیتابیسی که از اون استفاده می کنید متصل نکنید. می تونید به یکی از دیتابیسهای پیش فرض sqlserver که به همراه نصب ، نصب می شن متصل کنید.
بع هم کد restore زا بنویسید. ضمنا شاید لازم باشه مقدار TimeOut را تغییر بدید.
درصورتیکه مشکلتون حل نشد بعدا کدی را که من خودم ازش استفاده می کنم را می گذارم.

----------


## delphiprog3000

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

با تشکر از شما............

----------


## dkhatibi

این کد را ببینید.
برای Back up

procedure TBackUpForm.BitBtn1Click(Sender: TObject);
  var
  str,s,s1,s2,s3:string;
  d:tdate;
begin
  dm.ADOConnection1.Connected:=false;
  str:=ShellTreeView1.Path;
  d:=date;
  s:=ShDateToStr(d);  //Create a name with current date
  s1:=copy(s,1,4);
  s2:=copy(s,6,2);
  s3:=copy(s,9,2);
  s:='backup_'+s1+'_'+s2+'_'+s3;
  str:=str+'\'+s;
  if FileExists(Str) then begin
    if MessageBox(Handle,'ÈÑÇí ÇãÑæÒ í˜ äÓÎå í ÔÊíÈÇä Êåíå ÔÏå ÇÓÊ. ÂíÇ ãí ÎæÇåíÏ Çíä äÓÎå ÌÇíÒíä ÑÏÏ¿','åÔÏÇÑ ÝÇíá Ê˜ÑÇÑí ÏÑ æÔå',MB_YESNO+MB_TOPMOST+MB_ICONEXCLAMATION+M  B_RIGHT)=mryes then
      Deletefile(Str)
    else
      Abort;
  end;

try
  dm.Q_Temp.SQL.Clear;
  dm.Q_Temp.SQL.Text:='BACKUP DATABASE Madraseh TO DISK='+QuotedStr ( str);
  DM.Q_Temp.ExecSQL;
  MessageBox(Handle,'.ÝÑÂíäÏ Êåíå í äÓÎå í ÔÊíÈÇä ÈÇ ãæÝÞíÊ ÇäÌÇã ÔÏ','ÔÊíÈÇä íÑí ãæÝÞíÊ ÂãíÒ',MB_TOPMOST+MB_RIGHT+MB_ICONINFORMATION+M  B_OK);
except
  MessageBox(Handle,'!Êåíå í äÓÎå í ÔÊíÈÇä Ô˜ÓÊ ÎæÑÏ. ãÌÏÏÇ ÓÚí ˜äíÏ','ÎØÇ ÏÑ ÔÊíÈÇä íÑí',MB_TOPMOST+MB_RIGHT+MB_ICONERROR+MB_OK);
end;
//dm.ADOConnection1.Connected:=true;
MainForm.ActiveTable2;  // Active All Deactive Tables
if not LogInForm.IsAdmin then
  dm.TB_Dastrasi.Locate('User_Code',LogInForm.UserCo  de,[])
end;


برای بازیابی

procedure TBackUpForm.BitBtn2Click(Sender: TObject);
var
s:string;
i:integer;
begin
if MessageBox(Handle,'ÂíÇ ÇÒ ÈÇÒíÇÈí ÇØáÇÚÇÊ ÇäÊÎÇÈ ÔÏå ãØãÆä ãí ÈÇÔíÏ¿','åÔÏÇÑ ÏÑ ÈÇÒíÇÈí',MB_TOPMOST+MB_RIGHT+MB_ICONQUESTIO  N+MB_YESNO+MB_DEFBUTTON2)=mryes then begin
MainForm.closetable();
dm.ADOConnection1.Connected:=false;

//ADOCommand1.CommandText:= 'Use master';
//ADOCommand1.Execute;
dm.Q_Temp.Active:=false;
dm.Q_Temp.SQL.Text:= 'Use master';
dm.Q_Temp.ExecSQL;
//dm.Q_Temp.Active:=false;
ADOCommand1.CommandText:='';
sleep(2);
s:=FileListBox1.FileName;
try
with ADOCommand1 do
  begin
    CommandText:='RESTORE DATABASE Madraseh FROM DISK='+ QuotedStr(s);
    Execute;
  end;
  MessageBox(Handle,'.ÇØáÇÚÇÊ ÈÇ ãæÝÞíÊ ÈÇÒÑÏÇäÏå ÔÏ. ÈÑÇí ÇÍÊíÇØ ÈíÔÊÑ ÇÒ ÈÑäÇãå ÎÇÑÌ æ ÏæÈÇÑå æÇÑÏ ÔæíÏ','ÈÇÒíÇÈí ãæÝÞíÊ ÂãíÒ',MB_TOPMOST+MB_RIGHT+MB_ICONINFORMATION+M  B_OK);
except
  MessageBox(Handle,'!ÈÇÒíÇÈí ÇØáÇÚÇÊ ÈÇ Ô˜ÓÊ ãæÇÌå ÔÏ. ãÌÏÏÇ ÊáÇÔ äãÇííÏ','ÎØÇ ÏÑ ÈÇÒíÇÈí',MB_TOPMOST+MB_RIGHT+MB_ICONINFORMA  TION+MB_OK);
end;

----------


## اصغر (پآچ)

سلام دوست من

اگه ممکنه پیام های فارسی را در یک پست دیگر بذارید فکر کنم خیلی اینجوری سخت باشه فهمیدنش!

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

----------


## arezoo_khoshrah

دوستان عزیزم سلام، من یک سئوالی دارم که پیدا کردن جوابش خیلی برای من مهم و حیاتیه، من میخوام با استفاده از برنامه نویسی دلفی عمل restore کردن بانک اطلاعاتی رو پیاده سازی کنم. لطفا نگید که باید search میکردم و این موضوع درباره اش زیاد صحبت شده، اکثر این نوشته ها رو خوندم و از اکثر کدهایی که دوستان گذاشتن استفاده کردم ولی وقتی برنامه restore کردن رو اجرا می کنم پیغام خطا میده که از دیتابیس داره اسفاده میشه. از use master هم استفاده کردم ، از AdoConnection.connection:=false هم استفاده کردم اما باز هم با همین پیغام خطا مواجه شدم. لطفا اگر کسی این موضوع رو تجربه کرده و میدونه که اشتباه کار من کجاست ممنون میشم پاسخ من رو بده  :لبخند:

----------


## Hsimple11

دوست گرامی باز هم بحث شده . اگر در شبکه کار میکنید :
https://barnamenevis.org/showth...highlight=kill

----------


## arezoo_khoshrah

> دوست گرامی باز هم بحث شده . اگر در شبکه کار میکنید :
> https://barnamenevis.org/showth...highlight=kill


 من تو شبکه کار نمی کنم ولی خودم وقتی برنامه restore رو نوشتم کار کرد ولی وقتی به برنامه مد نظرم اضافش کردم کار نکرد چون وی اون برنامه تعداد زیادی table و یه AdoConnection در datamodule دارم احساس می کنم یک  کانکشن به دیتابیس بازه نمیدونم باید جدولها رو close کنم کانکشن رو false کردم ولی جوابی نگرفتم همچنان میگه داره ا ز دیتابیس استفاده میشه :خیلی عصبانی:

----------


## m-khorsandi

اگر همه جداول به يك Connection وصل باشند بعد از بستن Connection تمام جداول بسته ميشن،
وسعت مطالب موجود در سايت در مورد Backup - Restore بقدری زياد هست كه ميشه راههای مختلف تهيه نسخه پشتيبان/بازيابی رو به صورت يك كتاب راهنما تهيه كرد.
وقتی قصد Restore كردن داری و پيغام خطا رو دريافت ميكنی، ليست process های SQL Server رو ببين و پروسسی كه در حال استفاده از ديتابيست هست رو پيدا كن.

----------


## ehsan11

سلام
من از این کد برای بازگردانی اطلاعات استفاده کردم ولی خطای زیر رو میده 

string command = "ALTER DATABASE ali SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE ali FROM DISK='" + strFileName + "'"; ;
             this.Cursor = Cursors.WaitCursor;
             SqlCommand oCommand = null;
             SqlConnection oConnection = null;
             oConnection = new SqlConnection("Data Source=.;Initial Catalog=ali;Integrated Security=True");
             if (oConnection.State != ConnectionState.Open)
             oConnection.Open();
             oCommand = new SqlCommand(command, oConnection);
             oCommand.ExecuteNonQuery();
             this.Cursor = Cursors.Default;


اما خطاهای اون
1- 
Cannot open database "ali" requested by the login. The login failed.
Login failed for user 'EH-PC\Eh'.

2-


Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

----------


## ehsan11

سلام
من از این کد برای بازگردانی اطلاعات استفاده کردم ولی خطای زیر رو میده 

string command = "ALTER DATABASE ali SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE ali FROM DISK='" + strFileName + "'"; ;
             this.Cursor = Cursors.WaitCursor;
             SqlCommand oCommand = null;
             SqlConnection oConnection = null;
             oConnection = new SqlConnection("Data Source=.;Initial Catalog=ali;Integrated Security=True");
             if (oConnection.State != ConnectionState.Open)
             oConnection.Open();
             oCommand = new SqlCommand(command, oConnection);
             oCommand.ExecuteNonQuery();
             this.Cursor = Cursors.Default;


اما خطاهای اون
1- 
Cannot open database "ali" requested by the login. The login failed.
Login failed for user 'EH-PC\Eh'.

2-


Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

----------


## ehsan11

سلام
من از این کد برای بازگردانی اطلاعات استفاده کردم ولی خطای زیر رو میده 

string command = "ALTER DATABASE ali SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE ali FROM DISK='" + strFileName + "'"; ;
             this.Cursor = Cursors.WaitCursor;
             SqlCommand oCommand = null;
             SqlConnection oConnection = null;
             oConnection = new SqlConnection("Data Source=.;Initial Catalog=ali;Integrated Security=True");
             if (oConnection.State != ConnectionState.Open)
             oConnection.Open();
             oCommand = new SqlCommand(command, oConnection);
             oCommand.ExecuteNonQuery();
             this.Cursor = Cursors.Default;


اما خطاهای اون
1- 
Cannot open database "ali" requested by the login. The login failed.
Login failed for user 'EH-PC\Eh'.

2-


Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

----------


## DataMaster

> سلام
> من از این کد برای بازگردانی اطلاعات استفاده کردم ولی خطای زیر رو میده 
> 
> string command = "ALTER DATABASE ali SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE ali FROM DISK='" + strFileName + "'"; ;
>              this.Cursor = Cursors.WaitCursor;
>              SqlCommand oCommand = null;
>              SqlConnection oConnection = null;
>              oConnection = new SqlConnection("Data Source=.;Initial Catalog=ali;Integrated Security=True");
>              if (oConnection.State != ConnectionState.Open)
> ...


پسر خوب اینا کد سی شارپ هستن تو بخش مربوطه سوال کن

----------


## حسین شهریاری

سلام

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

موفق باشید.

https://barnamenevis.org/showthread.php?t=173232

----------

