मुझे नहीं लगता कि आपके पास एक पूरी तरह से सामान्य रूप हो सकता है, क्योंकि विभिन्न सर्वरों के लिए आपको एक कनेक्शन स्ट्रिंग या सर्वर नाम और एक (वैकल्पिक) पोर्ट की आवश्यकता हो सकती है; कुछ सर्वरों के लिए आप सिस्टम प्रमाणीकरण का उपयोग करेंगे, दूसरों के लिए उपयोगकर्ता नाम पासवर्ड टुपल।
यह कहकर कि मैं आपको एक छोटा डेमो इनो स्क्रिप्ट दूंगा जो सर्वर का नाम और बंदरगाह, उपयोगकर्ता नाम और पासवर्ड मांगता है, फिर कुछ परीक्षण करता है, फिर एक अनुप्रयोग निष्पादित करता है जो निकाला जाता है (कोड द्वारा) temp निर्देशिका में और इंस्टॉलर द्वारा हटा दिया जाएगा। आप इसे अपनी स्क्रिप्ट के लिए शुरुआती बिंदु के रूप में उपयोग कर सकते हैं। आवश्यक के रूप में अपनी स्क्रिप्ट में इस तरह के टुकड़े के कुछ ही बीत रहा है, और सहित उन्हें शायद सब हो जाएगा आप की जरूरत:
[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;
सावधान: मैं पूरी तरह से इस परीक्षण नहीं किया है, इसलिए अधिक कोड हो सकता है सब कुछ ठीक से साफ करने के लिए आवश्यक अप। त्रुटि प्रबंधन निश्चित रूप से गायब है!
यह निश्चित रूप से संभव है, लेकिन बिना किसी जानकारी के एक सार्थक उत्तर देना मुश्किल है। क्या पूछते हैं? क्या आप पहले से ही ऐसा करने की कोशिश कर चुके थे? क्या डेटाबेस? कृपया स्पष्ट करें ... – mghie
अच्छी तरह से, विचार एक सामान्य रूप है - ऊपर विवरण .. – ofer