ورود

View Full Version : سوال: دیتابیس از درون برنامه Attach نمی شود؟



rez1_mahtab
سه شنبه 23 آذر 1389, 06:37 صبح
سلام و خسته نباشید
یک برنامه با دلفی و sql2000 نوشتم
توی برنامه کد برای attach کردن دیتابیس نوشتم




Con:=TADOConnection.Create(nil);
con.LoginPrompt := FALSE;
con.ConnectionString:='Provider=SQLOLEDB.1;Integra ted Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=.;';
con.Open;
cmd:=TADOCommand.Create(nil);
cmd.Connection:=con;
cmd.CommandText:='exec sp_attach_db @dbname=dbname,@filename1='+#39+MDF_Path+#39+',@fi lename2='+#39+LOG_Path+#39;
cmd.Execute;
Con:= TADOConnection.Create(nil);
con.LoginPrompt := FALSE;
con.ConnectionString:=cnstr;
con.Open;



این کد جواب میدهد اما اگر فایل EXE برنامه و دیتابیس را به جای دیگری منتقل کنم
اتصال برقرار نشده و برنامه یکی از دو پیام زیر را میدهد



project raised exception class Eoleexception with message directory lookup for the file failed with the operating system error 5
project raised exception class eoleexception with message file activation failure the physical file name may be incorrect

که اولی روی فایل MDF و دومیLDF است
فکر میکنم logfile هنوز آدرس پوشه قبلی رو داره برای همین جواب نمیده
مشکل از کجاست؟
سعی کردو Attach را با استفاده ازSQLExpress Console
ایجاد کنم اما خطا میدهد



(info) Creating a new connection (Data Source=.;AttachDbFilename="MDF_path";Integrated Security=SSPI;)
(error) An attempt to attach an auto-named database for file MDF_path failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.


البته دیتابیسم رو 2008 هم تعریف کرده و دوباره امتحان کردم اما مشکل حل نشد
لطفا راهنمایی کنید

rkhabbazi
سه شنبه 23 آذر 1389, 08:39 صبح
سلام
من ابتدا به بانک اطلاعاتی master متصل می شوم و سپس با storedProcedure بانکم را attach میکنم. جواب هم میده. برای detach هم به master وصل شده و بانکم را با StoredProcedure اصطلاحا detach می کنم.
کد :

var
constr:string;
begin
if FileExists(GetCurrentDir()+'\DataBase\'+'DBName.md f') then
begin
DM1.MasterCon.connected:=True;
DM1.sp1.Parameters.ParamByName('@filename1').Value :=GetCurrentDir()+'\DataBase\'+'DBName.mdf';
DM1.sp1.ExecProc();
DM1.MasterCon.connected:=False;
constr:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='
+'DBName'+';Data Source=.;';
DM1.ADOCon.ConnectionString:=constr;
DM1.ADOCon.Connected:=True;
end;
END;

نام بانک رو هم تو قسمت parameteres بخش خصوصیات کامپوننت StoredProcedure مقدار دهی می کنم. در اینجا فقط پارامتر @filename1 را مقدار دهی می کنم چون پویاست. همچنین در بخش خصوصیات کامپوننت، خصوصیت ProcedureName را به مقدار sp_attach_db;1 مقداردهی میکنم.
امیدوارم که برات مفید باشه. یا علی.

rez1_mahtab
چهارشنبه 24 آذر 1389, 16:52 عصر
ممنون از جوابتون
اما اگر دقت کنین منم در اون تکه کد اولی همین کارها رو کردم
به master وصل شدم و با کد خواستم دیتابیس رو attach کنم فقط از DM استفاده نکردم
در اینکه کد جواب میده شکی نیست اما جابه جا کردن مشکل ایجاد میکنه

rez1_mahtab
جمعه 26 آذر 1389, 12:47 عصر
بازم سلام
اشکال کارم در permmision ها بود که حل شد
http://www.go4answers.com/Example/cant-attach-mdf-operating-system-170239.aspx
http://social.msdn.microsoft.com/Forums/en/sqlgetstarted/thread/03e12388-01f2-4ae7-aab9-14e27a9ef0b3
بازم متشکر