データベース

MS AccessやOracle等のデータベースとADO経由で連携します。


★メリット

 データベースを使うメリットは、いろいろとあります。

・大容量のデータの入出力が簡単!
・複数のテーブルを相互に連動させたりできる!
・複雑な条件で検索ができる!

 また、Access や Oracle などのデータベースをひまわりと連携することのメリットも、たくさんあります。
 手軽にデータベースにアクセスできるので、例えば、こんなことが簡単にできます。

・ひまわりで手軽にGUI(見た目)を作って、DBの内容を確認!
・データベースを参照して、その内容をメールしたり、ホームページを更新したり・・・!

★ 接続方法

 データベースに接続する方法ですが、まず、当然のごとく、データベースがWINDOWSにインストールされている必要があります。代表的なデータベースには、マイクロソフトのACCESSや、ORACLEなどがあります。

 ここでは、ACCESSのデータベースにアクセスする方法を説明します。

DBプロバイダは、DB_ACCESS2000
DBデータソースは、『c:\test.mdb』
//DBユーザーIDは、『xxxx』
//DBパスワードは、『xxxx』
DB接続
DB切断

 まず、DBプロバイダに、DB_ACESS2000(Access2000のとき)、または、DB_ORACLE(Oracleのとき)を設定します。
 次に、DBデータソースに、アクセスするデータソース(データファイル名)を指定します。
 それから、必要ならば、ユーザーID、パスワードを設定して、『DB接続』と、書きます。
 接続したら、最後には必ず、切断する必要があります。


★データの検索方法

 さて、データベースに接続したら、次に、データを検索してみます。まずは、アクセス等で、簡単なテーブルとサンプルのデータを作ってください。

ID 名前 住所 生年月日 メールアドレス 性別
1 佐藤 愛知県 1970/01/01 satou@xxxx.xxx
2 鈴木 静岡県 1980/08/08 unoki@xxxx.xxx
3 青木 愛知県 1969/03/03 aoki@xxxx.xxx
4 加藤 静岡県 1999/03/03 katou@xxxx.xxx
5 山田 北海道 1980/01/01 aiko@xxxx.xxx

 例えば、上のようなテーブルを、『名簿テーブル』という名前で作成しました。

 では、ひまわりでこの名簿テーブルを検索してみます。

'------------
’接続処理

DBプロバイダは、DB_ACCESS2000
DBデータソースは、『c:\test.mdb』
DB接続

'------------
' 検索

「名簿テーブル」の,「*」から,「名前='鈴木'」で、DB検索


'------------
’検索結果取得

DBタブ区切りで全部取得
して、表示

'------------
'切断処理
DB切断。

 実際に検索をしているのが、『DB検索』命令です。この命令は、『(テーブル名)の、(フィールド名)から、(条件)で』という引数を使います。
 上の例で、フィールド名に書いた『*』は、全てのフィールドを意味します。もし、フィールドを指定する場合は、

「名簿テーブル」の,「名前,住所」から,「名前='鈴木'」で、DB検索

と、このようになります。

 また、条件をつけず、全てのレコードを取り出したい場合は、

「名簿テーブル」の,「名前,住所」から,「*」で、DB検索

のように、条件に、* を書くと、全てのレコードを取得することができます。

 さて、上の例で「おや?」っと思うのは、検索しただけでは、結果が取得できないということです。必ず、「DB検索」命令を実行した後に、「DBタブ区切りで全部取得」などの検索結果を取り出す命令を実行しなければなりません。

 どうしてこんな仕様にしたかと言うと、大容量のデータベースへのアクセスを考慮したためです。DB検索命令を実行した時点で、検索結果が、何千件にも達すると、ひまわりのパフォーマンスが極端に落ちてしまいます。そこで、何千件もの検索結果がありそうな場合は、検索結果を一件ずつ取り出せるような仕組みにしたのです。

 検索結果を一件だけ取り出す命令は、「DBレコード取得」命令で、これを実行すると、データベースから結果を一件だけ読み出します。では、以下に、データベースの検索結果を一件ずつ読み出すサンプルを書きます。

'------------
’接続処理

DBプロバイダは、DB_ACCESS2000
DBデータソースは、『c:\test.mdb』
DB接続

'------------
' 検索

「名簿テーブル」の,「*」から,「*」で、DB検索


'------------
’検索結果取得

DBレコード取得
して、表示
DB次へ。
DBレコード取得
して、表示
DB次へ。
DBレコード取得
して、表示
'------------
'切断処理
DB切断。

 DBレコード取得しては、「DB次」命令で、DBの検索結果を、一件ずつ読み出しています。


★SQLマスターしてDB上級者になろう

 ここまで読めば、既にDBとひまわりを連動して使って面白いことができるのですが、データベースの問い合わせ言語である、SQLを使うことで非常に細かい検索を行ったり、複数のテーブルを繋げて検索したりと、細かいことが出来るようになります。

 SQLを使うには、「DB問い合わせ」命令を使います。実を言えば、上で見た、「DB検索」命令も、ひまわりの内部でSQLに変換して実行しているだけです。

'DB問い合わせ のサンプル

DBプロバイダは、DB_ACCESS2000
DBデータソースは、『c:\test.mdb』
DB接続
"SELECT ID,名前 FROM 名簿テーブル;"と、DB問い合わせ’←SQL文
DBタブ区切りで全部取得して、表示。
DB切断

 使い方は、上のような感じです。

● SELECT

 SQLの基本はなんと言っても、SELECT です。以下がSELECT文の文法です。
SELECT (フィールド名)
  FROM (テーブル名)
  [WHERE (条件)]
  [ORDER BY (フィールド名) [(順序)]]
  [GROUP BY (フィールド名)]
  [HAVING (条件)];
