Skip to content

Commit 7ad34ea

Browse files
authored
Merge pull request #2 from megos/develop
Develop
2 parents 695d01d + 9b88e43 commit 7ad34ea

3 files changed

Lines changed: 59 additions & 49 deletions

File tree

README.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,20 @@
77
しかし、生成したSQL文にパラメータをバインドするためのプログラムコードを生成するついていません(たぶん)
88
- 流星墓場さんが制作されたSetParameterジェネレータをもとに、パラメータバインド用のプログラムコードを生成します
99

10-
### 当面の目標
11-
- [ ] ASP.NET用プログラムコード生成
12-
- [ ] カラムのデータ型自動取得
10+
### インストール方法
11+
1. A5:SQLのインストールフォルダ内、```scripts/Tool```
12+
- SetParameterGeneratorForCode.dms
13+
- SetParameterGeneratorForCode.dfm
14+
をコピーする
15+
1. A5:SQLを再起動する
16+
17+
### 使い方
18+
1. SQL文で使用するDBに接続する(カラムの型を調べるため)。
19+
1. ツール→SetParameterGeneratorForCodeを選択し、プラグインを起動する
20+
1. ソースコードと対象テーブルを入力して「出力」を押す
21+
- ソースコード:実際に出力したいソースコードを入力する。$Nameでカラム名、$Typeでデータ型に置換できます
22+
- 対象テーブル:SQL文で呼び出しているテーブルを入力する。カンマ区切りで複数のテーブルに対応
23+
1. クリップボードにソースコードが貼り付けられるので、そのままソースに貼り付ける
1324

1425
### ライセンス
1526
- オリジナルの作者さまにならい以下とします

SetParameterGeneratorForCode.dfm

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,22 @@ object Form1: TForm1
2424
Height = 25
2525
Top = 40
2626
Width = 50
27-
Caption = '※ ソースコード内に$Name: パラメータ名, $Type: データ型を埋め込むことで置換ができます'
27+
Caption = '※ ソースコード内に$Name: カラム名, $Type: データ型を埋め込むことで置換ができます'
2828
ParentColor = False
2929
end
30-
object lblDefaultType: TLabel
30+
object lblTable: TLabel
3131
Left = 16
3232
Height = 20
3333
Top = 70
3434
Width = 400
35-
Caption = 'デフォルト型'
35+
Caption = '対象テーブル'
3636
ParentColor = False
3737
end
38-
object cmbDefaultType: TComboBox
38+
object txtTables: TEdit
3939
Left = 80
4040
Height = 26
41-
Hint = '出力するデフォルト型を設定します'
4241
Top = 67
43-
Width = 100
44-
ItemHeight = 12
45-
ItemIndex = 0
46-
Items.Strings = (
47-
'NVarChar'
48-
'Short'
49-
'Integer'
50-
'Currency'
51-
'Float'
52-
'Date'
53-
'Time'
54-
'DateTime'
55-
'Boolean'
56-
'BCD'
57-
)
58-
Style = csDropDownList
59-
TabOrder = 2
60-
Text = 'String'
42+
Width = 200
6143
end
6244
object btnGenerate: TButton
6345
Left = 400
@@ -68,14 +50,12 @@ object Form1: TForm1
6850
ModalResult = 1
6951
TabOrder = 0
7052
end
71-
object chkHideDialog: TCheckBox
53+
object lblTableHint:TLabel
7254
Left = 16
7355
Height = 22
74-
Hint = 'チェックすると次回からこのダイアログを表示せず設定値で即実行します。'#13#10'SetParameterGenerator.ini ファイルを開き、'#13#10'HideDialog=false に書き換えることで再びダイアログを表示可能です。'
7556
Top = 100
76-
Width = 226
77-
Caption = '次回からこのダイアログを表示しない'
78-
ShowHint = True
79-
TabOrder = 5
57+
Width = 400
58+
Caption = '※「,」で複数テーブルを指定可能です'
59+
ParentColor = False
8060
end
8161
end

SetParameterGeneratorForCode.dms

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,15 @@ class MainForm extends VCLForm {
5353
this.left = setting.windowLeft;
5454
this.top = setting.windowTop;
5555
this.txtSource.text = setting.source;
56-
this.chkHideDialog.chekced = setting.hideDialog;
57-
this.cmbDefaultType.itemIndex = this.cmbDefaultType.items.indexOf(setting.defaultType);
56+
this.txtTables.text = setting.tables;
5857
}
5958

