●全ページ一覧の表示(ページ下へ移動)>>

▲PAGE TOP

SQL ServerとDAO


NO 内容 分類 発行日
vol173 SQL ServerとDAO SQL Server 2012年11月21日

現在、
「アクセス(Access)のシステムを無料のSQL Server Expressへ移行してみよう」という教材を販売しています。

Accessをアップサイジングして、SQL Serverに移行します。
そして、AccessからODBC経由でリンクして使うやり方を説明しています。

Accessのクエリ、フォーム、レポートの資産をそのまま使うことができます。

でも、先日、お客様から、ご質問のメールがありました。

Accessから、SQL Serverにアップサイジングして、ODBCから、SQL Serverにリンクしようとするとエラーが発生しました。
お客様は、「DAO」を使っていました。

「DAO」では、「テーブルタイプ」のレコードセットのオブジェクトを使用していると、SQL Serverのリンクテーブルにアクセスできません。

■1.DAOとADOについて

Accessから直接、テーブルやクエリにアクセスして操作する方法に、DAOとADOがあります。

「DAO」は、「Data Access Objects」の略です。
「ADO」は、「ActiveX Data Objects」の略です。

アクセス2000以前は、DAOが使用されていました。
アクセス2000以降に、ADOが作成されました。

ADOは、DAOの後継版として開発されたオブジェクトです。
コードは、違っています。(やり方は似ています。)

アクセスでは、ADOもDAOも使用することができます。

最近では、ADOを使う方が多いようです。

以前の、Accessの「DAO」をSQL Serverに移行するときには、注意が必要です。


■2.問題点と対策

DAOを使用している場合、Accessから、SQL ServerへアップサイジングしてAccessから、ODBCでSQL Serverにリンクすると、DAOのテーブルタイプのレコードセットでは、エラーが出ます。

解決策は、ダイナセットタイプかスナップショットタイプに変更するか、ADOに変更する必要があります。

ADOでは、エラーは出ませんでした。

これから、DAOかADOを使うかを考えている方は、ADOを使った方がよいと思います。

■3.以下、レコードセット別のADOとDAOの説明です。

ADOでもDAOでも、テーブルに登録されているデータや選択クエリを実行して取得したレコードの集まりは、レコードセット(Recordset)オブジェクトで管理されます。

レコードセットのオブジェクトは、3つの種類があります。

  1. テーブルタイプ
  2. ダイナセットタイプ
  3. スナップショットタイプ

です。

それぞれについて、説明します。

  1. テーブルタイプ

    テーブルに登録されているレコードの集まりを表します。
    新規にレコードを追加したり、登録されているデータを更新したりすることができます。

    テーブルタイプでは、Accessのリンクテーブルや、ODBCからSQL Serverへのリンクテーブルではエラーが発生します。
    注意が必要です。


    ●DAOのコード例
    -------------
    Dim rs As DAO.Recordset
    Set db = CurrentDb()

    Set rs = db.OpenRecordset("TEST", dbOpenTable)
    -------------
    ●DAOの結果
    ・同じAccessの中にあるテーブルは動く。
    ・同じAccessの中にあるテーブルのクエリは動かない。
    ・Accessのリンクテーブルは動かない。
    ・SQL ServerでODBCのリンクテーブルは動かない。

  2. ダイナセットタイプ

    選択クエリを実行して取得したレコードの集まりを表します。
    新規にレコードを追加したり、登録されているデータを更新したりすることができます。
    これらの編集結果は、レコードセットのもとになったテーブルに反映されます。

    ●DAOのコード例
    -------------
    Dim rs As DAO.Recordset

    Set db = CurrentDb()

    Set rs = db.OpenRecordset("TEST", dbOpenDynaset)
    -------------
    ●DAOの結果

    ・同じAccessの中にあるテーブルは動く。
    ・同じAccessの中にあるテーブルのクエリは動く。
    ・Accessのリンクテーブルは動く。
    ・SQL ServerでODBCのリンクテーブルは動く。
     SQL Serverへのidとパスワードを入力する必要がある。

  3. スナップショットタイプ

    選択クエリを実行して取得したレコードの集まりです。
    レコードセットの内容を更新することはできません。

    ●DAOのコード例
    -------------
    Dim rs As DAO.Recordset

    Set db = CurrentDb()

    Set rs = db.OpenRecordset("TEST", dbOpenSnapshot)
    -------------
    ●DAOの結果
    ・同じAccessの中にあるテーブルは動く。
    ・同じAccessの中にあるテーブルのクエリは動く。
    ・Accessのリンクテーブルは動く。
    ・SQL ServerでODBCのリンクテーブルは動く。
     SQL Serverへのidとパスワードを入力する必要がある。


参考にしてください。



おすすめ教材


就職・転職にはマイクロソフトオフィスの知識が必修です。





[↑一番上へ]
[マイクロソフトアクセス(Access)活用法(メールマガジン)(ホームへ)]
11:411108

<<全ページのメニューリストです>>

アクセス(Access)の概要

アクセス(Access)全体

テーブル

クエリ

フォーム

レポート

マクロ

VBA

SQL Server

システム開発

SQL Azure

その他