では、いくつか SELECT 文を使って遊んでみます。
以下、上のDB問い合わせサンプルの、SQL文と結果だけを記します。問い合わせサンプルの、SQL文を書き換えたものです。
SELECT 名前, メールアドレス FROM 名簿テーブル
佐藤 satou@xxxx.xxx
鈴木 unoki@xxxx.xxx
青木 aoki@xxxx.xxx
加藤 katou@xxxx.xxx
山田 aiko@xxxx.xxx
上のように、フィールド名に、任意のフィールド名を、カンマ","で区切って書くことにより必要なフィールドだけを取り出すことができます。
SELECT 名前, 'さんの誕生日は', 生年月日, 'です' FROM 名簿テーブル;
佐藤 さんの誕生日は 1970/01/01 です
鈴木 さんの誕生日は 1980/08/08 です
青木 さんの誕生日は 1969/03/03 です
加藤 さんの誕生日は 1999/03/03 です
山田 さんの誕生日は 1980/01/01 です
上のように、フィールド名に、'文字列' を書くと、文字列がそのまま出力されます。
SELECT DISTINCT 住所 FROM 名簿テーブル; SELECT 住所 FROM 名簿テーブル;
愛知県
静岡県
北海道
愛知県
静岡県
愛知県
静岡県
北海道
上の2つの結果を見比べると分かると思いますが、フィールド名に DISTINCT を付けると、重複した結果が表示されなくなります。
SELECT 名前,住所 FROM 名簿テーブル WHERE 住所='愛知県';
佐藤 愛知県
青木 愛知県
さて、上のように、WHERE をつけると、条件を指定できます。
SELECT 名前,住所 FROM 名簿テーブル WHERE 住所='愛知県' OR 住所='静岡県';
佐藤 愛知県
鈴木 静岡県
青木 愛知県
加藤 静岡県
また、条件に、"OR(または)"、"AND(かつ)" のような演算子が利用できます。
曖昧検索をする場合には、LIKEを使います。
SELECT 名前 FROM 名簿テーブル WHERE 名前 LIKE '%木';
鈴木
青木
上の例では、名前に、木のつく人をピックアップしています。
ORDER BYを使うと、並び順を決められます。
SELECT * FROM 名簿テーブル ORDER BY 生年月日;
3 青木 愛知県 1969/03/03 aoki@xxxx.xxx
1 佐藤 愛知県 1970/01/01 satou@xxxx.xxx
5 山田 北海道 1980/01/01 aiko@xxxx.xxx
2 鈴木 静岡県 1980/08/08 unoki@xxxx.xxx
4 加藤 静岡県 1999/03/03 katou@xxxx.xxx
この場合は、生年月日順に並べています。
GROUP BYを使うと、レコードをグループ化し、集計したりするときに便利です。
SELECT 性別,COUNT(*) FROM 名簿テーブル GROUP BY 性別;
2
3
上の例では、性別をグループとし、性別の個数を表示しています。
そして、HAVING は、GROUP BYを使ってグループ化したレコードについて、さらに条件を付加します。
SELECT 性別,COUNT(*) FROM 名簿テーブル GROUP BY 性別 HAVING COUNT(*) > 2;
男 3

● INSERT

INSERTは、テーブルにデータを追加する場合に使います。
(1) INSERT INTO <テーブル名> [(<フィールド名>, <フィールド名>,...)] VALUES (<データ>,<データ>,....);
(2) INSERT INTO <テーブル名> <SELECT文>;
簡単な例です。
'レコード挿入のサンプル

DBプロバイダは、DB_ACCESS2000
DBデータソースは、『c:\test.mdb』
DB接続

INSERT INTO 名簿テーブル
(名前, メールアドレス)
VALUES ('尼崎','ama@xxx.xx')
と、DB問い合わせ

「名簿テーブル」の,「*」から,「*」で、DB検索
DB全部取得して、表示。
DB切断

● UPDATE

UPDATE文は、レコードの更新を行います。
UPDATE <テーブル名> SET <フィールド名>=<更新する値> [WHERE <条件>];
例と、その結果です。
UPDATE 名簿テーブル SET 住所='北海道' WHERE ID=3
更新前 更新後
1 佐藤 愛知県
2 鈴木 静岡県
3 青木 愛知県
4 加藤 静岡県
5 山田 北海道
1 佐藤 愛知県
2 鈴木 静岡県
3 青木 北海道
4 加藤 静岡県
5 山田 北海道

上の例では、1つだけの更新でしたが、条件にあうものならいくつでも更新できます。
UPDATE 名簿テーブル SET 住所='愛知県' WHERE 住所='北海道';
1 佐藤 愛知県
2 鈴木 静岡県
3 青木 愛知県
4 加藤 静岡県
5 山田 愛知県

● DELETE

DELETE文は、レコードを削除します。
DELETE FROM <テーブル名> [WHERE <条件>];

もし、以下のように書くと、指定のテーブルを全て削除してします。運用には十分注意してください。
DELETE FROM 住所テーブル;

以下の例は、ID=5 のレコードを削除します。
DELETE FROM 住所テーブル WHERE ID=5;

● CREATE TABLE

CREATE TABLE文は、新しいテーブルを作成します。
CREATE TABLE <テーブル名> (<テーブルの定義>,<テーブルの定義>, ...);

● ALTER TABLE

ALTER TABLE文は、既存のテーブルに対してフィールドの追加と削除を行います。
ALTER TABLE <テーブル名> <テーブル操作>,...;
テーブル操作で、フィールドの追加は、ADDを、フィールドの削除は、DROPを使います。

● DROP TABLE

DROP TABLE文は、テーブルを削除します。
DROP TABLE <テーブル名>;

戻る