雛形ソースを作成し、Excelの仕様書を用意すると、プログラムのソースやテストデータを生成する方法について説明するシリーズ、「プログラムやテストデータを自動生成する方法」です。
第二回目でインストールをしました。
それから5回目までで、概要を説明しました
過去のものに関しては
ここ http://www.geocities.jp/xmldtp/index_zido.htm
にリンクしてあります。
で、いま、それを使った例としてDBについてやってます。
手順は、こんなかんじ。
0.出来ているものを確認する
・仕様書の可変部分、固定部分などなど
1.出力ファイルをきめ、そのサンプルを作成する
2.1のファイルから抽象的に書くところを見極め、そこにタグを入れていく
→これが、雛形ファイル
3.2のタグから、出来ているExcel仕様書に関して、なにか修正が必要なら
付け足す。
|
前回までで、2の雛形ファイルまできたので、今回は3のExcel仕様書です。
■仕様書で記入されてない部分
前回、雛形で、仕様書のデータを利用するところ(つまり、CELLタグ、KETAタグ、IFCELLタグとIFKETAタグのところ)は、こんなかんじでした。
$#$CELL B3$#$ テーブル名
$#$CELL B4$#$ 主キー
=== 8行目から ===
$#$KETA A$#$ 項目名
$#$KETA B$#$ 項目の型
$#$IFKETA K,○$# NOTNULL指定(○ならNOTNULL)
で、実際の仕様書は、こんなかんじ。。
![](https://www.geocities.jp/xmldtp/zd_rei1_2.jpg)
問題なのは、主キーです。
これは、実際にはJ桁に○を付けてもらうだけなのに、
プログラム上では、key1,key2,key3のように、カンマで区切ってならべないといけません。で、そーやってかいたものをセルB4にいれることになっています。
どうしましょう
■対応策=自分で作成する
もちろんこの場合、セルB4に、主キーを手作業で記入してもいいです。
ただ、マクロを知っているのであれば、マクロでつくってしまってもいいです。
今回の例で言うと、シート名が、B2のテーブル名になっているとすると、
セルB4に、
=getMainKey(B2)
のように、自分で作った関数getMainKeyの結果を入れるようにして(引数はシート名なのでセルB2)、関数getMainKeyのマクロを以下のように作成します。
'//=========================//
'// 主キー用関数 //
'//=========================//
Function getMainKey(shname As String) As String
Dim gyo As Integer
Dim kekka As String
Dim i As Integer
For i = 1 To Sheets.Count
If (Sheets(i).Name = shname) Then
Exit For
End If
Next
If (i > Sheets.Count) Then
getMainKey = ""
Exit Function
End If
gyo = 8 ' 開始行は8行目から
kekka = ""
Do While Sheets(i).Cells(gyo, 1) <> ""
If (Sheets(i).Cells(gyo, 10) = "○") Then
If (kekka <> "") Then
kekka = kekka & ","
End If
kekka = kekka & Sheets(i).Cells(gyo, 1)
End If
gyo = gyo + 1
Loop
getMainKey = kekka
End Function
|
(上記 < > は本当は半角)
このようにすれば、手作業で入れなくても、主キーのところに○をつけてば、自動的に判別してくれます。
■同様に。。。
同様に、型についても、今回はVARCHAR(50)などのように入れるようにしましたが、型をchar 桁数を50と別々の桁に指定する場合でも、それらを合わせて、SQLの型に合うように変換する関数をマクロでつくって、それをどこかの桁に書き出すようにしておけばOKです。
このように関数で出力するものを求めた場合、今回の例のようにシート上にみせてしまってもいいのですが、そーすると汚くなってしまう場合は、そこを非表示にしておきます。
■あとは
で、仕様書もできたら、あとは、作業一覧シートに記入して、実行します。
■ということは。。。
っていうことは、結局
・雛形ファイルと
・仕様書
の組み合わせが出来れば、あとは自動生成って、できるっていうことです。
(それを適当なところにおいて、作業一覧で指定すればいいわけですから)