DXR165の備忘録

自分用の備忘録です。

ADOを使う場合の考慮事項  

ADOを使う場合の考慮事項

1. どのWindows で稼働させるかでADOのバージョンが違ってきます。ADOはVista以降のWindowsに同梱(Windows DACとして実装される)されています。Windws XP SP3ではMDAC 2.8 SP2 になります。 Windows Vista ,7,8のADOはWindows XPで稼働していたADOの機能はカバーされているようです。

2. OLE DB プロバイダーは基本的にはデータソース供給元から提供されます。最初からMDAC(Windows DAC)により提供されるものあります。

3. 64ビットWindows 上の32ビットOfficeなどで使用する場合は、32ビットWindows DACが使われます。64ビットWindowsの場合、32ビットと64ビットと2つのADOがありますので注意が必要です。

category: Access その他

tb: 0   cm: 0

SQL Server OLE DB プロバイダーの提供が廃止?  

調べ物をしていたら、「SQL Server OLE DB プロバイダーの提供が廃止?」なるMSDNの記事を見つけました。これによると、SQL Server 2012より後にリリースされるSQL ServerにはOLE DB プロバイダーは提供されないそうです。これにより、今後、推奨される接続方法はODBCになるそうです。

category: Access その他

tb: 0   cm: 0

Access 2013 ではADPが使えない?  

以前から風の噂では聞いていたのですが、ネットサーフしていたら「Access 2013 ではADPが使えない]
という記事を見かけました。

2013/06/04記事修正
また、SQL Server 2012 がOLE DB プロバイダが提供される最後のバージョンで、今後の接続にはODBCが推奨されるそうです。このようなMicroSoft MSDNの公式記事もありました。

category: Access その他

tb: 0   cm: 0

WSH でデータアクセス環境チェック  

MDAC / WDAC はPC毎に環境が違う場合があり、チェックが大変です。Windows XP まではチェックするユーティリティーがありました。ADOバージョン表示のVBSを作ってみました。

注意 64-Bit Windows 7 で実行するときは、
32ビット環境を調べる場合は32ビット版C:\Windows\SysWOW64\wscript.exe
64ビット環境を調べる場合は64ビット版C:\Windows\System32\wscript.exe
を使用してください。


VBS ソースコードです。
Option Explicit

Dim myConn
Dim myADO_VERSION
Dim myWSH_VERSION
Dim myPROMPT
Dim myTITLE
'*******************************************************************
'ADOオブジェクトを作成します
Set myConn = CreateObject("ADODB.Connection")

myADO_VERSION =  "ADO Ver " & myConn.Version

Set myConn = Nothing
'*******************************************************************
myWSH_VERSION = "  : WSH Ver " & WScript.Version
myPROMPT =  myADO_VERSION & myWSH_VERSION
myTITLE =  "ADO VERSION CHECK"
Msgbox  myPROMPT , 0, myTITLE
ソースコード終わりです。


category: Access その他

tb: 0   cm: 0

OLE DB プロバイダ 設定画面呼び出し  

OLE DB プロバイダ 設定画面を呼び出すには、拡張子が.udlのテキストファイルを作り、ダブルクリックする。

category: Access その他

tb: 0   cm: 0

ADO ( ActiveX Data Object )  

ADO はアプリケーションがデータアクセスをするための橋渡しをする役目をしていて、同一手法でOracle、SQL Server、Jet/ACE、Excel、CSVなどのデータにアクセスできるメリットがあります。Access VBA を解説するサイトなどではDAO とセットでよく解説されています。

ADO の実体はつかみにくいですが、OLE DBを直接動かすかわりに、間に入る仲介役といえるでしょう。なぜ、わざわざ仲介役を入れるかというと、プログラミングが楽になるからです。ここで、重要なことは「ADO はOLE DB を動かすものである」ということです。

