SQL の CASE を Access で使いたければ Switch か

Access, TIPS, 開発 No Comments »

他の DB サーバでは、CASE~WHEN を利用するのですが、Access には VBA との互換性のためか、構文は SWITCH しか無いようです。備忘録。

○一般的な DB の場合


CASE [Clm1]
WHEN 0 THEN 'nothing'
WHEN 1 THEN 'one'
ELSE 'other'
END

○Access の場合


SWITCH ([Clm1]=0, 'nothing', [Clm1]=1, 'one', True, 'other')
  • Share/Bookmark

Access のビューは更新可能

Access, TIPS, 開発 No Comments »

SQL Server も同様ですが、View に対しての変更は、元 Table の更新と同義です。

知っていたのに、使っていませんでした。

他のデータベースには見られない機能だと言うこともありますが、JOIN しているテーブルの反映などもしてくれるため、そういったケースに対するきちんとした理解が足りないのだと思います。

どんな技術も理解せずに応用はできませんね。

  • Share/Bookmark

埋め込みマクロは Access 2007 の新機能だった・・

Access, TIPS, 開発 No Comments »

Access 2003 以前のバージョンには、埋め込みマクロ機能は無かったのを忘れていました。

一部マクロ機能もパワーアップしていますしね。

バージョン違いの Access でシステムを組むときの基本的な注意点なのに、埋め込み残してしまいました・・ショック!

  • Share/Bookmark

Access の UPDATE では サブクエリに UNION を含められない

Access, TIPS, 開発 No Comments »

タイトル通りです。

Access は、SELECT ステートメントでサブクエリを使う際には UNION が使えますが、UPDATE ステートメントではサブクエリに UNION を含められないようなんです。

解決方法としては、クエリとして別に保存してあげるか、UNION の前後に対して、UPDATE ステートメントをそれぞれ書いてあげるしかないようです。

前者は余計なオブジェクトが増えるのでなんか嫌ですし、後者はトランザクションの関係で(Access ですけれども!)嫌なんです。

SQL は弱いんですよ、自分・・応用が利かない~

ダメな例)

UPDATE T1 SET F1=F2
WHERE F3 IN (
    SELECT F4 FROM T2
    UNION
    SELECT F4 FROM T3
)
  • Share/Bookmark

Access の JOIN は結合用のテーブルを () で括る必要がある

Access, TIPS, 開発 2 Comments »

次の構文を使用して、JOIN ステートメントをネストすることができます。

SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN ...)]  ON table3.field3 compopr tablex.fieldx)] ON table2.field2 compopr table3.field3) ON table1.field1 compopr table2.field2;

Access 開発者用リファレンスには、このように載っていました。Access では、結合するテーブルを確定するために、() で括る必要があるようです。

SQL Server などでは () で括らなくても動作します。ハマりどころです。

例えばこんな:

( T1 INNER JOIN T2 ON T1.key=T2.key) AS T12 INNER JOIN T3 ON T12.key=T3.key
  • Share/Bookmark

Access のカレントレコードが新規か編集を調べるのは Form.NewRecord

Access, TIPS, 開発 No Comments »

Access は、Form.DataSource にテーブルなどを指定している場合、フォームのレコードの操作を行うことができます。

このとき、含んでいるコントロールが編集対象としているカレントレコードが、新規なのか編集なのかを知る必要がある場合、Form.NewRecord プロパティを参照する方法が良いでしょう。

なぜなら、オートナンバー型などでプライマリキーを設定していると、フォームに含んでいるコントロールに変更があった直後に仮のキーが設定されてしまうので、プライマリキー用のカラムに値が入っているかどうかで判断してはいけないからです。

  • Share/Bookmark
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン