PDA

View Full Version : ایراد در attach کردن پایگاه داده



rostamedastan
جمعه 12 اسفند 1384, 18:55 عصر
سلام علیکم :
برنامه ای دارم که از پایگاه داده اس کیو ال سرور استفاده کرده است دستور attach را در حالت عادی مینویسم و هرجا که پایگاه داده باشد با توجه به آدرسی که کاربر داده آن را attach می کند ولی اگر پروژه ام را از آدرس program files\borland\delphi7\project بردارم ایراد می گیرد و بانک را attach نمی کند. ضمنا" من از طریق adoconnection بانک را attach می کنم.

m-khorsandi
شنبه 13 اسفند 1384, 08:07 صبح
لطفا" پیغام رو هم بنویسید.

rostamedastan
شنبه 13 اسفند 1384, 09:43 صبح
این پیغام خطا رو میده
device active error. the phisical file name 'c:\program files\borland\delphi7\project\salary_log.ldf' may be incorrect

و این در حالی است که پایگاه داده در آدرس e:\project\salary_data.mdf است در ضمن من اصلاً آدرس بالا را در کد قرار ندادم بلکه همین آدرسی که گفتم را در کد قرار دادم و آدرس بالا در حقیقت جا اولیه برنامه من است که پایگاه داده را نیز در آن قسمت قرار داده بودم.

rostamedastan
شنبه 13 اسفند 1384, 10:30 صبح
من چند بار برنامه را امتحان کردم و به نکته غیر معقولی رسیدم که اگر برنامه را که به همراه پایگاه داده به آدرس جدید ببرم ( cut کنم ) و یکبار پایگاه داده را از خود sql server به صورت دستی از آدرس جدید attach کنم پس از reset کردن یا نکردن کامپیوتر و detach کردن می توان از همان آدرس و با استفاده از کد پایگاه داده را attach کرد ولی اگر دوباره پایگاه داده را cut کنم و تغییرات آدرس را در کد برنامه نیز اعمال کنم همان ایراد را میگیرد و در واقع آدرس قبلی را در پیغام خطا نمایش می دهد.
چه باید کرد؟

babak869
شنبه 13 اسفند 1384, 11:07 صبح
ببین دوست عزیز هنگام ساختن دیتابیس در SQL Server این برنامه 2 فایل با پسوند های Mdf و Ldf میسازه.که فایل اولی مربوط به دیتابیس اصلی و فایل دوم مربوط به Log File های دیتابیس است.شما زمانی که میخواهید دیتابیس تان را در مکانی متفاوت با مسیر پیش فرض برنامه ذخیره کنید مسیر هر دوفایل را باید در یک پوشه انتخاب و ذخیره کنید در غیر اینصورت هنگام Restore و Attach کردن دیتابیس با مشکل مواجه خواهید شد
موفق باشید

rostamedastan
شنبه 13 اسفند 1384, 14:10 عصر
سلام علیکم
من هردو فایل MDF , LDF را در یک پوشه قرار داده ام و باید بگویم تنها در صورتیکه برنامه را Cut کنم این مشکل پیش می آید ولی اگر برنامه را در همان مسیر اولیه قرار دهم و در جای دیگری کپی کنم و برای attach کردن در کد آدرس جدید را بدهم مشکلی پیش نمی آید !
این مشکل را چگونه باید حل کنم تا در کامپیوتر های دیگر دچار مشکل نشوم ؟

babak869
شنبه 13 اسفند 1384, 15:41 عصر
شما اگر یک دیتابیس را به برنامه SQL Server روی کامپیوتر Attach کنید در حقیقت این فایل جزیی از برنامه شده و حتی این دیتابیس قابل کپی برداری هم نیست مگر اینکه سرور را Stop کرده و از پنجره Task Manager پروسه های مربوط به SQL Server را ببندید.اگر میخواهید که یک دیتابیس Attach شده را در یک مکان دیگر بریزید و استفاده کنید باید آنرا از حالت Attach شده در بیاورید آنگاه آنرا در یک محل دیگر کپی کرده و آنرا مجددا به برنامه Attach کنید.
اگه بازم سوالی بود دراین تاپیک مطرح نمایید
موفق باشید

MiRHaDi
شنبه 13 اسفند 1384, 16:59 عصر
سلام
شما دستوری را که میتویسید در برنامه را اینجا بگذارید تا مشکلات آن بررسی شود
بای

rostamedastan
شنبه 13 اسفند 1384, 17:05 عصر
سلام
متشکرم از اینکه به سوال من جواب می دهید
این مواردی را که گفتید را می دانم و تمامی این کار ها را کرده ام و مشکلی برای کپی پایگاه داده ندارم مشکل اینجا است که برای مثال اگر من برنامه را در کامپیوتر دیگری قرار دهم و آدرس جدید پایگاه داده را نیز به آن بدهم پایگاه داده من را attach نمی کند و باید بانک را به آدرس قبلی مطابق آدرسی که در کامپیوتر قبلی بود ببرم و همان آدرس قبلی را نیز از طریق برنامه بدهم تا برنامه را attach کند. چهع کار کنم تا با آدرسهای جدید نیز بانک را attach کنم؟
امیدوارم منظور من را متوجه شده باشید.

این هم کد attach کردن :
with DataModule3.ADOConnection1 do

Connected := False;
ConnectionString := 'Provider=SQLOLEDB.1;' +
'Integrated Security=SSPI;' +
'Persist Security Info=False;' +
'Initial Catalog=' + 'salary' + ';' +
'Initial File Name=' +ExtractFilePath( Application.ExeName )+'salary_data.mdf';


Connected := True;

متشکرم.

babak869
شنبه 13 اسفند 1384, 22:01 عصر
مسیر جاری دیتابیس در فایل Ldf.* یا همان لاگ فایل ها ذخیره میشود.برای رفع این مشکل از ابتدا دیتابیس را در مسیری که میخواهید بعدا بر روی کامپیوتر مقصد ریخته شود در نظر بگیرید.مثلا اگر در انتها برنامه شما در مسیر زیر نصب میشود
c:\My_Prog و مسیر دیتابیس شما c:\My_Prog\Dtabase است از همان ابتدا دیتابیستان رادر مسیر c:\My_Prog\Dtabase بر روی کامپیوترتان ذخیره کنید
موفق باشید

rostamedastan
یک شنبه 14 اسفند 1384, 09:51 صبح
از پاسخ شما متشکرم. همین کاری که گفتید را انجام می دهم.
فقط وقتیکه برای برنامه setup می سازم برنامه instullshield به طور پیش فرض برنامه را در درایوی که ویندوز نصب است نصب می کند پس اگر من دیتابیس را بر روی کامپیوتر خود مثلاً در درایو C قرار دهم و برای برنامه setup بسازم بر روی کامپیوتر دیگری که ویندوز آن در درایو دیگری باشد برنامه را نصب کنم errorمی دهد که دیتابیس باید در درایو C باشد. این مشکل را چگونه برطرف کنم؟
آیا installshield این امکان را دارد که در آدرس مورد نظر ما برنامه را نصب کند ؟ اگر دارد چگونه ؟