ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/design/IBDatabaseEdit.pas
(Generate patch)

Comparing ibx/trunk/design/IBDatabaseEdit.pas (file contents):
Revision 230 by tony, Tue Dec 6 10:33:46 2016 UTC vs.
Revision 231 by tony, Mon Apr 16 08:32:21 2018 UTC

# Line 49 | Line 49 | interface
49  
50   uses
51    SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
52 <  StdCtrls, ExtCtrls, IBDataBase, IB,  LResources;
52 >  StdCtrls, ExtCtrls,  IBDatabase, IB,  LResources;
53  
54   type
55  
56    { TIBDatabaseEditForm }
57  
58    TIBDatabaseEditForm = class(TForm)
59 +    Browse: TButton;
60 +    DatabasePath: TEdit;
61 +    Label1: TLabel;
62 +    Label7: TLabel;
63 +    Label8: TLabel;
64 +    Label9: TLabel;
65 +    PortNo: TEdit;
66 +    Protocol: TComboBox;
67 +    ConnectionTypeBtn: TRadioGroup;
68 +    ServerName: TEdit;
69      UseSystemDefaultCS: TCheckBox;
60    GroupBox2: TGroupBox;
70      Panel1: TPanel;
62    DatabaseName: TEdit;
63    Label1: TLabel;
64    LocalRbtn: TRadioButton;
65    RemoteRbtn: TRadioButton;
66    Browse: TButton;
71      GroupBox1: TGroupBox;
72      UserName: TEdit;
73      Password: TEdit;
# Line 78 | Line 82 | type
82      LoginPrompt: TCheckBox;
83      Label6: TLabel;
84      CharacterSet: TComboBox;
81    ServerName: TEdit;
82    Protocol: TComboBox;
83    Label7: TLabel;
84    Label8: TLabel;
85      Test: TButton;
86    procedure RemoteRbtnClick(Sender: TObject);
86      procedure BrowseClick(Sender: TObject);
87 <    procedure LocalRbtnClick(Sender: TObject);
87 >    procedure DatabaseParamsEditingDone(Sender: TObject);
88      procedure OKBtnClick(Sender: TObject);
89      procedure FormCreate(Sender: TObject);
90      procedure HelpBtnClick(Sender: TObject);
91 <    procedure UserNameChange(Sender: TObject);
92 <    procedure PasswordChange(Sender: TObject);
93 <    procedure SQLRoleChange(Sender: TObject);
91 >    procedure PasswordEditingDone(Sender: TObject);
92 >    procedure ProtocolCloseUp(Sender: TObject);
93 >    procedure ConnectionTypeBtnSelectionChanged(Sender: TObject);
94 >    procedure SQLRoleEditingDone(Sender: TObject);
95      procedure CharacterSetChange(Sender: TObject);
96      procedure TestClick(Sender: TObject);
97 +    procedure UserNameEditingDone(Sender: TObject);
98      procedure UseSystemDefaultCSChange(Sender: TObject);
99    private
100      { Private declarations }
101      Database: TIBDatabase;
102      function Edit: Boolean;
103 <    function GetParam(Name: string): string;
104 <    procedure AddParam(Name, Value: string);
105 <    procedure DeleteParam(Name: string);
103 >    procedure AddParam(aName, aValue: string);
104 >    procedure DeleteParam(aName: string);
105 >    procedure UpdateParamEditBoxes;
106    public
107      { Public declarations }
108    end;
# Line 115 | Line 116 | implementation
116  
117   {$R *.lfm}
118  
119 < uses TypInfo, FBMessages;
119 > uses TypInfo, FBMessages, IBUtils;
120  
121   function EditIBDatabase(ADatabase: TIBDatabase): Boolean;
122   begin
# Line 128 | Line 129 | begin
129    end;
130   end;
131  
132 < function TIBDatabaseEditForm.GetParam(Name: string): string;
132 < var
133 <  i: Integer;
132 > procedure TIBDatabaseEditForm.AddParam(aName, aValue: string);
133   begin
134 <  Result := '';
135 <  for i := 0 to DatabaseParams.Lines.Count - 1 do
136 <  begin
137 <    if (Pos(Name, LowerCase(DatabaseParams.Lines.Names[i])) = 1) then {mbcs ok}
139 <    begin
140 <      Result := DatabaseParams.Lines.Values[DatabaseParams.Lines.Names[i]];
141 <      break;
142 <    end;
143 <  end;
134 >  if Trim(aValue) = '' then
135 >    DeleteParam(aName)
136 >  else
137 >    DatabaseParams.Lines.Values[aName] := Trim(aValue);
138   end;
139  
140 < procedure TIBDatabaseEditForm.AddParam(Name, Value: string);
140 > procedure TIBDatabaseEditForm.DeleteParam(aName: string);
141   var
142    i: Integer;
149  found: boolean;
143   begin
151  found := False;
152  if Trim(Value) <> '' then
153  begin
154    DatabaseParams.Lines.NameValueSeparator := '=';
144      for i := 0 to DatabaseParams.Lines.Count - 1 do
145      begin
146 <      if (Pos(Name, LowerCase(DatabaseParams.Lines.Names[i])) = 1) then {mbcs ok}
146 >      if (Pos(aName, LowerCase(DatabaseParams.Lines.Names[i])) = 1) then {mbcs ok}
147        begin
148 <        DatabaseParams.Lines.Values[DatabaseParams.Lines.Names[i]] := Value;
160 <        found := True;
148 >        DatabaseParams.Lines.Delete(i);
149          break;
150        end;
151      end;
164    if not found then
165      DatabaseParams.Lines.Add(Name + '=' + Value);
166  end
167  else
168    DeleteParam(Name);
152   end;
153  
154 < procedure TIBDatabaseEditForm.DeleteParam(Name: string);
155 < var
173 <  i: Integer;
154 > procedure TIBDatabaseEditForm.UpdateParamEditBoxes;
155 > var st: string;
156   begin
157 <    for i := 0 to DatabaseParams.Lines.Count - 1 do
158 <    begin
159 <      if (Pos(Name, LowerCase(DatabaseParams.Lines.Names[i])) = 1) then {mbcs ok}
160 <      begin
161 <        DatabaseParams.Lines.Delete(i);
162 <        break;
163 <      end;
164 <    end;
157 >  UserName.Text := DatabaseParams.Lines.Values['user_name'];
158 >  Password.Text := DatabaseParams.Lines.Values['password'];
159 >  SQLRole.Text := DatabaseParams.Lines.Values['sql_role_name'];
160 >  st := DatabaseParams.Lines.Values['lc_ctype'];
161 >  if (st <> '') then
162 >    CharacterSet.ItemIndex := CharacterSet.Items.IndexOf(st)
163 >  else
164 >    CharacterSet.ItemIndex := -1;
165   end;
166  
167   function TIBDatabaseEditForm.Edit: Boolean;
168   var
169 <  st: string;
169 >  aServerName: string;
170 >  aDatabaseName: string;
171 >  aProtocol: TProtocolAll;
172 >  aPortNo: string;
173  
174 <  procedure DecomposeDatabaseName;
175 <  var
191 <    Idx1, Idx2: Integer;
192 <    st: string;
174 > begin
175 >  if ParseConnectString(Database.DatabaseName, aServerName, aDatabaseName, aProtocol, aPortNo) then
176    begin
177 <    if Pos('\\', Database.DatabaseName) <> 0 then {do not localize}
178 <    begin
179 <      LocalRBtn.Checked := False;
180 <      RemoteRbtn.Checked := True;
198 <      Protocol.ItemIndex := 1;
199 <      st := copy(Database.DatabaseName, 3, Length(Database.DatabaseName));
200 <      Idx1 := Pos('\', st); {do not localize}
201 <      if Idx1 = 0 then
202 <        IBError(ibxeUnknownError, [nil])
203 <      else begin
204 <        ServerName.Text := Copy(st, 1, Idx1 - 1);
205 <        DatabaseName.Text:= Copy(st, Idx1 + 1, Length(st));
206 <      end;
207 <    end
208 <    else begin
209 <      Idx1 := Pos(':', Database.DatabaseName ); {do not localize}
210 <      If (Idx1 = 0) or (Idx1 = 2) then
211 <      begin
212 <        DatabaseName.Text := Database.DatabaseName;
213 <      end
214 <      else
215 <      begin
216 <        LocalRBtn.Checked := False;
217 <        RemoteRbtn.Checked := True;
218 <        Idx2 := Pos('@', Database.DatabaseName); {do not localize}
219 <        if Idx2 = 0 then
220 <        begin
221 <          Protocol.ItemIndex := 0;
222 <          ServerName.Text := copy(Database.DatabaseName, 1, Idx1 - 1);
223 <          DatabaseName.Text := copy(Database.DatabaseName, Idx1 + 1,
224 <            Length(Database.DatabaseName));
225 <        end
226 <        else begin
227 <          Protocol.ItemIndex := 2;
228 <          ServerName.Text := copy(Database.DatabaseName, 1, Idx2 - 1);
229 <          DatabaseName.Text := copy(Database.DatabaseName, Idx2 + 1,
230 <            Length(Database.DatabaseName));
231 <        end;
232 <      end;
233 <    end;
177 >    ServerName.Text := aServerName;
178 >    DatabasePath.Text := aDatabaseName;
179 >    Protocol.ItemIndex := ord(aProtocol);
180 >    PortNo.Text := aPortNo;
181    end;
182 < begin
183 <  DecomposeDatabaseName;
182 >  ProtocolCloseUp(nil);
183 >  ConnectionTypeBtnSelectionChanged(nil);
184    if Trim(Database.Params.Text) = '' then
185      DatabaseParams.Clear
186    else
187      DatabaseParams.Lines.Assign(Database.Params);
188    LoginPrompt.Checked := Database.LoginPrompt;
189 <  UserName.Text := GetParam('user_name');
190 <  Password.Text := GetParam('password');
244 <  SQLRole.Text := GetParam('sql_role');
245 <  st := GetParam('lc_ctype');
246 <  if (st <> '') then
247 <    CharacterSet.ItemIndex := CharacterSet.Items.IndexOf(st);
248 <  if Database.UseDefaultSystemCodePage then
249 <    UseSystemDefaultCS.Checked := true
250 <  else
251 <    UseSystemDefaultCS.Checked := false;
189 >  UpdateParamEditBoxes;
190 >  UseSystemDefaultCS.Checked := Database.UseDefaultSystemCodePage;
191    Result := False;
192    if ShowModal = mrOk then
193    begin
194 <    Database.DatabaseName := DatabaseName.Text;
195 <    if LocalRbtn.Checked then
257 <      DatabaseName.Text := Database.DatabaseName
258 <    else
259 <      case Protocol.ItemIndex of
260 <        0: Database.DatabaseName := Format('%s:%s', [ServerName.Text, DatabaseName.Text]); {do not localize}
261 <        1: Database.DatabaseName := Format('\\%s\%s', [ServerName.Text, DatabaseName.Text]); {do not localize}
262 <        2: Database.DatabaseName := Format('%s@%s', [ServerName.Text, DatabaseName.Text]); {do not localize}
263 <      end;
194 >    Database.DatabaseName := MakeConnectString(ServerName.Text, DatabasePath.Text,
195 >      TProtocolAll(Protocol.ItemIndex), PortNo.Text);
196      Database.Params := DatabaseParams.Lines;
197      Database.LoginPrompt := LoginPrompt.Checked;
198      Database.UseDefaultSystemCodePage := UseSystemDefaultCS.Checked;
# Line 268 | Line 200 | begin
200    end;
201   end;
202  
271 procedure TIBDatabaseEditForm.RemoteRbtnClick(Sender: TObject);
272 begin
273  Browse.Enabled := False;
274  Label7.Enabled := True;
275  Label8.Enabled := True;
276  Protocol.Enabled := True;
277  ServerName.Enabled := True;
278  if Protocol.Text = '' then
279    Protocol.Text := 'TCP';
280 end;
281
203   procedure TIBDatabaseEditForm.BrowseClick(Sender: TObject);
204   begin
205    with TOpenDialog.Create(Application) do
206      try
207 <      InitialDir := ExtractFilePath(DatabaseName.Text);
207 >      InitialDir := ExtractFilePath(DatabasePath.Text);
208        Filter := SDatabaseFilter;
209        if Execute then
210 <        DatabaseName.Text := FileName;
210 >        DatabasePath.Text := FileName;
211      finally
212        Free
213      end;
214   end;
215  
216 < procedure TIBDatabaseEditForm.LocalRbtnClick(Sender: TObject);
216 > procedure TIBDatabaseEditForm.DatabaseParamsEditingDone(Sender: TObject);
217   begin
218 <  Browse.Enabled := True;
298 <  Label7.Enabled := False;
299 <  Label8.Enabled := False;
300 <  ServerName.Enabled := False;
301 <  Protocol.Enabled := False;
218 >  UpdateParamEditBoxes;
219   end;
220  
221   procedure TIBDatabaseEditForm.OKBtnClick(Sender: TObject);
# Line 323 | Line 240 | begin
240    Application.HelpContext(HelpContext);
241   end;
242  
243 < procedure TIBDatabaseEditForm.UserNameChange(Sender: TObject);
243 > procedure TIBDatabaseEditForm.PasswordEditingDone(Sender: TObject);
244   begin
245 <  AddParam('user_name', UserName.Text);
245 >  AddParam('password', Password.Text);
246   end;
247  
248 < procedure TIBDatabaseEditForm.PasswordChange(Sender: TObject);
248 > procedure TIBDatabaseEditForm.ProtocolCloseUp(Sender: TObject);
249   begin
250 <  AddParam('password', Password.Text);
250 >  if Protocol.ItemIndex = 3 then
251 >    ConnectionTypeBtn.ItemIndex := 0
252 >  else
253 >    ConnectionTypeBtn.ItemIndex := 1;
254 > end;
255 >
256 > procedure TIBDatabaseEditForm.ConnectionTypeBtnSelectionChanged(Sender: TObject);
257 > begin
258 >  if ConnectionTypeBtn.ItemIndex > 0 then
259 >  begin
260 >    Browse.Enabled := False;
261 >    Label7.Enabled := True;
262 >    Label8.Enabled := True;
263 >    Protocol.Enabled := True;
264 >    ServerName.Enabled := True;
265 >    if Protocol.ItemIndex = 3 then
266 >      Protocol.ItemIndex := 4;
267 >  end
268 >  else
269 >  begin
270 >    Browse.Enabled := True;
271 >    Label7.Enabled := False;
272 >    Label8.Enabled := true;
273 >    ServerName.Text := '';
274 >    ServerName.Enabled := False;
275 >    Protocol.Enabled := true;
276 >    Protocol.ItemIndex := 3;
277 >  end;
278   end;
279  
280 < procedure TIBDatabaseEditForm.SQLRoleChange(Sender: TObject);
280 > procedure TIBDatabaseEditForm.SQLRoleEditingDone(Sender: TObject);
281   begin
282    AddParam('sql_role_name', SQLRole.Text);
283   end;
284  
285   procedure TIBDatabaseEditForm.CharacterSetChange(Sender: TObject);
286   begin
287 <  if (CharacterSet.Text <> 'None') then {do not localize}
287 >  if (CharacterSet.ItemIndex <> -1 ) then {do not localize}
288      AddParam('lc_ctype', CharacterSet.Text)
289    else
290      DeleteParam('lc_ctype');
# Line 353 | Line 297 | begin
297    Test.Enabled := false;
298    tempDB := TIBDatabase.Create(nil);
299    try
300 <    if LocalRbtn.Checked then
301 <      tempDB.DatabaseName := DatabaseName.Text
358 <    else
359 <      case Protocol.ItemIndex of
360 <        0: tempDB.DatabaseName := Format('%s:%s', [ServerName.Text, DatabaseName.Text]); {do not localize}
361 <        1: tempDB.DatabaseName := Format('\\%s\%s', [ServerName.Text, DatabaseName.Text]); {do not localize}
362 <        2: tempDB.DatabaseName := Format('%s@%s', [ServerName.Text, DatabaseName.Text]); {do not localize}
363 <      end;
300 >    tempDB.DatabaseName := MakeConnectString(ServerName.Text, DatabasePath.Text,
301 >      TProtocolAll(Protocol.ItemIndex), PortNo.Text);
302      tempDB.Params.Assign(DatabaseParams.Lines);
303      tempDB.LoginPrompt := LoginPrompt.Checked;
304      try
# Line 375 | Line 313 | begin
313    end;
314   end;
315  
316 + procedure TIBDatabaseEditForm.UserNameEditingDone(Sender: TObject);
317 + begin
318 +  AddParam('user_name', UserName.Text);
319 + end;
320 +
321   procedure TIBDatabaseEditForm.UseSystemDefaultCSChange(Sender: TObject);
322   begin
323    CharacterSet.Enabled := not UseSystemDefaultCS.Checked;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines