Das glaube ich nicht, dass Sie eine völlig generische Form haben können, wie für verschiedene Server, die Sie entweder eine einzelne Verbindungszeichenfolge benötigen, oder einen Servernamen und ein (optional) Port; Für einige Server verwenden Sie die Systemauthentifizierung, für andere Server einen Benutzernamen tuple.
Nachdem ich gesagt habe, werde ich Ihnen ein kleines Demo-Inno-Skript geben, das nach Servername und Port, Benutzername und Passwort fragt, dann ein paar Tests durchführt und dann eine Anwendung ausführt, die (nach Code) in das temporäre Verzeichnis extrahiert wird und wird vom Installer gelöscht. Sie können dies als Ausgangspunkt für Ihre Skripts verwenden. ein paar solcher Schnipsel zu haben, und sie in Ihren Skripten als notwendig werden alle wahrscheinlich benötigen Sie:
[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;
Vorsicht: Ich habe dies nicht vollständig getestet, so kann es mehr Code notwendig sind, um alles sauber sein oben. Fehlerbehandlung fehlt definitiv!
Es ist sicherlich möglich, aber ohne weitere Informationen ist es schwer, eine sinnvolle Antwort zu geben. Was ist deine Frage? Hast du es schon versucht? Welche Datenbank? Bitte klären ... – mghie
gut, die Idee ist, eine generische Form zu haben - Details über .. – ofer