原文 Inno Setup connection to the database and create

Description: the first half of this program in Inno Setup instance inside there, behind the database backup and restore inside the instance is not easy to find online, I spent a great difficulty sentence try out , please Zhuanzhai marked to indicate the respect of the individual labor. Thank you!

[Code] 

{--- SQLDMO ---} / / about SQLDMO of knowledge can go online 

const
/ / SQL server name, the name when installing SQL will be asked to enter the server name, the name you see when you open the SQL server on each machine is different, as I as shown below, but here we can use a generic The name is the (local) , Which means that the server is local. That's it. SQLServerName = '(LOCAL)';
SQLDMOGrowth_MB = 0; / / This is to create a button press event, this button is in the Setup Wizard page, create a configuration database "button
to procedure SQLDMOButtonOnClick (Sender: TObject);
var
/ / Used in some of the variables
SQLServer, Database, DBFile, LogFile: Variant;
IDColumn, NameColumn, Table, oBackup, oRestore: Variant;
db_path: string;
/ / Variable to store read the registry key value
ResultStr: String;
begin
{Create the main SQLDMO COM Automation object} / / Check if you installed SQL
try
SQLServer: = CreateOleObject ('SQLDMO.SQLServer');
except
RaiseException ('You did not install the SQL database.' # 13 # 13 '(Error''' + GetExceptionMessage +'' 'occurred)');
end; {Connect to the Microsoft SQL Server} / / Connect to SQL
SQLServer.LoginSecure: = True;
SQLServer.Connect (SQLServerName); / / MsgBox ('connection to SQL Server''' + SQLServerName +'' '.' MbInformation, MB_OK); {Setup a database} / / Create the SQL database file
Database: = CreateOleObject ('SQLDMO.Database');
Database.Name: = 'dbase'; / / To create a database name DBFile: = CreateOleObject ('SQLDMO.DBFile');
DBFile.Name: = 'ISData1';
/ / Database records
DBFile.PhysicalName: = 'c :/ program files / microsoft sql server / mssql / data / dbase_Data.MDF';
DBFile.PrimaryFile: = True;
DBFile.FileGrowthType: = SQLDMOGrowth_MB;
DBFile.FileGrowth: = 1; Database.FileGroups.Item ('PRIMARY'). DBFiles.Add (DBFile); LogFile: = CreateOleObject ('SQLDMO.LogFile');
LogFile.Name: = 'ISLog1';
/ / Database diary.
LogFile.PhysicalName: = 'c :/ program files / microsoft sql server / mssql / data / dbase_Log.LDF'; Database.TransactionLog.LogFiles.Add (LogFile); {Add the database} / / Add database
SQLServer.Databases.Add (Database); / / MsgBox ('Added database''' + Database.Name +'' '.', MbInformation, mb_Ok); / / Data backup
oBackup: = CreateOleObject ('SQLDMO.Backup'); / / create a backup object
oBackup.Database: = 'louyu'; / / To back up the database name
oBackup.Files: = 'f :/ louyu3.bak'; / / backup to
oBackup.BackupSetName: = 'louyu3.bak'; / / name of the backup
oBackup.BackupSetDescription: = 'bakDescription';
oBackup.Initialize: = true;
oBackup.SQLBackup (SQL Server); / / execute SQL backup operation / / Restore the data Highlights: / / Database backup file in a position to lay the package you want to restore the database to find the backup file first, then find the backup file before the software installation to where we need to know, which is the installation path. Installation in the registry to establish the relevant information, including software installation path recorded on the registry, please see the above write the INNO SETUP Registry Add read.
Why restore the database in this way, it seems to be around a circle, in fact, I also think that this may not be a good way, but I do not know any other way to get the data in the installation package ( file path) or software to be installed. {App}, {pf} such as this can not be directly used, why we have such a stupid way.
If any friends have a good way, please let me know. / / Get the installation path from the registry, according to the path found to restore the database backup file.
if RegQueryStringValue (HKLM, 'SOFTWARE / *******', 'Server', ResultStr) then
begin
ResultStr: = RemoveQuotes (ResultStr);
msgbox (resultstr, mbinformation, mb_ok);
try
oRestore: = CreateOleObject ('SQLDMO.Restore'); / / create a restore object
oRestore.Database: = 'dbase'; / / restore the database name
db_path: = resultstr + '/ database file / dbase.bak'; / / path of the backup file
The MsgBox (DB_PATH mbinformation, MB_OK); / / test to see the path right
oRestore.files: = db_path; / / Specify the backup file
oRestore.replacedatabase: = true;
oRestore.sqlrestore (sqlserver); / / perform the restore operation
MsgBox ('database restore was successful!', Mbinformation, MB_OK);
except
MsgBox ('database restore failed, please try again or consult the help documentation manual configuration!' Mbinformation, MB_OK);
end;
end;
end; / / Database creation and restore events finished, but it does not know when to perform intelligent, so we have to tell it when to perform. Here is the program is finished installing, At the end of the page BUTTON button, when this button is pressed, the database incident response.
{---}
/ / Create a button
procedure CreateButton (ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent);
begin
create with TButton.Create (WizardForm) do begin / / button object
Left: to = ALeft; / / Button's position and the width and height
Top: = ATop;
Width: = WizardForm.CancelButton.Width;
Height: = WizardForm.CancelButton.Height;
Caption: = ACaption; / / button name
OnClick: = ANotifyEvent;
/ / This is to create a button to specify a parent window, which means that it displayed in which the top of the page
Parent: = WizardForm.finishedPage; / / specified here is the end of the page of the form
end;
end; / / Initialization Wizard window
the procedure InitializeWizard ();
var
Left, Top, TopInc: Integer;
begin
Left: = WizardForm.WelcomeLabel2.Left;
TopInc: = WizardForm.CancelButton.Height + 8;
Top: = WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4 * TopInc;
/ / Created above button displayed, and assign it a response event
CreateButton (Left, Top, '& configuration SQL database' _AT_ SQLDMOButtonOnClick);
Top: = Top + TopInc;
end;

  

最新文章

  1. laravel5 安装笔记
  2. 【CTO讲堂】以API为核心的移动应用云大发展时代
  3. 异或的精彩应用 FIX_BTMAP_END
  4. Win10添加简体中文美式键盘的方法
  5. ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)
  6. Oracle查询字符集
  7. Sublime Text 2 安装与使用SFTP插件
  8. Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
  9. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-010-Introduction为类增加新方法@DeclareParents、<aop:declare-parents>
  10. css背景图片位置:background的position
  11. Python模块之subprocess--使用Popen来调用系统命令
  12. Python多线程练习(threading)
  13. Codeforces Round #410 (Div. 2)
  14. SSRS报表服务随笔(rdl报表服务)-报表数据:使用第三方控件生成条形码
  15. Flexbox(弹性盒模型)完全指南
  16. Nunit的尝试
  17. puppeteer端对端测试demo
  18. 20180518VSTO多簿单表汇总
  19. Android知识补充(Android学习笔记)
  20. element-ui switch组件源码分析整理笔记(二)

热门文章

  1. Android 墙纸设置代码 详细说明
  2. Linux在device is busy处理
  3. Java日志性能那些事(转)
  4. Git 1.9.5.msysgit.1
  5. javascript/jquery读取和修改HTTP headers
  6. js isArray小结
  7. uva757 - Gone Fishing(馋)
  8. Entity Framework加载相关实体——延迟加载Lazy Loading、贪婪加载Eager Loading、显示加载Explicit Loading
  9. ExtJS得知--------Ext.Element学习的查询方法(示例)
  10. PHP移动互联网的发展票据(6)——MySQL召回数据库基础架构[1]