今回は、CSVファイルをインポートする方法をご紹介したいと思います。

GeneXusの三大オブジェクトとも云えるトランザクション、WEBパネル、プロシージャを用いて実装します。
3つのオブジェクトの役割は以下の通りです。

トランザクション→DBのテーブル作成
Webパネル→ファイル指定、プロシージャ呼び出し
プロシージャ→CSVファイルの読み取り、及びテーブル更新処理

今回は、一日毎の東証株価データのCSVファイルをインポートします。
(CSVファイルのソース:http://k-db.com/site/download.aspx)

CSVサンプル

 

 

 

 

 

 

 

上のようなCSVファイルです。

先ずは、トランザクションから作成します。カンマで区切られた一つ一つのデータを、それぞれ項目属性として定義します。

ToshoKabuka

 

 

 

 

トランザクションは、前述したようにCSVファイルの形に合わせてテーブルを作成する役割なので、これで完成です。また、データ参照時のユーザビリティを考慮すると、WorkWithパターンを適応しておくと良いでしょう。

続いてプロシージャを作成します。

まずは変数の定義をします。

Proc変数

 

 

 

項目属性をドラッグ&ドロップし、同型の変数を作成します。後は、CSVファイルのパスを入力するための変数:CsvPathと、エラー値を格納する変数:Rtn、CSVデータファイルの受け皿としての変数:fHandleを定義します。

続いてソースを編集します。順を追ってご説明します。

NewProc1

 

 

コメントとしても書いていますが、エラー値を初めにセットしておきます。また、DFROpenメソッドを用いて、ファイルを展開します。その際にファイルパス、レコード最大長等の5つのパラメータが必要となることに注意が必要です。

Proc2

 

 

ファイルの展開に失敗した場合は、メッセージを表示して、プロシージャの処理を終えます。

Proc3

 

 

 

 

 

DFRNext()=0になるまで、つまり、改行した結果、データがなくなるまで、Do While文でループさせます。同じコードが何列も並んでいるのは、項目ごとの読み込みです。

Proc4

 

 

 

 

もし既存のレコードにCodeが一致するものがあれば更新処理をします。Codeがキー項目になっていることに注意して下さい。

Proc5

 

 

 

 

 

Codeが一致するものが無ければ、新規レコード登録の処理をします。

Proc6

 

 

 

最後に展開したファイルを閉じる処理と、エラー値格納用の変数に正常値をセットします。

ソースを先にご紹介しましたが、ルールの定義で、Parmルールを記述しなければいけません。呼び出しのパラメータはCSVへのパス、返り値はエラー値格納用の変数です。

ProcParmRule

 

これでプロシージャは完成です。

次にWebパネルを作成します。

このオブジェクトも変数の定義からご紹介します。

WebPanel変数

 

 

プロシージャの呼び出しに必要なパラメータと、返り値だけ定義します。

WebPanelForm

 

 

 

CSVファイルのパスの入力と、プロシージャ呼び出しのボタンは必須です。今回はエラービューアコントロール(デフォルトで実装されています)も設置しました。

最後にボタンクリックのイベントを定義します。

NewWebPanelEvents

 

 

 

 

プロシージャの呼び出しと、返り値であるエラー値格納用変数の値によって、メッセージを出力します。このメッセージがエラービューアコントロールを設置した場所に表示されます。

これでアプリケーションが完成です。実行画面を確認します。

aデベロッパーメニュー

 

 

 

 

a空のトランザクション

 

 

 

 

レコードが入っていないことと項目名が正しいことを確認します。続いて、Webパネルの操作を追っていきます。

aCSVREAD1

 

 

 

 

ファイルのパスを入力します。

aCSDREAD2

 

 

 

 

 

実行ボタンをクリックし、プロシージャを呼び出します。

aCSDREAD3

 

 

 

 

正常終了のメッセージを確認しましたら、登録されたデータを確認しましょう。

aFinish!

 

 

 

 

 

 

 

WorkWithパターンを適応することによって、自動的にページ送りの機能が実装されます。

今回は以上です。

最後までご覧頂きありがとうございました。

<参考>

・【GXTips】プロシージャを使ったサンプルデータの登録