OLE DB とはODBCにかわるもので、RDBMSはもとより、電子メール、テキストファイルなども同一手法でアクセスできるようにするためのもので、これもデータ(RDBMSなど)とアプリケーションの間に入る仲介役です。OLE DBには各データソース別にOLE DBプロバイダが必要です。

OLE DBプロバイダは各データベース製品の供給元から提供されるようです。現在(2012/10/10)のところ、最新のAccess 2010(Jet/ACE 14.0)に対応するOLE DBプロバイダは提供されています。


現在(2012/10/09)ADOの指向を受け継ぐものとして新しいデータアクセス手法としてADO.NETが登場しています。しかし、ADO.NETは.NET開発環境があるものでしか使えないようで、Access やExcel のVBAからは使えないようです。また、ADO.NETはOLE DBとは関係ないようです。
2012/10/10 記事修正 ADO.NETでJet/ACE データベースやExcel、CSVなどにアクセスする場合はOLE DBを使用しているようです。

Access 2007 または2010 のデータベース用のOLE DBプロバイダはマイクロソフトのサイトからダウンロードできるようです。

主なOLE DBプロバイダー

"Microsoft.JET.OLEDB.4.0" (Jet 4.0用のOLE DB プロバイダ)
"Microsoft.ACE.OLEDB.12.0"(Access 2007以降のaccdbを使うとき)


概念図 Excel 2003 VBA から mdb ( Access 2000形式 ) へ ADO でアクセス

Excel VBA
    |
ADO
    |
OLE DB Interface
    |
"Microsoft.JET.OLEDB.4.0" (Jet 4.0用のOLE DB プロバイダ)
    |
Jet 4.0
    |
mdb ファイル



参考 Excel 2003 VBA から mdb ( Access 2000形式 ) へ DAO でアクセス

Excel VBA
    | 
DAO 3.6
    |
Jet 4.0
    |
mdb ファイル

category: Access その他

tb: 0   cm: 0

MDAC / WDAC  

MDAC / WDAC は ADO、OLE DB、ODBCなどをセットで供給してくれます。ADO を使うときこれがなくては始まりません。最近では、MDAC / WDAC はWindows に同梱されています。Windows Vista 以降はWindows DAC と呼ぶようです。また、64ビットWindows の登場で64ビット版の MDAC / WDAC も開発されています。

Windows XP SP3 --> MDAC 2.8 SP2

Windows Vista  --> WDAC 6.0

Windows 7 32-Bit --> WDAC 6.1 32-Bit

Windows 7 64-Bit --> WDAC 6.1 64-Bit & WDAC 6.1 32-Bit

メモ

WDAC 6.0以降は機能としてはMDAC2.8とほぼ同等だそうです。(2013/06/23)
ADOの実体はmsado15.dllと関連ファイルのようです。
現在(2012/10/12)の最新のものはWDAC 6.1に含まれるmsado15.dll ver 6.1 のようです。

WDAC は単体でダウンロードできないようです。現在(2012/10/12)

MDAC / WDAC のコンポーネントのインストール先は
C:\Program Files \Common Files\System\ado
C:\Program Files \Common Files\System\Ole DB

さらに64-Bit Windows 7 では

C:\Program Files (x86) \Common Files\System\ado
C:\Program Files (x86) \Common Files\System\Ole DB


C:\Program Files \Common Files\System\ado
C:\Program Files \Common Files\System\Ole DB
 
と両方にあります。

両者はファイル名は同じですが、32-Bitで動くと64-Bitで動くの違いがあり、注意が必要ですです。64-ビットアプリケーションからは当然64-Bit MDAC / WDAC が呼び出されます。

category: Access その他

tb: 0   cm: 0

Jet / ACE エンジン  

Access 2003 のデータベースエンジンは Jet でした。Access 2007 以降はACE Engine( Microsoft Access Engine )になりました。ACE はJet とは別建て開発したようです。ACE は、以前のバージョンの JET との完全な下位互換性があるので、(.mdb) ファイルを読み書きできるようです。ACE はAccess の略と思われます。現在のところAccess がリリースされたびにACE もバージョンアップしているようです。 



Access 2003 のデータベースエンジンは Jet 4.0 です。

Jet 4.0 は2009年ぐらいまでバージョンアップされていたようです。いくつかのバージョンが存在します。

Windws XP のMDAC 2.8にはJet 4.0は同梱されていないようです。

Windows Vista/7 ではJet 4.0 はWDAC の一部として以下の関連ファイルで同梱されています。これは、過去資産の互換性のためと思われます。現在(2012/10/12)のところJet 4.0の64ビット版は提供されないようです。

64-Bit Windows 7 では
C:\Windows\SysWOW64
  Jet 4.0 本体( Msjet40.dll )
  Jet 4.0用のOLE DBプロバイダ
          "Microsoft.JET.OLEDB.4.0"(msjetoledb40.dll)

C:\Program Files (x86)\
      Common Files\microsoft shared\DAO
  Jet 4.0用のオブジェクトライブラリー DAO 3.6 (dao360.dll)




ACE になって実装がわりやすくなりました。上位フォルダがバージョン別になっています。Office 14 ( Access 2010 )では64ビット版が提供されています。ACE EngineはWindows には同梱されないようですが、Office 製品には同梱される場合があるようです。また、ACE Engineはマクロソフトのサイトからダウンロードできるようです。

Offece 2007 (12)はACE Engine Ver 12.0
Office 2010 (14)はACE Engine Ver 14.0
のようです。


32-Bit Office xx on 64-Bit Windows 7 では次のように実装されています。

Access 2007 ( Office 12 ) xx=12
Access 2010 ( Office 14 ) xx=14

C:\Program Files (x86)\
     Common Files\microsoft shared\OFFICExx 
  ACE本体 ( ACECORE.DLL )  
  ACE用のオブジェクト ライブラリー DAO xx ( ACEDAO.DLL  ) 
  ACE用のOLE DBプロバイダ
      "Microsoft.ACE.OLEDB.12.0" (ACEOLEDB.DLL) 

  ※DAO xx =  Microsoft Office xx.0 Access 
                         database engine Object Library

C:\Program Files (x86)\
     Microsoft Office\Officexx
  Office アプリケーション本体 ( Word Excel Access など)



ACE エンジンを介してExcel VBAなどからデータにアクセスする方法は3つあります。

1.  DAO
     ACE エンジンの全機能を使うことができます。 

アプリケーション (Excel VBAなど)
     | 
DAO ( Data Access Object )
     |
Jet / ACE Engine
     |
mdb / accdb Files 


2.  OLEDB(ADO)
     データによらず統一した手法でデータにアクセスできます。
     Word の差し込み印刷でExcelデータなどを参照するときに使われている。
     Excel の外部データ取り込みなどで使われている。 

アプリケーション (Excel VBAなど)
     | 
ADO ( ActiveX Data Object ) 
     |  
OLE DB
     |
Jet / ACE Engine
     |
mdb / accdb Files  

3.  ODBC
     Excel VBA などでは直接使わない。他言語の既存資産を保守するときに使います。
     Excel のMS Queryで使われている。




ACE 用のOLE DBプロバイダはOffice 12 ,14ともに共通で"Microsoft.ACE.OLEDB.12.0"ですがExcelにアクセスするときは拡張プロパティの指定を次のようにします。(マイクロソフトのサイト情報)

Excel 2007 にアクセスするとき →  "Excel 12.0"
Excel 2010 にアクセスするとき →  "Excel 14.0"


DAO ProgID
32-Bit Office 2010 (14) on 64-Bit Winows 7では
DAO  3.6 -> "DAO.DBEngine.36"
DAO 14.0 -> "DAO.DBEngine.120"
となっています。
Office 2007 (12)とOffice 2010 (14) とも"DAO.DBEngine.120" のようです。


メモ
Windows 7でOffice 2003がなく.mdb (Access 2000-2003 形式)をExcel 2010 VBAから操作する場合はDAO3.6ではなくMicrosoft Office 12.0 Access database engine Objectを使います。


私的物置場所
VBSでDAO
Option Explicit

Dim dbEng
Dim myDAO_VERSION

'***************************************************
'DAOオブジェクトを作成します
Set dbEng = CreateObject("DAO.DBEngine.120")

myDAO_VERSION = " DAO Ver " & dbEng.Version
Set dbEng = Nothing
'***************************************************

category: Access その他

tb: 0   cm: 0

Access 2003 延長サポート終了日  

Access 2003 の延長サポート終了日は 2014/04/08 です。

category: Access その他

tb: 0   cm: 0

Access 参照設定の変遷  

Access 2003 ( Office 11 )

DAO → Microsoft DAO 3.6 Object Library
C:\Program Files \Common Files\microsoft shared\DAO\DAO360.DLL 

ADO → Microsoft ActiveX Data Objects 2.x Library
C:\Program Files \Common Files\System\ado\Msado2x.tlb


Access 2007 ( Office 12 )

DAO → Microsoft Office 12.0 Access database engine Object Library
C:\Program Files \Common Files\microsoft shared\OFFICE12\ACEDAO.DLL

ADO → 既定では参照設定されない。   


Access 2010 ( Office 14 )

DAO → Microsoft Office 14.0 Access database engine Object Library 
C:\Program Files \Common Files\microsoft shared\OFFICE14\ACEDAO.DLL

ADO → 既定では参照設定されない。


となっています。Access 2007 以降はDB Engine のバージョンとOffice のバージョンと一致しています。また、ライブラリーのインストールフォルダもDAO からOFFICE XX に変わり、ファイル名もACEDAOとなりバージョン表記はなくなりました。上位のOFFICE XX フォルダでバージョン管理するようです。

category: Access その他

tb: 0   cm: 0

Access 四捨五入するには  

四捨五入は小数の端数の処理の仕方の1つで他に切り上げ、切り捨てなどがあります。ところがAccess にはこの四捨五入をする関数がありません。Access のRound 関数は銀行型丸め処理で四捨五入とは違う部分があるそうです。Excel ならワークシート関数ROUNDで簡単に四捨五入できます。Access では標準で四捨五入の処理を用意していないようです。「Access ぐらい使える人は自前関数で処理できるでしょ」という想定なのでしょうか?。しかし、この「たかが四捨五入の処理」ですら、初心者には壁になり、いろいろ調べまくりの試しいので、貴重な時間が蝕まられるのです。なので、「Access って使いにくい」→「普及しない」となるのでしょう。

限定( 正の数で小数点第一位で四捨五入するとき) はありますが簡素な方法は
=Int(変数 + 0.5)
です。

補足
Excel にはワークシート関数とVBA 関数とがあります。当然ワークシート関数はシートのセルの中で使い、一方VBA 関数はプロシージャの中で使います。両者は別物ですが ROUND のように同じ名前のものがあり事態をややこしくしています。

Excel ワークシート関数のROUND は四捨五入できます。
Excel VBA 関数のRound はAccess( VBA)  のRound と同じく銀行型丸めです。

ところが、Excel VBAには便利な工夫があります。ワークシート関数の一部はプロシージャの中でも使えるようになっています。このROUND関数も使えます。使い方は

=Application.WorksheetFunction.Round(変数,桁数)
となります。この場合のROUNDはくどいようですがワークシート関数のROUNDです。


category: Access その他

tb: 0   cm: 0

Access とWindows 64ビット環境  

Windows 7 の64ビット版をインストールしたパソコンが多くなってきました。メモリー4Gの壁制限がないのは魅力ですね。しかし、プリインストールされる Office はほぼ 32ビット版です。Access も普通にインストールすると32ビットになります。当然JET(ACE)、DAO、ADOも32ビットなのでしょうか?この辺、様々な問題が発生しそうな予感がします。

category: Access その他

tb: 0   cm: 0

Office のテーマ  

Office 2007 からOffice のテーマが導入されました。Office 共通でデザインが統一できるそうです。しかし、このとき Access にはOffice テーマは導入されなかったようで、まだ「スタイル」でフォーム・レポートをデザインしていました。
Office 2010 になり Access にもOffice テーマが導入されました。

Access 2010 フォームのデザインでテーマ関連で注意すること

1. Access 2003 以降で導入された「フォーム上のコントロールにWindows のテーマを使用する」の機能とOffice テーマの機能とを分けて設計しないといけません。

2. Office テーマが適用が可能なフォームのコントロールはコマンドボタン、タブコントロールなど一部のコントロールで、[Office テーマの使用]プロパティは[はい]が規定値になっています。

3. タブコントロールに、[Office テーマの使用]を[はい]にした場合に各ページ内のタブオーダーが適応されない場合があるようです。

category: Access その他

tb: 0   cm: 0

Access アプリケーション 運用時の設定  

完成したデータペースを運用するにあたり、作成時の状態より Access の使い具合を変えなければいけません。Access 操作画面は標準の状態ではデータベース作成者 = 使う人用になっているからです。データベース作成者 ≠使う人用の場合はAccess の操作画面を使いやすく、設計を維持する観点で変更します。想定によっていろいろあると思いますが、参考に私の例をご紹介します。

Access 2010 でのオプション設定 (カレントデータベース)
フォームの表示  必要に応じてメニュー画面 (独自メニューフォーム) を設定
ナビゲーションウィンドウをOFFにする
リボンとツールバーのオプション  すべてのメニューを表示するをOFFにする

メモ
上記のカレントデータベースのオプション設定は現在開いて、設定しているデータベースに適用されます。カレントデータベースのオプションはデータベース単位に設定できます。

category: Access その他

tb: 0   cm: 0

Access 2007 から 2010へ  

Access 2007→2010で追加されたもの

ナビゲーションフォーム(これは使えそうですが これを使っちゃうとAccess 2007では動かない.....?)

アプリケーション パーツ

Backstage ビュー(追加ということでもないですが…)

Web データベースを構築し、SharePoint サイトに発行できる。

Office テーマ

category: Access その他

tb: 0   cm: 0

Access はなぜ習得が難しいのか?  

私自身の感想ですが、以下の点が考えられます。

1.とりあえず、どんなものかすぐに使い始められない。
2.とっつきにくいカタカナ用語が盛りだくさんで、これの意味をつかむだけで超大変です。例として、クエリだのプロパティだの
3.結局は開発ツールなんじゃない!?個人でこじんまりと使うものではないような。

とりあえず、便利さをすぐ体感するならつぎのことをお試しください。Excelのワークシートのデータをテーブルとしてリンクし、レポートウィザードなど利用すれば、様々な帳票を定型的にも、スポット的にもスピーディーに作成できます。そうです、AccessをExcelデータの印刷ツールとして活用するのです。

category: Access その他

tb: 0   cm: 0

Access ウィザードは便利だけど  

ウィザードで簡単にフォーム・レポート・サブフォーム・サブレポート・ルックアップフィールド・コマンドボタン・コンボボックスなどが出来ますが、その原理といったものがわかっていないと応用(修正)が利きません。

例えば、フォームはレコードソース プロパティにもとになるテーブルまたはクエリが設定されていないとフィルターや検索・置換などのAccessの標準機能の多くを使えません。このことを解説している初心者用の解説本は少ないようです。

category: Access その他

tb: 0   cm: 0

Access リボンを非表示にする  

Access 2007以降

VBAで DoCmd.ShowToolbar "Ribbon", acToolbarNo

category: Access その他

tb: 0   cm: 0

ACCESS 2003 から ACCESS 2007への変更点  

レイアウトビューが使える。
OFFICE LINKSの機能は 外部データ タブのエクスポート グループへまとめられている。WORD差し込み印刷連動も健在。
埋め込みマクロが使える。
マクロのアクションの数が増えた。「すべてのアクションの表示」ボタンですべて表示される。
オブジェクトがタブ付きのウインドウで表示される。ACCESS 2000形式のファイルもオプション設定を変えれば表示できる。規定は「重ねて表示」になっている。
フォーム作成では「複数のアイテム」ボタンで、1レコード1行の一覧表形式のフォームを作成できる。 
レポートではレポートビューが加わった。レポートではビューが4種類になった。
データベースウィンドウからナビゲーションウィンドウに変更。
レポートのグループ化、並べ替え、集計の機能が設定しやすくなった。
ファイル形式が変更。
mdb( JET)→ accdb(ACE データベースエンジン)

ODBCDirectが使えなくなった。

category: Access その他

tb: 0   cm: 0

Access 起動時にマクロを実行する  

マクロの名前をAUTOEXECにする。AUTO_OPENではない。

category: Access その他

tb: 0   cm: 0

Access SQL  

WHERE句 複数条件指定
一般の論理演算と同じで、ANDが優先順位が高い。ORを優先させたいときは () 半角のかっこで囲む。
例  WHERE ( 列1 = A OR 列1 = B ) AND 列2 = C
 
文字列はシングルクォーテーションでサンドウィッチにする。

日付 / 時刻型は半角のシャープ( # )でサンドウィッチにして、m / d / yy の米国式で指定する。

メモ
Access はSQLの標準規格のANSI-89 とANSI-92に対応している。オプションの設定で確認できる。

category: Access その他

tb: 0   cm: 0

ADO でExcelワークシートをDBのように扱う  

2012/9/29 記事修正
Excel VBAです。ADOでExcelワークシトをDBのように扱えます。ワークシートの表形式のデータをテーブルのように参照することができます。
メリットとしては
1. Excel がなくてもエクセルのファイルを操作することができます。が、Excel が入っていないPCも少ないでしょう。 
2. ブックをオープンしなくてもよい。 VBA でブックを開くと当然ですがExcel が起動します。
デメリット
いろいろあります。


サンプルコード

Dim cn As Object
Dim rs As Object
Dim s As String
Dim u As String
Dim iCols As Long
Const t = "app name"
Const C1 = "Provider=Microsoft.Jet.OLEDB.4.0"
Const C2 = "Extended Properties=Excel 8.0"
Const C3 = "Data Source=C:\xxx\xxx.xls"

On Error Resume Next

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

u = t & " ADO Ver " & cn.Version

cn.Open C1 & ";" & C2 & ";" & C3

If Err.Number <> 0 Then
MsgBox "ADO Connection Openでエラーが発生しました" & vbCrLf & Err.Description, , u
cn.Close
Set cn = Nothing
End
End If

s = "SELECT * FROM [sheetname$] WHERE "
s = s & "列1='値' "
s = s & ";"

rs.Open s, cn
If Err.Number <> 0 Then
MsgBox "ADO Recordset Openでエラーが発生しました" & vbCrLf & Err.Description, , u
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End
End If

If Not rs.Bof Then
'新しいブックのシートに転記
Workbooks.Add
For iCols = 0 To rs.Fields.Count - 1
ActiveWorkbook.ActiveSheet.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
ActiveWorkbook.ActiveSheet.Cells(2, 1).CopyFromRecordset rs
Else
ActiveWorkbook.ActiveSheet.Cells(1, 1) = "該当レコードなし"
End If


rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

category: Access その他

tb: 0   cm: 0

プロフィール

最新コメント

カウンター(2012/3/10以降)