プロデルで始める日本語プログラミング言語入門の第16話です。 今回は、データベースについて紹介します。 データベースは、沢山のデータを扱う時に便利なツールです。使いこなすには難しそうな印象もあるかもしれませんが、プロデルの文法を知っていれば十分データベースを操作できます。今回は、データベースエンジンのうち、扱いやすいAccess形式データベースとSQLite形式のデータベースを操作する方法をご紹介します。
データベースとは
データベースとはデータを記憶しておく場所です。データベースを使うことで大量のデータを整理して格納することができ、また素早く取得することができます。データベースを扱うためのデータベースエンジンは、いくつか提供されています。
プロデルでは、主要な次のデータベースエンジンに対応しています。
- SQLite
- Microsoft Access
- MySQL(MariaDB)
- PostgreSQL
- SQL Server
- Oracle Database
- ODBCドライバに対応するデータベース
なお、データベースエンジンによって取り扱い方法が違います。プロデルでは、基本的な操作についてはどのエンジンを使ってもほぼ同じ方法で操作できるように設計されています。ただ異なる部分もたくさんありますので、それぞれのエンジンに関する情報を参考に使ってください。
関係データベース(RDB)
関係データベースとは、行と列で構成されたテーブルに値を一つずつ格納するタイプのデータベースです。テーブルには列を定義します。テーブルの見た目は、以前ご紹介したCSVファイルに似ています。
一番使われているのが関係データベース(Relational DataBase)と呼ばれるタイプのデータベースです。データベースエンジンで有名なMySQLやPostgreSQL, SQLite, Microsoft Accessは関係データベースです。
準備: データベースを作る
では実際に、データベースを作りましょう。
データベースの作り方は、データベースエンジンによって異なります。今回は、データベースエンジンの中で比較的操作しやすい、Microsoft Access(mdb形式/acc形式)とSQLiteを使ったデータベース操作の方法を紹介します。
Microsoft Accessの場合(accdb/mdb)
Accessでは、新規にて「空のデータベース」を作成します。この時ファイル名は「database.accdb」または「database.mdb」とします。
※Officeの制約で、mdb形式は、32ビット環境のプロデルと32ビット版Officeの組み合わせでのみ利用できます。accdb形式では、Officeとプロデルのビット数が一致する組み合わせとなる必要がありますので、古い32ビット版Officeを利用している場合は32ビット環境のプロデルで実行してください (1.9以降、ビット数に関わらずmdb/accdbのどちらも利用できます)
テーブルの作成
次にデータベースの中に、テーブルを作ります。データベースには、テーブルごとに種類が異なる別々の情報を格納できます。「作成」リボンの[テーブル]ボタンをクリックします。
ここでは、テーブルの名前を「楽曲」とします。「テーブル1」を右クリックして「名前の変更」を選択してテーブル名を変更します。
次に「楽曲」テーブルを右クリックして「デザイン ビュー」を開きます。デザインビューでは、テーブルに格納する列(フィールド)を定義できます。
ここでは、ID, 曲名, アーティスト, アルバムIDの順に4つのフィールドを追加します。
フィールド名/カラム | データ型 (Access/SQLite) |
---|---|
ID | オートナンバー / INTEGER |
曲名 | 短いテキスト / TEXT |
アーティスト | 短いテキスト / TEXT |
アルバムID | 数値型 / INTEGER |
さらに「楽曲」テーブルを右クリックして「開く」を選択して、テーブルを編集します。
内容の追加
テーブルに、行を追加して、2,3行分の曲名とアーティスト名を入力していきます。
データを入力したらデータベースを保存します。
SQLiteの場合
SQLiteの場合も同じように、まずはデータベースを作成します。
SQLiteでは、データベースを作成できるソフトがいくつかありますが、ここではPupSQLiteというツールを使って作ってみます。
[新規作成]ボタンをクリックしてファイル名を「database.db」とします。
新規作成すると、テーブルの新規作成画面が表示されますので、次のようなカラムを定義します。
「楽曲」テーブルを作成したら、そのテーブルに内容を追加します。
プロデルでテーブルの内容を取得する
では、作成したデータベースのテーブルの内容をプロデルで見てみましょう。
データベースのテーブルの内容は、次のようなプログラムでデータ表に読み込むことができます。
// accdb形式の場合
DBというAccess2007データベースを作る
DBのデータソースは「database.accdb」
/* mdb形式の場合
DBというAccessデータベースを作る
DBのデータソースは「database.mdb」
*/
/* SQLiteの場合
DBというSQLiteデータベースを作る
DBのデータソースは「database.db」
*/
DBへ接続する
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
DBから楽曲テーブルへ取得する
DBから切断する
楽曲テーブルの一覧のすべての行についてそれぞれ繰り返す
行を報告する
そして
実行すると、データベースに保存された内容が調査ウィンドウに表示されます。
データ表と行と列
テーブルの行と列は、データ表の行と列にそのまま対応します。
なお、表を「テーブル」、行を「レコード」、列を「カラム」もしくは「フィールド」とも呼びます。
列には、その列に格納できるデータ型が決まっています。一つの行では列に1つの値だけを格納できます。また、列には主キーとなる列を指定することができます。主キーとは、テーブル中の行を特定するための値のことです。主キーは他の行と重複しないように指定します。
表部品でテーブルを開いたり編集したりする
表部品にデータ表を指定すると、データ表の内容を見たり編集したりできます。表部品については、第14回で説明しています。
DBというAccess2007データベースを作る
DBのデータソースは「database.accdb」
/* 32ビット環境(mdb形式)の場合
DBというAccessデータベースを作る
DBのデータソースは「database.mdb」
*/
/* SQLiteの場合
DBというSQLiteデータベースを作る
DBのデータソースは「database.db」
*/
DBへ接続する
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
DBから楽曲テーブルへ取得する
メイン画面を表示する
待機する
メイン画面とは
ウィンドウを継承する
はじめの手順
初期化する
表部品1のデータ表は、楽曲テーブル
終わり
初期化する手順
この実質大きさは{663,387}
この内容は「テーブルの編集」
この間隔は{4}
初期化開始する
保存ボタンというボタンを作る
その位置と大きさは{18,12,112,34}
その内容は「保存」
その移動順は4
表部品1という表部品を作る
表部品1を初期化開始する
その位置と大きさは{18,62,627,307}
その列見出し高さは34
その移動順は2
その位置固定方向は「上+下+左+右」
その間隔は{4}
表部品1を初期化終了する
初期化終了する
この設計スケール比率は{144,144}
終わり
保存ボタンがクリックされた時の手順
DBで表部品1のデータ表を更新する
終わり
終わり
上記のプログラムを実行すると、データベースのテーブルにある内容が表部品に表示されます。この表部品では、行を追加したり修正したり削除したりできます。[保存]ボタンで編集内容がデータベースに保存されます。
なお、表部品で内容を編集しただけではデータベースに編集内容は保存されません。編集内容をデータベースに保存するには、各「データベースエンジン」種類の「更新する」手順を実行します。
「更新する」手順では、データ表で行われた編集内容をデータベースへ保存します。例えばデータ表に行を追加したり修正したり削除したりした時には、それぞれの操作がデータベースのテーブルへ適用されます。
データ表にレコードを挿入する
プログラムでデータ表にレコードを挿入するには、データ表の「追加する」手順を使います。「追加する」手順では、列名と対応する値の組みを辞書形式で指定します。レコードを挿入した後にデータベースへ格納するために「更新する」手順を実行します。
なお、レコードを挿入する場合でも、事前に「取得する」手順でテーブルの情報(スキーマ)を取得しておく必要があります。この情報は「更新する」手順で使います。
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
DBから楽曲テーブルへ取得する
楽曲テーブルに{曲名=「I AM YOUR SINGER」,アーティスト=「SAS」}を追加する
DBで楽曲テーブルを更新する
データ表でレコードを更新する
今度は、データ表の特定の行の内容を変更してみます。
「データ行」の「取得する」手順を使うと、その行について特定の列の値を取得できます。また「設定する」手順で特定の列の値を修正できます。データベースへ格納するために「更新する」手順を実行します。
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
DBから楽曲テーブルへ取得する
//アーティストが「SAS」の行を「サザンオールスターズ」に変える
楽曲テーブルの行一覧のすべての対象行についてそれぞれ繰り返す
対象行から「アーティスト」を取得したものが「SAS」なら
対象行の「アーティスト」に「サザンオールスターズ」を設定する
そして
そして
DBで楽曲テーブルを更新する
データ表でレコードを削除する
行を削除するには、データ行の「削除する」手順を使います。削除の場合もデータベースへ反映するために「更新する」手順を実行します。
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
DBから楽曲テーブルへ取得する
//アーティストが「サザンオールスターズ」の行を削除する
楽曲テーブルの行一覧のすべての対象行についてそれぞれ繰り返す
対象行から「アーティスト」を取得したものが「サザンオールスターズ」なら
対象行を消す
そして
そして
DBで楽曲テーブルを更新する
SQL文を使って操作してみる
一般的にデータベースを操作する時にはSQL(Structured Query Language)というデータ問い合わせのためのデータベース用の言語が使われます。データベースエンジンに対してSQL文で命令することで、コマンドプロンプトでコマンドを実行するように、データベースにデータを追加・変更・削除できます。プロデルにてSQL文で命令するには、「実行する」手順を使います。
SQLは、プロデルとは違う言語ですので、プロデルとは別の文法を覚える必要があります。ただインターネット上にたくさんの解説ページがあり、簡単な操作ならコピー&ペーストでSQL文が書けます。また、SQL文を書いたことがある方にとってはデータ表を操作するよりも、SQL文で操作する方が早いかもしれません。
ここでは、プロデル上でSQL文でテーブルを操作する基本的な方法も紹介します。
表からレコードを取得する(SELECT文)
まず、SELECT文は、データベースからテーブルの内容を取得するための文です。
SELECT文は、次のような構文で書きます。取得したいテーブル名と、その中のフィールド名を指定できます。なお、テーブル内のすべてのフィールドを取得する場合は列1,…の部分を「*」とします。
SELECT 列1,... FROM テーブル名
プロデルでSELECT文を実行するには、 データベースエンジン の「取得する」手順を使います。「データ表として取得する」手順では、SELECT文による取得結果をデータ表に格納できます。
DBから「SELECT 曲名 FROM 楽曲」をデータ表として取得して楽曲テーブルとする
楽曲テーブルの一覧のすべての行についてそれぞれ繰り返す
行を報告する
そして
条件に合うレコードだけに絞り込む(WHERE句)
SELECT文の末尾にWHERE句を付けると、条件に合うレコードだけに絞り込んで取得できます。WHERE句を使う場合には次のような構文で書きます。
SELECT 列1,... FROM テーブル名 WHERE 条件
条件には、絞り込み条件を指定します。例えば、「発売年」フィールドが2020と等しいものに絞り込む条件式は『発売年=2020』と書きます。値が文字列の場合は’ ‘で囲います。列が数値型の場合には、大小比較もできます。書き方は、プロデルの数式の条件式と同じように『個数<10』や『個数>=10』などと書きます。複数の条件式を指定するときには条件式を『AND』もしくは『OR』で繋げて書きます。
DBから「SELECT * FROM 楽曲 WHERE アーティスト='サザンオールスターズ' OR アーティスト='SAS'」をデータ表として取得して楽曲テーブルとする
楽曲テーブルの一覧のすべての行についてそれぞれ繰り返す
行を報告する
そして
さらに条件式でLIKE句を使うと、特定の文字列が含まれる、特定の文字列から始まる、終わる、条件を指定できます。LIKEでは「%」が0文字以上の任意の文字列が入ることを表す記号として扱われます。次のプログラム例では、LIKE句で「%サザン%」と指定することで、アーティストに「サザン」という文字列が含まれるレコードだけを取得します。
DBから「SELECT * FROM 楽曲 WHERE アーティスト LIKE '%サザン%'」をデータ表として取得して楽曲テーブルとする
楽曲テーブルの一覧のすべての行についてそれぞれ繰り返す
行を報告する
そして
表にレコードを挿入する(INSERT文)
SQL文でテーブルにレコードを追加するには、INSERT文を使います。INSERT文では、挿入先のテーブル名と、レコードに入れる値を書きます。列1,…には、指定する列名をカンマ(,)で区切って書きます。同じように、値1,…には、列に対応する値をカンマで区切って書きます。
次の例では、追加する行の「列1」の値が「値1」であることを指定しています。
INSERT INTO テーブル名 (列1,...) VALUES (値1,...)
プロデルでINSERT文を実行するには、データベースエンジンの「実行する」手順を使います。戻り値として追加された行数が返されます。
「INSERT INTO 楽曲 (曲名,アーティスト) VALUES ('I AM YOUR SINGER','サザンオールスターズ')」をDBで実行して件数とする
「[件数]件、処理しました」を表示する
レコードの値を修正する(UPDATE文)
すでにテーブルに格納されたレコードの値をSQL文で変更するには、UPDATE文を使います。
UPDATE テーブル名 SET 列1=値1,... WHERE 条件
SET句には、変更する列と値を組みで書きます。複数の列を一度に変更する時には組をカンマで区切って書きます。「条件」には、SELECT文のWHERE句と同様に、値を変更したいレコードを絞り込むための条件式を書きます。WHERE句の条件に合致するレコードが複数ある場合には、それらの列の内容が一括で変更されます。
プロデルでUPDATE文を実行するには、 データベースエンジン の「実行する」手順を使います。 戻り値には、変更されたレコードの件数が返されます。
「UPDATE 楽曲 SET 曲名='I am your singer' WHERE 曲名='I AM YOUR SINGER'」をDBで実行して件数とする
「[件数]件、処理しました」を表示する
//レコードが更新されたことを確認します
DBから「SELECT 曲名 FROM 楽曲」を取得して結果とする
結果の内容を表示する
レコードを削除する
テーブルからすでに格納されたレコードをSQL文で削除するには、DELETE文を使います。
DELETE FROM テーブル名 WHERE 条件
WHERE句には、削除するレコードを絞り込むための条件を指定します。WHERE句は、SELECT文の時と同様に条件を指定できます。DELETE文では、WHERE句の条件に合致するすべてのレコードを一括で削除します。
プロデルでDELETE文を実行するには、 データベースエンジン の「実行する」手順を使います。 戻り値には、削除されたレコードの件数が返されます。
「DELETE FROM 楽曲 WHERE 曲名='I AM YOUR SINGER'」をSQLiteで実行して件数とする 「[件数]件、処理しました」を表示する
SQL文が便利な所
最初に紹介したとおり、表部品やデータ表を操作することで、データベースのテーブルへデータを出し入れできます。そのためSQL文を書かなくても、基本的なテーブル操作は、プロデルのプログラムだけで済ませられます。
一方、SQL文では、複雑な条件を指定したり、テーブルにあるデータを集計したり、テーブル同士でデータを組み合わせたりするなど、より複雑なことができます。すでに説明したとおり、プロデルでも「実行する」手順でSQL文を指定することができますから、一般に紹介されているSQL文の書き方をそのままプロデルで使うこともできます。
SQL文については、プロデルの範疇を超えてしまいますが、ネットにはより詳しく解説されたページがあります。興味がある方は調べてみて下さい。
ミュージック管理アプリを作る
では最後に、データベースを使ったシンプルなアプリを作ってみます。
「マイミュージック」フォルダにある音楽ファイル(.m4a, .wma, .flac, .mp3)を探して、タイトルやアーティスト名を収集するミュージック管理アプリを作ってみます。スマホやWindowsのGrooveミュージックのように曲名やアーティスト名で検索できるようにしてみます。
今回は、ミュージックファイルの情報を集めてデータベースに格納するための収集プログラムと、収集されたデータベースを使って実際にキーワードで探す検索プログラムを作っていきます。
情報を収集する
まず、マイミュージックフォルダにある音楽ファイルから、タイトルやアルバム、アーティスト名などのファイル情報(プロパティ)を取得して、それらをデータベースに格納するプログラムを作ります。
テーブルのスキーマ (Access)
データベースには「楽曲」テーブルを作ります。フィールド名とデータ型は、次のように定義します。
なお、SQLのCREATE TABLE文で上記と同じテーブルを作ることもできます。
DBで「「CREATE TABLE 楽曲 (
パス MEMO PRIMARY KEY,
ファイル名 MEMO,
タイトル MEMO,
アルバム MEMO,
トラック番号 INTEGER,
長さ VARCHAR(10),
ジャンル MEMO,
リリース日 VARCHAR(10),
参加アーティスト MEMO
);」」を実行する
テーブルのスキーマ (SQLite)
SQLiteの場合も、Accessとはデータ型の表記が異なりますが、同じ名前のフィールドを定義します。
DBで「「CREATE TABLE IF NOT EXISTS 楽曲 (
パス TEXT PRIMARY KEY,
ファイル名 TEXT,
タイトル TEXT,
アルバム TEXT,
トラック番号 INTEGER,
長さ TEXT,
ジャンル TEXT,
リリース日 TEXT,
参加アーティスト TEXT
);」」を実行する
ファイルのプロパティを取得してデータベースに格納する
テーブルが作成できたら収集プログラムを作っていきます。収集プログラムでは「マイミュージック」フォルダにある音楽ファイルだけを列挙して、作成した楽曲テーブルにファイルパスとプロパティ情報を追加していきます。
マイミュージックフォルダを探して、収集する処理を「収集する」手順に書きます。
また、ファイルを列挙するために、ファイル情報の「列挙する」手順を呼び出します。
音楽ファイルには、タイトルやアーティスト名、アルバムやCDのトラック番号などのプロパティ情報が記録されていることがほとんどです。これらのプロパティ情報を調べるには、COM型(「Shell.Application」)を作ってエクスプローラの機能を利用します。なお画像ファイルや動画ファイルも同様の方法でプロパティ情報を調べられます。
COM型を通じて利用できる機能は、C++言語やVBAで使われることが想定されていますので、名称に英単語が使われ、操作方法も厄介です。今回のプログラムではエクスプローラで利用できる機能の内で3つのメソッドを使います。ここでは役割を簡単に説明します。
- shellApp:Namespace(フォルダの絶対パス) ・・・フォルダを操作するためのオブジェクトを取得します。
- ソースパス:ParseName(ファイル名)・・・上記のフォルダオブジェクトからファイルを操作するためのアイテムオブジェクトをさらに取得します。
- ソースパス:GetDetailsOf(アイテム,プロパティ番号)・・・上記のアイテムオブジェクトについて指定したプロパティ番号に格納された内容を取得します。アイテムを無とすると、プロパティ情報そのものの名称を取得します。
音楽ファイルのプロパティ情報が取得できたら、楽曲テーブルに「追加する」手順で、レコードを追加します。
フォルダ内のファイルを追加したら『DBで楽曲テーブルを更新する』を呼び出して、データベースを更新します。
フォルダの中は、さらにフォルダによって分類されている場合もあるので「収集する」手順をさらに呼び出して再帰しながら、そのフォルダの中もすべて辿っていきます。
DBというSQLiteデータベースを作る
DBのデータソースを「music.db」に変える
//DBというAccess2007データベースを作る
//DBのデータソースを「music.accdb」に変える
DBへ接続する
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
DBから楽曲テーブルへ取得する
ShellApplicationというCOM型(「Shell.Application」)を作る
ShellApplicationからインスタンスを作ってshellAppとする
プロパティ表という辞書を作る
マイミュージックを収集する
DBから切断する
【パス】を収集する手順
【要素】
ファイル一覧は、パスから「*.wma;*.flac;*.m4a;*.mp3」を列挙する
ソースパス=shellApp:Namespace(パスの絶対パス)
ソースパスが無でないかつプロパティ表の個数が0なら
256回番号に0からカウントして繰り返す
プロパティ名=ソースパス:GetDetailsOf(無,番号)
プロパティ表(プロパティ名)は、番号
そして
そして
ファイル一覧のすべての要素についてそれぞれ繰り返す
//登録済みかどうかを確認する
結果は、DBから「SELECT パス FROM 楽曲 WHERE パス=?」を{要素の絶対パス}として取得したもの
結果の個数が1なら繰り返しを続ける
//登録されていなかったらテーブルに登録する
アイテム=ソースパス:ParseName(要素の名前)
アイテムのNameを報告する
タイトルは[ソースパス:GetDetailsOf(アイテム,プロパティ表(「タイトル」))]
タイトルが空ならタイトルは、アイテムのNameの名前だけ
リリース日は[ソースパス:GetDetailsOf(アイテム,プロパティ表(「リリース日」))]
リリース日が無ならリリース日は[ソースパス:GetDetailsOf(アイテム,プロパティ表(「年」))]
楽曲テーブルに{ファイル名=要素の名前,パス=要素の絶対パス
,参加アーティスト=[ソースパス:GetDetailsOf(アイテム,プロパティ表(「参加アーティスト」))]
,タイトル=タイトル
,アルバム=[ソースパス:GetDetailsOf(アイテム,プロパティ表(「アルバム」))]
,トラック番号=[ソースパス:GetDetailsOf(アイテム,プロパティ表(「トラック番号」))]*1
,長さ=[ソースパス:GetDetailsOf(アイテム,プロパティ表(「長さ」))]
,ジャンル=[ソースパス:GetDetailsOf(アイテム,プロパティ表(「ジャンル」))]
,リリース日=リリース日
}を追加する
そして
DBで楽曲テーブルを更新する
パスのフォルダ一覧のすべての要素についてそれぞれ繰り返す
要素を収集する
そして
終わり
では、実際にプログラムを実行してミュージックファイルの情報を収集してみましょう。マイミュージックフォルダに沢山の音楽ファイルがある場合には、登録に数分かかると思います。
収集した情報を検索する
次に、収集プログラムで収集したデータベースを使って、キーワード検索するアプリを作ってみます。
ミュージックファイルの情報は「楽曲」テーブルに格納されています。
メイン画面には、主に「キーワードテキスト」「検索ボタン」「リストビュー」の3つの部品を配置します。
[検索]ボタンをクリックした時に、ユーザが入力したキーワードを、楽曲テーブルから検索して、該当するレコードの情報をリストビューに追加する。というプログラムを書いていきます。
楽曲テーブルからの検索には、タイトル, アルバム, 参加アーティスト, ジャンルのいずれかのフィールドに、検索キーワードが含まれている(完全に一致していなくても良い)という条件で検索することにします。このような複雑な条件を検索するには、SQL文を使うのが便利です。WHERE句を詳しく指定することで、複雑な条件で検索することができます。
SELECT * FROM 楽曲 WHERE タイトル LIKE ? OR アルバム LIKE ? OR 参加アーティスト LIKE ? OR ジャンル LIKE ?
上記のSQL文には「?」という記号があります。この「?」をバインド変数と呼びます。これは、?の部分にユーザが入力した値が入る、ということを表しています。?に実際に入る内容は「~として」助詞で指定している次の配列の要素に対応しています。
{「%[キーワード]%」,「%[キーワード]%」,「%[キーワード]%」,「%[キーワード]%」}
でも「SQL文はプロデル上では普通の文字列なのでテキストボックスに入力した文字列を直接SQL文と連結してSQL文を完成させればよいのではないか?」と思いつくかも知れません。ただこの方法では、テキストボックスに入力する内容を細工することで、DELETE文などの作った人が意図しないSQL文を組み上げて、データを壊すこともできてしまいます(これを”SQLインジェクション”と言います)。そのため、バインド変数を使ってSQL文とユーザが入力した値とを分離しておきます。データベースエンジンが処理する時に、?の部分を実際の値に当てはめて解釈してくれるので、SQL文が壊れることはありません。
説明が長くなりましたが、ここでは「?」の数と順番が、配列要素と対応している。ということを知っておけば大丈夫です。
SELECT文の検索結果は、データ行の配列として返されるので、そのデータ行を一つ一つリストビューに追加していきます。
完成した検索プログラムは、次のようになります。
DBというSQLiteデータベースを作る
DBのデータソースは「music.db」
//DBというAccess2007データベースを作る
//DBのデータソースは「database.accdb」
DBへ接続する
メイン画面を表示する
待機する
メイン画面とは
ウィンドウを継承する
はじめの手順
初期化する
終わり
初期化する手順
ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
この実質大きさは{880,422}
この内容は「楽曲の検索」
初期化開始する
キーワードテキストというテキストを作る
その位置と大きさは{98,19,362,25}
その移動順は1
ラベル1というラベルを作る
その位置と大きさは{12,22,80,18}
その内容は「キーワード」
その自動調整を○に変える
検索ボタンというボタンを作る
その位置と大きさは{481,12,113,39}
その内容は「検索」
その移動順は2
リストビュー1というリストビューを作る
その位置と大きさは{12,69,856,326}
その表示方法は「詳細」
その全列選択を○に変える
その選択表示を○に変える
その見出し一覧は{「タイトル」,「アルバム」,「トラック」,「参加アーティスト」,「長さ」,「ジャンル」}
その見出し幅は{281,305,82,230,120,120}
その移動順は3
その位置固定方向は「上+下+左+右」
初期化終了する
この設計スケール比率は{144,144}
この決定ボタンを検索ボタンに変える
終わり
検索ボタンがクリックされた時の手順
リストビュー1をクリアする
キーワードは、キーワードテキストの内容
楽曲テーブルというデータ表を作る
楽曲テーブルの名前は「楽曲」
楽曲テーブルにDBから「SELECT * FROM 楽曲 WHERE タイトル LIKE ? OR アルバム LIKE ? OR 参加アーティスト LIKE ? OR ジャンル LIKE ?」を{「%[キーワード]%」,「%[キーワード]%」,「%[キーワード]%」,「%[キーワード]%」}として取得する
楽曲テーブルの名前は「楽曲」
リストビュー1を更新開始する
楽曲テーブルの行一覧のすべての対象行についてそれぞれ繰り返す
リストビュー1に{
(対象行から「タイトル」を取得したもの),
(対象行から「アルバム」を取得したもの),
(対象行から「トラック番号」を取得したもの),
(対象行から「参加アーティスト」を取得したもの),
(対象行から「長さ」を取得したもの),
(対象行から「ジャンル」を取得したもの)
}を追加してリスト項目とする
リスト項目のタグは、対象行から「パス」を取得したもの
そして
リストビュー1を更新終了する
終わり
リストビュー1がダブルクリックされた時の手順
リストビュー1の選択項目が無なら抜け出す
項目は、リストビュー1の選択項目のタグ
項目を開く
終わり
終わり
実際に上記の検索プログラムを実行して、キーボード欄にキーワードを入力して検索してみましょう。検索結果の楽曲をダブルクリックすると、その音楽がいつものアプリで再生されます。
まとめ
今回は、プロデルでデータベースプログラミングする方法を紹介しました。データベースの操作は、プロデルの知識以外にも知っておく必要がある事が多く、今回の説明を読んでも難しいと思った方もいるかと思います。ただ、プロデルでは、データベースに付きものであるSQLを書かなくても基本的な操作ができますし、今回紹介したプログラムを自分の作りたいアプリに合わせてコピーして修正すれば、多くのことはできるので、SQLの細かな文法を暗記する必要はありません。
データベースは、データや記録方法のルールがExcelよりも厳しいイメージがあると思います。ただその分、特に大量のデータを素早く取り扱いたい時には、CSVファイルやExcelよりも便利で強力です。ぜひプロデルでデータベースプログラミングに挑戦してみてください。
- プロデルで、メディア転送プロトコル対応のデジカメから写真をコピーする
- 連載「プロデルではじめる日本語プログラミング入門」
- 次の章 (#17)画像を加工しよう
- 前の章 (#15)Excelで帳票印刷させよう
※当ブログの記事の著作権はゆうとにあります。プロデルに関係が無い目的で、文章や図表,プログラムを複製, 改変, 移植して掲載することを堅く禁止します