PDA

View Full Version : سوال: database is in use



hsn_abieteh
دوشنبه 10 آبان 1389, 14:41 عصر
سلام خدمت دوستان عزیز
این سوالم بارها در انجمن بحث شده و راه حل هایی هم مطرح شده ولی من چون به نتیجه نرسیدم مجددا مطرح کردم. از این بابت معذرت

زمانی که بانکم restore می کنم خطای database is in use میده و این خطا هم به خاطر این هم که من در formcreate برنامم این کد رو نوشتم:


ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from graduate');
ADOQuery1.Open;


واسه restore هم این کد رو نوشتم:


begin
with ADOCommand2 do
begin
CommandText:='RESTORE DATABASE graduate FROM DISK='+QuotedStr (ShellListView1.selectedfolder.PathName);
execute
end;
ShowMessage('DataBase has Successfully Restore');
end;


البته اون adoquery که در formcreate هست رو هم قبل از انجام دستور restore می بندم.
به این صورت:


adoquery1.close;

ولی باز هم خطای دیتابیس در حال استفاده میده.
فقط زمانی خطا نمی ده که اون چند خط رو از formclreate حذف میکنم.

البته جایی گفته بودن که بانک رو باید تک کاربره کنیم ولی من از msde استفاده می کنم و کلا یک کامپیوتر هم از برنامم استفاده می کنه و تک کاربره هست خودش.

خواهش می کنم کمکم کنید.

dataking
دوشنبه 10 آبان 1389, 14:49 عصر
سلام
بعد از این که کارت با بانک تموم شد ببندش که کد بعی می خواد بازش کنه خطا نده:تشویق::تشویق:
اگه به دو نفر هم زمان بگی آب را بده هر کی زودتر برسه آب راه می ده دومی ارور میده:قهقهه::قهقهه::قهقهه:

hsn_abieteh
دوشنبه 10 آبان 1389, 15:19 عصر
سلام
بعد از این که کارت با بانک تموم شد ببندش که کد بعی می خواد بازش کنه خطا نده:تشویق::تشویق:
اگه به دو نفر هم زمان بگی آب را بده هر کی زودتر برسه آب راه می ده دومی ارور میده:قهقهه::قهقهه::قهقهه:
دوست عزیز من هم گفتم قبل از اینکه restore بخوام کنم اون کوئری رو می بندم:لبخندساده:
ممنون میشم اگه بیشتر راهنمایی کنید، به هر حال شما استادید:لبخندساده: ما که مبتدی

pezhvakco
چهارشنبه 12 آبان 1389, 11:43 صبح
جستجو می کردی زود تر به پاسخ می رسیدی :

'Use Master'
ALTER DATABASE DataBase_Name SET SINGLE_USER

این کد دستور رو پیش از دستور بازگرداندن اجرا کن ...

hsn_abieteh
چهارشنبه 12 آبان 1389, 17:14 عصر
جستجو می کردی زود تر به پاسخ می رسیدی :

'Use Master'
ALTER DATABASE DataBase_Name SET SINGLE_USER

این کد دستور رو پیش از دستور بازگرداندن اجرا کن ...
ممنون دوست عزیز ولی این رو قبلا دیدم. توی ارسال اولم هم گفتم که باهاش به نتیجه نرسیدم.
اگر اشتباه نکنم این کد باعث میشه سیستم از حالت چند کاربره خارج بشه. برنامه ی من تک کاربره هست و وقتی از این کد استفاده می کنم ÷یغام میده که این برنامه تک کاربره هست و نیاز نیست که تک کاربره بشه.
خ.اهش می کنم کمک کنید. خواهش می کنم

pezhvakco
چهارشنبه 12 آبان 1389, 19:51 عصر
شما همین تک کد دستور رو اجرا کردی :

Use Master

hsn_abieteh
پنج شنبه 13 آبان 1389, 19:07 عصر
شما همین تک کد دستور رو اجرا کردی :

Use Master
بله این رو اجرا کردم
به این صورت:


ADOCommand2.CommandText:='use master';
ADOCommand2.CommandText:='EXEC sp_dboption ''graduate'',''single user'',''TRUE''';
ADOCommand2.Execute;

ولی این خطا رو میده:

http://up.iranblog.com/Files73/716254f4e4974454ae10.JPG

از این کد هم که استفاده می کنم:


ADOCommand2.CommandText:='use master';
ADOCommand2.CommandText:='ALTER DATABASE graduate SET SINGLE_USER';
ADOCommand2.Execute;


این خطا رو میده:

http://up.iranblog.com/Files73/7b3a9b666c2f40fa88a9.JPG

به نظرتون چیکار کنم دوستان؟

pezhvakco
جمعه 14 آبان 1389, 10:23 صبح
شما این راه رو برو :


ADOCommand.CommandText:='Use Master';
ADOCommand.Execute;و سپس

ADOCommand.CommandText:='RESTORE DATABASE graduate FROM DISK = ' + QuotedStr(Addr) + ' ';
ADOCommand.Execute;در زمانی که داری این کد دستور رو اجرا می کنی هیچ برنامه دیگری ( مانند Enterprise manager و یا برنامه دیگری که با پایگاه داده کار کنه به جز برنامه خودت ) در حال اجرا نباشه .

hsn_abieteh
شنبه 15 آبان 1389, 17:24 عصر
شما این راه رو برو :


ADOCommand.CommandText:='Use Master';
ADOCommand.Execute;و سپس

ADOCommand.CommandText:='RESTORE DATABASE graduate FROM DISK = ' + QuotedStr(Addr) + ' ';
ADOCommand.Execute;در زمانی که داری این کد دستور رو اجرا می کنی هیچ برنامه دیگری ( مانند Enterprise manager و یا برنامه دیگری که با پایگاه داده کار کنه به جز برنامه خودت ) در حال اجرا نباشه .
مرسي دوست عزيز
ولي متاسفانه پيغام ميده كه ديتابيس در حال استفادس. و وقتي همون كد داخل page load رو برميدارم درست ميشه.

هيچ كس نيست كه تست كرده باشه و جواب بده؟:افسرده:

hossin.esm
شنبه 15 آبان 1389, 18:05 عصر
سلام
این کد را قبل از restore بنویس البته این کد برای C#هست .

System.Data.SqlClient.SqlConnection.ClearAllPools( );