6059
// フォーム上の設定値をSettingにコンバート
6160
function toSetting() {
6261
var setting = new Setting();
6362
setting.windowLeft = this.left;
6463
setting.windowTop = this.top;
65-
setting.hideDialog = this.chkHideDialog.checked;
66-
setting.defaultType = this.cmbDefaultType.text;
64+
setting.tables = this.txtTables.text;
6765
setting.source = this.txtSource.text;
6866
return setting;
6967
}
@@ -83,27 +81,25 @@ class Setting {
8381
var windowTop;
8482
var hideDialog;
8583
var existSection;
86-
var defaultType;
84+
var tables;
8785

8886
function loadSetting() {
8987
// iniファイル読み込み
9088
var ini = new Ini(new File(this.path + 'SetParameterGeneratorForCode.ini'));
9189
this.windowLeft = ini.read('Window','Left',100);
9290
this.windowTop = ini.read('Window','Top',100);
93-
this.hideDialog = (ini.read('SetParameterGeneratorForCode','HideDialog', false) === 'true');
9491
this.existSection = ini.read('SetParameterGeneratorForCode','ExistSection', 0);
95-
this.defaultType = ini.read('SetParameterGeneratorForCode','DefaultType', 0);
96-
this.source = ini.read('SetParameterGeneratorForCode','Source', '');
92+
this.tables = ini.read('SetParameterGeneratorForCode','tables', '');
93+
this.source = ini.read('SetParameterGeneratorForCode','Source', 'command.Parameters.Add("@$Name", SqlDbType.$Type).Value = $Name');
9794
return this;
9895
}
9996

10097
function saveSetting() {
10198
var ini = new Ini(new File(this.path + 'SetParameterGeneratorForCode.ini'));
10299
ini.write('Window','Left',this.windowLeft);
103100
ini.write('Window','Top',this.windowTop);
104-
ini.write('SetParameterGeneratorForCode','HideDialog', this.hideDialog);
105101
ini.write('SetParameterGeneratorForCode','ExistSection', this.existSection);
106-
ini.write('SetParameterGeneratorForCode','DefaultType', this.defaultType);
102+
ini.write('SetParameterGeneratorForCode','tables', this.tables);
107103
ini.write('SetParameterGeneratorForCode','Source', this.source);
108104
ini.update(); // iniファイル更新
109105
}
@@ -115,19 +111,19 @@ class Generator() {
115111
var setting = new Setting().loadSetting();
116112
if (setting.hideDialog) {
117113
// HideDialog設定がtrueならダイアログを出さずに出力する
118-
generate(setting.existSection, setting.defaultType, setting.defaultValue, setting.defaultNull);
114+
generate(setting.existSection, setting.tables, setting.defaultValue, setting.defaultNull);
119115
} else {
120116
var frm = new MainForm(true,setting);
121117
if (frm.showModal() === 1) {
122118
// 出力ボタンが押されてfrmを閉じたなら、設定を保存し出力する
123119
setting = frm.toSetting();
124120
setting.saveSetting();
125-
generate(setting.source, setting.defaultType);
121+
generate(setting.source, setting.tables);
126122
}
127123
}
128124
}
129125

130-
function generate(source, defaultType) {
126+
function generate(source, tables) {
131127

132128
var w = application.getActiveWindow();
133129
var noParameterErrorMessage;
@@ -197,13 +193,36 @@ class Generator() {
197193
}
198194
}
199195
}
200-
201-
// SQLパラメータ画面で値が設定されているパラメータ
202-
var parameters = application.getParameters();
196+
197+
// DBに接続
198+
var conn = application.dbTree.getSelectedDatabaseConnection();
199+
200+
var pTypes = [];
201+
202+
var tableArr = tables.split(',');
203+
var rs = null;
204+
205+
for (t = 0; t < tableArr.length; t++) {
206+
try {
207+
rs = conn.getTableColumnList(tableArr[t].trim());
208+
} catch(e) {
209+
alert('テーブルが見つかりません。対象のDBに接続してください。');
210+
exit();
211+
}
212+
for (var i = 0; i < rs.length; i++) {
213+
for (var j = 0; j < pNames.length; j++) {
214+
if (rs[i].columnName == pNames[j]) {
215+
pTypes[j] = rs[i].dataType.replace(/\([0-9]+\)/, '').replace(/ .*/, '');
216+
}
217+
}
218+
}
219+
}
220+
221+
203222
var str = new StringBuffer();
204223
for(var i=0 ; i<pNames.length ; i++) {
205224
var pName = pNames[i];
206-
var pType = defaultType;
225+
var pType = pTypes[i];
207226

208227
str.append(source.replace(/\$Name/g, pName).replace(/\$Type/g, pType)).append("\n");
209228
}

0 commit comments

Comments
 (0)