1回目から茨の道を行くといいつつ、それほどでもないので一気にDB利用プログラミングをしてみようかと思います。
こんなやつです。

グリッドのみを使用したデスクトップアプリケーションです。
デスクトップに置かれた「sample.db」というSQLite3のデータベースファイルを起動したときに読み取ってグリッドに表示するというシンプルなものです。
何が辛いところがあるか、あまりないのですが(おい)。
強いて言うとSQLite3はデータベースの文字コードがUTF-8で、なでしこはShift-JISですよね。
今回のサンプルでは日本語を使っていないデータなので別に気にしなくてもいいのですが、実際には日本語を使いたくなるのが世の常でしょう。
ということで、そういう場合のためにあらかじめ用意された命令がありまして。
「SQLITE3自動変換」というやつです。
命令から探すことができるので、なんの命令なのかわかっておけば全く困りません。

あとは「SQLITE3自動変換 = オン」とするか「SQLITE3自動変換はオン」としとけばよしなにしてくれます。
素晴らしい。
サンプルコードでは文字列結合してDBファイルのパスを指定していますが、よく考えたら{}を使うと変数展開できるなーと。
だから、
というコードは
と書いても大丈夫です。
個人的にちょっときになるのは、「デスクトップ」というデスクトップのパスを返す命令がどうもしっくりこないことですかね。
別に悪くはないのですが…
このほか、DBのハンドルを変数Hとして使っていますが、なくても文脈から読み取ってうまいことやってくれますので大丈夫です。
最後に、サンプル用のDBに「user」テーブルとしてテーブルを用意してたつもりが「sample」で作ってて、気づかずに何度も実行時エラーが発生してました…
なでしこで例外処理をするには「エラー監視」という命令を使いましょう。
使ったほうがよかったな…
これを入れておくと、「エラーならば」で例外を捕捉したときに「エラーメッセージ」という命令でエラーの内容を表示するなりできます。
ということでサンプルコードです。
ところで、グリッドのアイテムとしていきなり結果を投入しています。
これは「SQLITE3実行」という命令が返すのがCSV形式の文字列だからです。
つまり、データの中にカラム名も含まれてしまうのです。
カラム名ではなくて、日本語名なんかをグリッドなんかに表示したいなーと思うときは一行目をスキップするかしないとデータとして含まれてしまいます。
また、「SQLITE3実行」が返すCSVを個別に加工したいときは一度「CSV取得」命令を使って二次元の配列にします。
ハッシュにもできるのですが、ちょっと面倒ですよね…
SQL文と配列の添え字で管理するようになるのが辛いところです。
とはいえ、なでしこは二次元配列でも「表行列交換」なんていう便利命令もありますので、工夫次第でなんとかなるかもしれません。
完成したもの
こんなやつです。
グリッドのみを使用したデスクトップアプリケーションです。
デスクトップに置かれた「sample.db」というSQLite3のデータベースファイルを起動したときに読み取ってグリッドに表示するというシンプルなものです。
茨の道
何が辛いところがあるか、あまりないのですが(おい)。
強いて言うとSQLite3はデータベースの文字コードがUTF-8で、なでしこはShift-JISですよね。
今回のサンプルでは日本語を使っていないデータなので別に気にしなくてもいいのですが、実際には日本語を使いたくなるのが世の常でしょう。
ということで、そういう場合のためにあらかじめ用意された命令がありまして。
「SQLITE3自動変換」というやつです。
命令から探すことができるので、なんの命令なのかわかっておけば全く困りません。
あとは「SQLITE3自動変換 = オン」とするか「SQLITE3自動変換はオン」としとけばよしなにしてくれます。
素晴らしい。
サンプルコードでは文字列結合してDBファイルのパスを指定していますが、よく考えたら{}を使うと変数展開できるなーと。
だから、
DB = デスクトップ & 「sample.db」
というコードは
DB = 「{デスクトップ}sample.db」
と書いても大丈夫です。
個人的にちょっときになるのは、「デスクトップ」というデスクトップのパスを返す命令がどうもしっくりこないことですかね。
別に悪くはないのですが…
このほか、DBのハンドルを変数Hとして使っていますが、なくても文脈から読み取ってうまいことやってくれますので大丈夫です。
最後に、サンプル用のDBに「user」テーブルとしてテーブルを用意してたつもりが「sample」で作ってて、気づかずに何度も実行時エラーが発生してました…
なでしこで例外処理をするには「エラー監視」という命令を使いましょう。
使ったほうがよかったな…
これを入れておくと、「エラーならば」で例外を捕捉したときに「エラーメッセージ」という命令でエラーの内容を表示するなりできます。
ということでサンプルコードです。
※※※積み木デザイナ:ここから※
※ 以下はデザインデータです。
※ コメントを削除しないようにしてください。
※ ---
※母艦とはフォーム##生成
母艦は「メインフォーム」
そのクライアントW=640#数値
そのクライアントH=400#数値
そのタイトル=「SQLITE3サンプル」#文字列
※ ---
グリッド1とはグリッド##生成
そのX=8#数値
そのY=8#数値
そのW=108#数値
そのH=232#数値
そのテキスト=「グリッド1」#文字列
そのアイテム=「」#文字列
※※※積み木デザイナ:ここまで※
DBとは文字列
DB = デスクトップ & 「sample.db」
SQLとは文字列
SQL = 「select * from sample;」
SQLITE3自動変換はオン
H = DBをSQLITE3開く
HでSQLをSQLITE3実行
グリッド1のアイテムはそれ
HのSQLITE3閉じる
ところで、グリッドのアイテムとしていきなり結果を投入しています。
これは「SQLITE3実行」という命令が返すのがCSV形式の文字列だからです。
つまり、データの中にカラム名も含まれてしまうのです。
カラム名ではなくて、日本語名なんかをグリッドなんかに表示したいなーと思うときは一行目をスキップするかしないとデータとして含まれてしまいます。
また、「SQLITE3実行」が返すCSVを個別に加工したいときは一度「CSV取得」命令を使って二次元の配列にします。
ハッシュにもできるのですが、ちょっと面倒ですよね…
SQL文と配列の添え字で管理するようになるのが辛いところです。
とはいえ、なでしこは二次元配列でも「表行列交換」なんていう便利命令もありますので、工夫次第でなんとかなるかもしれません。