今回は、CSVファイルをインポートする方法をご紹介したいと思います。
GeneXusの三大オブジェクトとも云えるトランザクション、WEBパネル、プロシージャを用いて実装します。
3つのオブジェクトの役割は以下の通りです。
トランザクション→DBのテーブル作成
Webパネル→ファイル指定、プロシージャ呼び出し
プロシージャ→CSVファイルの読み取り、及びテーブル更新処理
今回は、一日毎の東証株価データのCSVファイルをインポートします。
(CSVファイルのソース:http://k-db.com/site/download.aspx)
上のようなCSVファイルです。
先ずは、トランザクションから作成します。カンマで区切られた一つ一つのデータを、それぞれ項目属性として定義します。
トランザクションは、前述したようにCSVファイルの形に合わせてテーブルを作成する役割なので、これで完成です。また、データ参照時のユーザビリティを考慮すると、WorkWithパターンを適応しておくと良いでしょう。
続いてプロシージャを作成します。
まずは変数の定義をします。
項目属性をドラッグ&ドロップし、同型の変数を作成します。後は、CSVファイルのパスを入力するための変数:CsvPathと、エラー値を格納する変数:Rtn、CSVデータファイルの受け皿としての変数:fHandleを定義します。
続いてソースを編集します。順を追ってご説明します。
コメントとしても書いていますが、エラー値を初めにセットしておきます。また、DFROpenメソッドを用いて、ファイルを展開します。その際にファイルパス、レコード最大長等の5つのパラメータが必要となることに注意が必要です。
ファイルの展開に失敗した場合は、メッセージを表示して、プロシージャの処理を終えます。
DFRNext()=0になるまで、つまり、改行した結果、データがなくなるまで、Do While文でループさせます。同じコードが何列も並んでいるのは、項目ごとの読み込みです。
もし既存のレコードにCodeが一致するものがあれば更新処理をします。Codeがキー項目になっていることに注意して下さい。
Codeが一致するものが無ければ、新規レコード登録の処理をします。
最後に展開したファイルを閉じる処理と、エラー値格納用の変数に正常値をセットします。
ソースを先にご紹介しましたが、ルールの定義で、Parmルールを記述しなければいけません。呼び出しのパラメータはCSVへのパス、返り値はエラー値格納用の変数です。
これでプロシージャは完成です。
次にWebパネルを作成します。
このオブジェクトも変数の定義からご紹介します。
プロシージャの呼び出しに必要なパラメータと、返り値だけ定義します。
CSVファイルのパスの入力と、プロシージャ呼び出しのボタンは必須です。今回はエラービューアコントロール(デフォルトで実装されています)も設置しました。
最後にボタンクリックのイベントを定義します。
プロシージャの呼び出しと、返り値であるエラー値格納用変数の値によって、メッセージを出力します。このメッセージがエラービューアコントロールを設置した場所に表示されます。
これでアプリケーションが完成です。実行画面を確認します。
レコードが入っていないことと項目名が正しいことを確認します。続いて、Webパネルの操作を追っていきます。
ファイルのパスを入力します。
実行ボタンをクリックし、プロシージャを呼び出します。
正常終了のメッセージを確認しましたら、登録されたデータを確認しましょう。
WorkWithパターンを適応することによって、自動的にページ送りの機能が実装されます。
今回は以上です。
最後までご覧頂きありがとうございました。
<参考>