-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuParameterDialog.pas
More file actions
157 lines (130 loc) · 4.46 KB
/
Copy pathuParameterDialog.pas
File metadata and controls
157 lines (130 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
unit uParameterDialog;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Data.DB, Vcl.Menus, System.UITypes,
FireDAC.Comp.Client,
cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer,
cxEdit, dxSkinsCore, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxButtons,
dxSkinBlue, dxSkinDevExpressDarkStyle, dxSkinMoneyTwins, dxSkinOffice2007Blue,
dxSkinOffice2010Silver, dxSkinOffice2019Black, SkinAzul,
dxSkinVisualStudio2013Dark, dxSkinVisualStudio2013Light, dxSkinVS2010, dxBevel;
type
TParameterDialog = class(TForm)
lblName: TLabel;
edtName: TcxTextEdit;
lblDataType: TLabel;
cbDataType: TcxComboBox;
lblLength: TLabel;
edtLength: TcxTextEdit;
lblPrecision: TLabel;
edtPrecision: TcxTextEdit;
lblScale: TLabel;
edtScale: TcxTextEdit;
btnOK: TcxButton;
btnCancel: TcxButton;
dxBevel1: TdxBevel;
procedure cbDataTypePropertiesChange(Sender: TObject);
procedure btnOKClick(Sender: TObject);
private
FDataSet : TFDMemTable;
FIsEdit : Boolean;
procedure EnableTypeOptions;
public
constructor Create(AOwner: TComponent; ADataSet: TFDMemTable; AIsEdit: Boolean); reintroduce;
end;
var
ParameterDialog: TParameterDialog;
implementation
uses
Utileria;
{$R *.dfm}
constructor TParameterDialog.Create(AOwner: TComponent; ADataSet: TFDMemTable; AIsEdit: Boolean);
begin
inherited Create(AOwner);
FDataSet := ADataSet;
FIsEdit := AIsEdit;
// Load SQL Server data types
cbDataType.Properties.Items.Clear;
cbDataType.Properties.Items.AddStrings([
'INT', 'BIGINT', 'SMALLINT', 'TINYINT', 'BIT',
'DECIMAL', 'NUMERIC', 'MONEY', 'SMALLMONEY', 'FLOAT', 'REAL',
'DATE', 'DATETIME', 'DATETIME2', 'DATETIMEOFFSET', 'SMALLDATETIME', 'TIME',
'CHAR', 'VARCHAR', 'TEXT', 'NCHAR', 'NVARCHAR', 'NTEXT',
'BINARY', 'VARBINARY', 'IMAGE',
'UNIQUEIDENTIFIER', 'XML', 'JSON'
]);
if cbDataType.Properties.Items.Count > 0 then
cbDataType.ItemIndex := 0;
// If editing, load current values
if FIsEdit then
begin
edtName.Text := FDataSet.FieldByName('Name').AsString;
cbDataType.Text := FDataSet.FieldByName('DataType').AsString;
edtLength.Text := FDataSet.FieldByName('Length').AsString;
edtPrecision.Text := FDataSet.FieldByName('Precision').AsString;
edtScale.Text := FDataSet.FieldByName('Scale').AsString;
end;
EnableTypeOptions;
end;
procedure TParameterDialog.cbDataTypePropertiesChange(Sender: TObject);
begin
EnableTypeOptions;
end;
procedure TParameterDialog.EnableTypeOptions;
var
DataType : string;
begin
DataType := cbDataType.Text;
// Enable/disable fields based on data type
edtLength.Enabled := (DataType = 'VARCHAR') or (DataType = 'NVARCHAR') or
(DataType = 'CHAR') or (DataType = 'NCHAR') or
(DataType = 'BINARY') or (DataType = 'VARBINARY');
edtPrecision.Enabled := (DataType = 'DECIMAL') or (DataType = 'NUMERIC');
edtScale.Enabled := edtPrecision.Enabled;
end;
procedure TParameterDialog.btnOKClick(Sender: TObject);
var
NameValue : string;
begin
NameValue := Trim(edtName.Text);
if NameValue = '' then
begin
Mensaje('El nombre es obligatorio.',
'nombre inexistente', Advertencia);
edtName.SetFocus;
Exit;
end;
// Validate parameter name - should start with a letter and contain only letters, numbers, and underscore
if not (NameValue[1] in ['a'..'z', 'A'..'Z', '_']) then
begin
Mensaje('El nombre debe comenzar con una letra o un guión bajo.',
'nombre invalido', Advertencia);
edtName.SetFocus;
Exit;
end;
if FIsEdit then
FDataSet.Edit
else
FDataSet.Append;
FDataSet.FieldByName('Name').AsString := NameValue;
FDataSet.FieldByName('DataType').AsString := cbDataType.Text;
if edtLength.Enabled then
FDataSet.FieldByName('Length').AsInteger := StrToIntDef(edtLength.Text, 0)
else
FDataSet.FieldByName('Length').AsInteger := 0;
if edtPrecision.Enabled then
begin
FDataSet.FieldByName('Precision').AsInteger := StrToIntDef(edtPrecision.Text, 0);
FDataSet.FieldByName('Scale').AsInteger := StrToIntDef(edtScale.Text, 0);
end
else
begin
FDataSet.FieldByName('Precision').AsInteger := 0;
FDataSet.FieldByName('Scale').AsInteger := 0;
end;
FDataSet.Post;
ModalResult := mrOk;
end;
end.