dbTalk Databases Forums  

Installing SQLExpress and Db restore using InnoSetup

microsoft.public.sqlserver.setup microsoft.public.sqlserver.setup


Discuss Installing SQLExpress and Db restore using InnoSetup in the microsoft.public.sqlserver.setup forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Bernd Maierhofer
 
Posts: n/a

Default Installing SQLExpress and Db restore using InnoSetup - 06-30-2010 , 02:05 AM






Is anybody using InnoSetup for installing and deploying a MSSQL Express
database? I used SQLDMO but would like to update this. Additionally we have
sometimes issues with win7.

Has anybody a working script for installing all prerequisites, detecting an
existing server, attching/restoring a database and is willing to share?

Below is part of my script, maybe someone can make use of it.

brgds Bernd

[code]
....
procedure CreateDatabase;
var
SQLServerName: string;
DBName: string;
UserName, Password: string;
SQLServer, DB: variant;
sSql,s: string;
begin
ProgressPage.SetText('Anbinden der Datenbank', 'Verbinden zum Server
....');
ProgressPage.SetProgress(0, 0);
ProgressPage.Show;
try
ProgressPage.SetProgress(1, 10);
// Daten holen
SQLServerName := GetData('Server');
DBName := GetData('DB');
Username := GetData('User');
Password := GetData('Password');


{ Create the main SQLDMO COM Automation object }
ProgressPage.SetProgress(3, 10);

try
SQLServer := CreateOleObject('SQLDMO.SQLServer');
except
MsgBox('Microsoft SQL server Connectivity Tools sind nicht
installiert.'#13#10 +
'Installieren Sie entweder MS-SQL-Server wenn Sie nut.s lokal
benutzen oder '#13#10 +
'die Connectivity Tools (=native client).'#13#10'(' +
GetExceptionMessage +
')', mbInformation, MB_OK);
ProgressPage.Hide;
exit;
end;

{ Connect to the Microsoft SQL Server }
try
SQLServer.LoginSecure := True;
SQLServer.Connect(SQLServerName);
except
MsgBox('SQLServer ' + SQLServerName + ' wurde nicht gefunden.'#13#10
+
'(' + GetExceptionMessage + ')', mbInformation, MB_OK);
ProgressPage.Hide;
exit;
end;
ProgressPage.SetProgress(4, 10);
ProgressPage.SetText('Anbinden der Datenbank', 'Beginne ...');
try
if WizardSetupType(False) = 'local' then
begin
s := ExpandConstant('{app}') + '\Database\';
DB := CreateOleObject('SQLDMO.Database');
DB := SQLServer.Databases('master');
sSql := 'RESTORE DATABASE [nuts] FROM ' + 'DISK = N''' +
s + 'nuts_deploy.bak'' WITH FILE = 1, ' +
'MOVE N''nuts_data'' TO N''' + s + 'nuts.mdf'', ' +
'MOVE N''nuts_log'' TO N''' + s + 'nuts.ldf'', NOUNLOAD,
REPLACE, STATS = 10 ';
DB.ExecuteImmediate(ssql);
end;
except
MsgBox('Restore der Datenbank ' + DBName + ' schlug fehl.'#13#10 + s
+#13#10'(' + GetExceptionMessage + ')', mbInformation, MB_OK);
ProgressPage.Hide;
exit;
end;
ProgressPage.SetText('Anbinden der Datenbank', 'Fertig. Nächste
Schritte ...');

ProgressPage.SetProgress(6, 10);

try
s := 'USE [master]; CREATE LOGIN [' + UserName + '] WITH PASSWORD =
''' +
Password + ''', DEFAULT_DATABASE = [' + DBName + ']; ' +
' USE [' + DBName + ']; CREATE USER [' + UserName + '] FOR LOGIN
[' + UserName + '] ;' +
' EXEC sys.sp_addrolemember @rolename = N''db_owner'', @membername
= N''' +
UserName + '''; ';
DB.ExecuteImmediate(s);
except
// sollte der user schon da sein --> ignorieren
end;
try
s := 'use ' + DBName + '; exec sp_change_users_login ''Auto_Fix'',
''' + UserName + '''; ' +
'exec sp_changedbowner ''' + UserName + ''';';
DB.ExecuteImmediate(s);
except
// sollte der user schon da sein --> ignorieren
end;
ProgressPage.SetProgress(10, 10);
finally
ProgressPage.Hide;
end;
end;

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.