source: trunk/Forms/UFormFields.pas

Last change on this file was 29, checked in by chronos, 20 months ago
  • Fixed: Load table fields in records list and record edit form.
  • Fixed: Record add needs to insert new row into database.
File size: 4.3 KB
Line 
1unit UFormFields;
2
3interface
4
5uses
6 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
7 ActnList, ComCtrls, Menus, UDatabase;
8
9type
10
11 { TFormFields }
12
13 TFormFields = class(TForm)
14 AAdd: TAction;
15 AOk: TAction;
16 ACancel: TAction;
17 ActionList1: TActionList;
18 AModify: TAction;
19 ARemove: TAction;
20 ListView1: TListView;
21 MenuItem1: TMenuItem;
22 MenuItem2: TMenuItem;
23 MenuItem3: TMenuItem;
24 PopupMenu1: TPopupMenu;
25 ToolBar1: TToolBar;
26 ToolButton1: TToolButton;
27 ToolButton2: TToolButton;
28 ToolButton3: TToolButton;
29 ToolButton4: TToolButton;
30 ToolButton5: TToolButton;
31 procedure AAddExecute(Sender: TObject);
32 procedure ACancelExecute(Sender: TObject);
33 procedure AModifyExecute(Sender: TObject);
34 procedure AOkExecute(Sender: TObject);
35 procedure ARemoveExecute(Sender: TObject);
36 procedure FormShow(Sender: TObject);
37 procedure ListView1Data(Sender: TObject; Item: TListItem);
38 procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
39 Selected: Boolean);
40 public
41 Fields: TFields;
42 TableName: string;
43 procedure UpdateInterface;
44 procedure ReloadList;
45 end;
46
47implementation
48
49uses
50 UFormField;
51
52{$R *.lfm}
53
54resourcestring
55 SNewField = 'New field';
56 SFieldsNotSet = 'Fields not set';
57 STableFields = 'Table fields - %s';
58
59{ TFormFields }
60
61procedure TFormFields.FormShow(Sender: TObject);
62var
63 I: Integer;
64begin
65 for I := 0 to ToolBar1.ButtonCount - 1 do
66 ToolBar1.Buttons[I].Hint := ToolBar1.Buttons[I].Caption;
67 if not Assigned(Fields) then
68 raise Exception.Create(SFieldsNotSet);
69 Caption := Format(STableFields, [TableName]);
70 UpdateInterface;
71 ReloadList;
72end;
73
74procedure TFormFields.AAddExecute(Sender: TObject);
75var
76 NewField: TField;
77begin
78 NewField := TField.Create;
79 NewField.Table := Fields.Table;
80 NewField.Name := SNewField;
81 if Fields.Table.DbClient.ConnectProfile.ClientType.DataTypes.Count > 0 then
82 NewField.DataType := TDataType(Fields.Table.DbClient.ConnectProfile.ClientType.DataTypes[0]);
83 with TFormField.Create(nil) do
84 try
85 Load(NewField);
86 if ShowModal = mrOk then begin
87 Save(NewField);
88 Fields.Table.DbClient.Query('INSERT INTO ModelField ( Name , Caption , Model , DataType ) VALUES ( ' +
89 NewField.Name + ' , ' + NewField.TextBefore + ' , ' + TableName + ' , ' + NewField.DataType.Name + ' )');
90 ReloadList;
91 end else NewField.Free;
92 finally
93 Free;
94 end;
95end;
96
97procedure TFormFields.ACancelExecute(Sender: TObject);
98begin
99 Close;
100end;
101
102procedure TFormFields.AModifyExecute(Sender: TObject);
103begin
104 if Assigned(ListView1.Selected) then begin
105 with TFormField.Create(nil) do
106 try
107 Load(TField(ListView1.Selected.Data));
108 if ShowModal = mrOk then begin
109 Save(TField(ListView1.Selected.Data));
110 Fields.Table.DbClient.Query('UPDATE ModelField SET Caption = ' + TField(ListView1.Selected.Data).TextBefore +
111 ' , DataType = ' + TField(ListView1.Selected.Data).DataType.Name +
112 ' WHERE Model = ' + Fields.Table.Name +' , Name = ' + TField(ListView1.Selected.Data).Name);
113 ReloadList;
114 end;
115 finally
116 Free;
117 end;
118 end;
119end;
120
121procedure TFormFields.AOkExecute(Sender: TObject);
122begin
123 ModalResult := mrOk;
124end;
125
126procedure TFormFields.ARemoveExecute(Sender: TObject);
127begin
128 if Assigned(ListView1.Selected) then begin
129 Fields.Table.DbClient.Query('DELETE FROM ModelField WHERE Model = ' + Fields.Table.Name +
130 ' , Name = ' + TField(ListView1.Selected.Data).Name);
131 ReloadList;
132 UpdateInterface;
133 end;
134end;
135
136procedure TFormFields.ListView1Data(Sender: TObject; Item: TListItem);
137begin
138 if (Item.Index >= 0) and (Item.Index < Fields.Count) then
139 with TField(Fields[Item.Index]) do begin
140 Item.Caption := Name;
141 Item.SubItems.Add(DataType.Title);
142 Item.SubItems.Add(BoolToStr(Required));
143 Item.SubItems.Add(TextBefore);
144 Item.SubItems.Add(TextAfter);
145 Item.Data := Fields[Item.Index];
146 end;
147end;
148
149procedure TFormFields.ListView1SelectItem(Sender: TObject; Item: TListItem;
150 Selected: Boolean);
151begin
152 UpdateInterface;
153end;
154
155procedure TFormFields.UpdateInterface;
156begin
157 AModify.Enabled := Assigned(ListView1.Selected);
158 ARemove.Enabled := Assigned(ListView1.Selected);
159end;
160
161procedure TFormFields.ReloadList;
162begin
163 Fields.Load;
164
165 ListView1.Items.Count := Fields.Count;
166 ListView1.Repaint;
167end;
168
169end.
170
Note: See TracBrowser for help on using the repository browser.