gpt4 book ai didi

sql - 如何使用 Inno Setup 使用 .sql 脚本更新数据库

转载 作者:行者123 更新时间:2023-12-04 02:08:43 31 4
gpt4 key购买 nike

我想编译一个将使用用户提供的凭据连接到远程数据库的设置,然后使用 .sql 脚本安装几个 db 组件。

可以使用 Inno Setup 吗?

更多细节:

我想要一个自定义表单,要求用户输入数据库地址和凭据,然后运行将执行将更新远程数据库服务器的 sql 脚本的命令。

如果更新成功 - 成功完成安装。

这是一个相当普遍的问题——我有很多定制的设置,应该连接到不同的服务器/运行不同的脚本——这个想法是构建一个提供这个功能的通用表单。

最佳答案

我不认为你可以有一个完全通用的形式,因为对于不同的服务器,你可能需要一个连接字符串,或者一个服务器名称和一个(可选)端口;对于某些服务器,您将使用系统身份验证,而对于其他服务器,您将使用用户名密码元组。

话虽如此,我会给你一个小的演示 Inno 脚本,它要求提供服务器名称和端口、用户名和密码,然后进行一些测试,然后执行一个应用程序,该应用程序(通过代码)提取到临时目录并将被删除由安装人员。您可以将其用作脚本的起点。拥有一些这样的片段,并根据需要将它们包含在您的脚本中可能就是您所需要的:

[Setup]
AppID=DBUpdateTest
AppName=Test
AppVerName=Test 0.1
AppPublisher=My Company, Inc.
DefaultDirName={pf}\Test
DefaultGroupName=Test
DisableDirPage=yes
DisableProgramGroupPage=yes
OutputBaseFilename=setup
PrivilegesRequired=none

[Files]
Source: "isql.exe"; DestDir: "{tmp}"; Flags: dontcopy
Source: "update_V42.sql"; DestDir: "{tmp}"; Flags: dontcopy

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Code]
var
DBPage: TInputQueryWizardPage;

procedure InitializeWizard;
begin
DBPage := CreateInputQueryPage(wpReady,
'Database Connection Information', 'Which database is to be updated?',
'Please specify the server and the connection credentials, then click Next.');
DBPage.Add('Server:', False);
DBPage.Add('Port:', False);
DBPage.Add('User name:', False);
DBPage.Add('Password:', True);

DBPage.Values[0] := GetPreviousData('Server', '');
DBPage.Values[1] := GetPreviousData('Port', '');
DBPage.Values[2] := GetPreviousData('UserName', '');
DBPage.Values[3] := GetPreviousData('Password', '');
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
begin
SetPreviousData(PreviousDataKey, 'Server', DBPage.Values[0]);
SetPreviousData(PreviousDataKey, 'Port', DBPage.Values[1]);
SetPreviousData(PreviousDataKey, 'UserName', DBPage.Values[2]);
SetPreviousData(PreviousDataKey, 'Password', DBPage.Values[3]);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
begin
Result := True;
if CurPageID = DBPage.ID then begin
if DBPage.Values[0] = '' then begin
MsgBox('You must enter the server name or address.', mbError, MB_OK);
Result := False;
end else if DBPage.Values[2] = '' then begin
MsgBox('You must enter the user name.', mbError, MB_OK);
Result := False;
end else if DBPage.Values[3] = '' then begin
MsgBox('You must enter the user password.', mbError, MB_OK);
Result := False;
end else begin
ExtractTemporaryFile('isql.exe');
ExtractTemporaryFile('update_V42.sql');
if Exec(ExpandConstant('{tmp}') + '\isql.exe', '--user ' + DBPage.Values[2]
+ ' --password ' + DBPage.Values[3] + ' --database ' + DBPage.Values[0]
+ ':foo --script update_V42.sql', '',
SW_HIDE, ewWaitUntilTerminated, ResultCode)
then begin
// check ResultCode and set Result accordingly
Result := ResultCode = 0;
end else begin
MsgBox('Database update failed:'#10#10 + SysErrorMessage(ResultCode),
mbError, MB_OK);
Result := False;
end;
end;
end;
end;

当心:我还没有对此进行全面测试,因此可能需要更多代码来正确清理所有内容。错误处理肯定是缺失的!

关于sql - 如何使用 Inno Setup 使用 .sql 脚本更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171199/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com