ورود

View Full Version : attach کردن database در زمان اجرا توسط install shield



naser2009
جمعه 17 مهر 1388, 02:41 صبح
سلام دوستان عزیز
من در نرم افزار install shield به راحتی در زمان uninstall اسکریپ زیر را اجرا می کنم و دیتابیس را detach می کنم.

go
use master
Exec sp_detach_db 'reminderdb','true'

اما می خوام در زمان install هم توسط یک اسکریپ دیگر مانند زیر دیتابیسم را به بانک attach کنم.

go
use master
EXEC sp_attach_db 'ReminderDb',
'ReminderDb.mdf',
'ReminderDb_log.ldf'

چگونه از داخل برنامه setup مسیر دهی درستی برای فایل های mdfو ldf جهت attachشدن داشته باشم؟؟؟
ممنون...

kitaro
سه شنبه 21 مهر 1388, 11:01 صبح
دوست عزير براي اين کار کافيه در قسمت Server Configuration -> SQL Scripts يه اسکريپت جديد بسازين و بعد کد زير رو در برگه Script کپي کنيد:



use [master]
GO

CREATE DATABASE TESTDB ON
( FILENAME = N'%appfolder%\DB\DCMDB.mdf' ),
( FILENAME = N'%appfolder%\DB\DCMDB_log.ldf' )
FOR ATTACH
GO

بعد توي برگه Text Replacement يه عنوان جديد بسازين:


Find What: %appfolder%
Replace With: [TARGETDIR]




البته ممکنه اون کد مسير فايل رو براي Attach پيدا نکنه در نتيجه شما مجبوريد راه دوم رو امتحان کنيد که 100% جواب ميده:



use [master]
GO

CREATE DATABASE TESTDB ON
( FILENAME = N'%dbfolder%\DB\DCMDB.mdf' ),
( FILENAME = N'%dbfolder%\DB\DCMDB_log.ldf' )
FOR ATTACH
GO


در مرحله بعد وارد برگه Text Replacement بشين و يه replacement با مشخصات زير وارد کنيد:


Find What: %dbfolder%
Replace With: [Z_TARGETDIR]


تابع زير رو در Install Script ايجاد کنيد :


export prototype GetTARGETDIR(HWND);

function GetTARGETDIR(hMSI)
STRING svPropValue,svTemp;
NUMBER nvBuffer;
begin
svTemp = TARGETDIR;
StrRemoveLastSlash ( svTemp );
MsiSetProperty(hMSI,"Z_TARGETDIR", svTemp);
nvBuffer = 256;



بعد توي قسمت Property Manager يه مشخصه به اسم Z_TARGETDIR ايجاد کن.

و در نهايت يه Custom Action از نوع New InstallScript بساز و اسم تابع GetTARGETDIR رو بهش بده و Install Exec Sequence رو برابر با <First Action> قرار بده.

تموم شد.
روش دوم سخت تره ولي OK.

iekrang
سه شنبه 24 اردیبهشت 1392, 14:48 عصر
سلام، من هر دو راه رو چک کردم ولی خطا میده.

راه دوم رو که امتحان میکنم ، targetdir و StrRemoveLastSlash و MsiSetProperty رو نمیشناسه ! خطای undefined identifier میده.

کسی میدونه دلیلش چیه؟

احمد سامعی
یک شنبه 20 مرداد 1392, 17:37 عصر
دوستان کسی اگر به نتیجه رسیده به ما هم بگه من از Installsheild 2010 استفاده می کنم توی توضیحات بالا نفهمیدم دیتابیس کجا قرار بردم منظورم مسیر فیزیکی؟