スポンサーリンク

2008-03-31

Tips145 - 自作関数を使用する Public Function()

SQLの構文に自作関数を使用することができます。
自作関数例:
引数を10倍にして返す関数です。
これを標準モジュールに入力します。
Public Function AcCalc(lval As Long) As Long
AcCalc = lval * 10
End Function

構文例:
SQL = "SELECT AcCalc(フィールド名) FROM テーブル名"
CurrentDb.Execute SQL, dbFailOnError

SQL = "SELECT AcCalc(売上データ) FROM 2008年実績"
2008年実績テーブルの売上データを10倍にした値を取得します。

2008-03-27

Tips144 - Nullでないデータを抽出する IS NOT NULL

NULLかどうか判定するのには「ISNULL」を使用しました。
ISNULL関数は、値がNULLの時は「真(TRUE)」が返りました。
それとは逆に、値がNULLでない時に「真(TRUE)」を返すには、「IS NOT NULL」を使用します。

構文例
SQL = "SELECT フィールド名 FROM テーブル名 WHERE 判定フィールド名 IS NOT NULL"
CurrentDb.Execute SQL, dbFailOnError

SQL = "SELECT 二学期点数 FROM テスト結果 WHERE 一学期点数 IS NOT NULL"
テスト結果テーブルから一学期がNULLでない点数の二学期の点数を抽出します。

2008-03-21

Tips143 - 文字位置を指定し検索する LIKE '??ABC??'

パターンマッチングをするにはLIKEを使用しますが、何文字目の文字を検索させるには'?'を使います。
例えば3文字で2文字目が'A'のデータを検索するには
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド名 LIKE '?A?'"
になります。
文字数を指定しない場合は
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド名 LIKE '?A*'"
になります。

使用サンプル:
郵便番号の枝番の上2桁が'00'のデータを検索します。
SQL = "SELECT * FROM T_住所録 WHERE 郵便番号 LIKE '????00??'"
Set rs = CurrentDb.OpenRecordset(SQL)

2008-03-17

Tips142 - フィールド名を変更する ALTER TABEL

Accessでは「ALTER TABLE CHANGE」が使えないので、下記の手順で行います。
1)新規フィールドの追加
2)データコピー
3)以前のフィールド削除

実行例(国語フィールドを社会フィールドに変更):
1)新規社会フィールドの追加
SQL = "ALTER TABLE 中間テスト結果 ADD COLUMN 社会 INTEGER"
CurrentDb.Execute SQL, dbFailOnError

2)国語データを社会データにコピー
SQL = "UPDATE 中間テスト結果 SET 社会=国語"
CurrentDb.Execute SQL, dbFailOnError

3)以前の国語フィールド削除
SQL = "ALTER TABLE 中間テスト結果 DROP COLUMN 国語"
CurrentDb.Execute SQL, dbFailOnError

これで完了です。

2008-03-13

Tips141 - Where句で使う比較演算子

フィールド名 = 検索値 (一致する)
フィールド名 <> 検索値 (一致しない)
フィールド名 > 検索値 (検索値より大きい)
フィールド名 < 検索値 (検索値より小さい)
フィールド名 >= 検索値 (検索値以上)
フィールド名 <= 検索値 (検索値以下)

2008-03-11

Tips140 - 中位○件のレコードを抽出 WHERE(TOP述語)

中位のレコードを抽出するにはサブクエリを使用します。
例えば、100人の得点から51位~60位のレコードを取得するには、
初めに下位50人を昇順で抽出し、その後10人を降順で抽出します。
初めの下位50人がサブクエリになります。

1 50 51 100
   ↓
51 100

51 60

使用例:
20人の英語の得点から中位5人(11位~15位)を取得します。
SQL = "SELECT TOP 5 学生ID,英語 FROM 成績テーブル WHERE 学生ID=ANY (SELECT TOP 10 学生ID FROM 成績テーブル ORDER BY 英語) ORDER BY 英語 DESC"

2008-03-07

Tips139 - 下位○件のレコードを降順で抽出 WHERE(TOP述語)

前回のTips138を実行すると、結果は昇順になりました。
例えば
学生ID 国語得点
8 15
2 25
5 50
のように国語得点は悪い順になっています。
これを得点の高いほうからソートし表示させるには、WHERE句にTOP句のサブクエリを使用します。
SQL = "SELECT 学生ID,国語 FROM 成績テーブル WHERE 学生ID=ANY (SELECT TOP 3 学生ID FROM 成績テーブル ORDER BY 国語) ORDER BY 国語 DESC"
これで実行すると
学生ID 国語得点
5 50
2 25
8 15
といい方から取得できます。

2008-03-02

Tips138 - 下位○件のレコードを抽出(例:ワースト10) TOP述語

構文例
SQL = "SELECT TOP ○ フィールド名 FROM テーブル名 ORDER BY TOPで比較するフィールド名"
CurrentDb.Execute SQL, dbFailOnError

TOP述語を使うと指定数の下位レコードを抽出できます。
TOPの次に指定数をセットします。
上位を抽出する為には、「ORDER BY フィールド名」で昇順に並べ替えてください。

使用例
SQL = "SELECT TOP 3 学生ID,国語 FROM テーブル7 ORDER BY 国語"
国語の得点のワースト3を抽出し、その学生IDと国語の得点を取得します。