SQL Server Compact EditionのDBをVBAからアクセスする
なんで今頃SQL Server Compact Edition
SQL Server Compact Edition(以下SQL Server CE)で作成されたシステムをリプレースするという仕事があり、現行システムのデータを加工しようと思ってExcel VBAを作成しようとしたところ、接続文字列の情報が見つけにくかった(自分のググレベルが低い)のでこちらに書いておこうかと思った次第です。
.NETでのアクセスは一杯載ってるので、そちらで作ってしまえばいいんですがとりあえず。
接続文字列
で、本題のSQL Server Compact EditionをVBAからアクセスする場合の接続文字列は以下のような感じになります。
"Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=[データベースファイル名];SSCE:Database Password=[データベースパスワード];"
データベースファイルにパスワードがない場合はSSCE:Database Password
の項目は不要だと思います。
実際のVBA例
実際にVBAでアクセスする場合はまずVBAのエディタウィンドウの方の[ツール]メニュー→[参照設定]で、「Microsoft ActiveX Data Objects 2.x Library」にチェックを入れた上で、下記のような感じになります。2.xの部分は色々あって特に気にしなくていいのではと思いますが当方は2.8にチェックを入れました。
Private Sub cboTest_Click()
Dim objCon As New ADODB.Connection
Dim pRS As New ADODB.Recordset
Dim sConStr As String
Dim sSql As String
objCon.ConnectionString = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\DB\TEST.sdf;SSCE:Database Password=TEST;"
'データベースオープン
objCon.Open
'SQL文 TESTテーブルのレコードを検索
sSql = "SELECT * FROM TEST"
'SQL文を実行して結果を取得
pRS.Open sSql, objCon
'結果の数だけレコードの処理
While Not pRS.EOF
'見つかったレコードのIDカラムを取得してダイアログに表示
Call MsgBox("ID=" & CStr(pRS.Fields("ID")))
pRS.MoveNext '次のレコードへ移動
Wend
pRS.Close '結果セットを使い終わったらクローズ
objCon.Close 'DB接続クローズ
set pRS = Nothing '結果セットオブジェクト解放
Set objCon = Nothing '接続オブジェクト解放
End Sub
おまけ
たまにしか使わないのですぐ忘れるのでついでに、、、
・DB内にあるテーブル名を取得するSQL
SELECT * FROM INFORMATION_SCHEMA.TABLES
→TABLE_NAME列にテーブル名が入っている
・DB内にあるテーブルのカラム名を取得するSQL
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='[テーブル名]'
→COLUMN_NAME列にカラム名が入っている
SQL Server CEのsdfファイルはSSMS(SQL Server Management Studio)の2008以前のバージョンでしか読めないので、新しいSSMSを使っていると二重に入れておかないといけないのでディスク容量の無駄ですね・・。
Author And Source
この問題について(SQL Server Compact EditionのDBをVBAからアクセスする), 我々は、より多くの情報をここで見つけました https://qiita.com/gun534/items/fba63e5b0d8ca112d67d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .