gooポイントが当たる質問投稿キャンペーン>>

ADOとADOXを使おうと思うのですが
参照設定の2.8と6.0 6.1とどちらにチェックをつければいいでしょうか?

ADOの場合は、2.8の次が6.1
ADOXの場合は、2.8の次が6.0になっています。

一番新しい番号にチェックするべきという書き込みを見たのですが
2.6
2.7
2.8
6.1
と飛んでるのが不自然で、6.0は無視して2.8にチェックをつけるのか、
6.0が最新だからチェックをつけるのか、迷っています。

それぞれひとつずつチェックをつけて、コードを実行してみましたがエラーにはなりませんでした。
どちらでも全く変わらないのでしょうか?

「参照設定は2.8と6.0 6.1とどちら」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (1件)

そのデータファイル(MDB?ACCDB?)を貴方の現環境でしか使用しない


(OSがXP Accessが2003などで使用しない)のなら
最新のバージョンにチェックを入れて置けば良いでしょう。
ACC2002の時に2.8にチェックを入れていたら、ADOのヘルプが出て来ない・・
2.5だと現れるてのがありました。。。

2.8 と 6.0 は機能的には変わらないようです。
http://msdn.microsoft.com/en-us/library/windows/ …(v=vs.85).aspx
『ADO 6.0 is functionally equivalent to ADO 2.8.』

そちらではありませんが6.0 は6.1にあった問題を解決したもののよう。
http://blogs.msdn.com/b/jpsql/archive/2012/10/24 …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2013/04/04 21:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAでブックを非表示で開いて処理して閉じる方法

エクセルVBAで質問なのですが、別のブックを非表示で開いて処理をし、処理が終わったらそのブックを閉じるマクロを作りたいです。

ネットで方法をたくさん調べたのですが、うまくいきません。
ActiveWindow.Visible = Falseを使うと非表示でブックを開くのですが、次の処理をしようとすると非表示のブックのシートがselectで選択できないのかエラーが出てしまいます。

どなたか良い方法をご存じないでしょうか?


↓今作ろうとしているマクロを参考に書いておきます。

ブックA内に書かれているブックBを非表示で開く

処理(ブックBのシート内の表に記入漏れの空白セルがあればブックAに空白セルの番地を表示させる)

ブックBを非表示のまま閉じる


非表示にせずにブックBを開けばうまく処理が完了するのですが、ActiveWindow.Visible = Falseを入れて非表示でブックBを開くと処理が開始しないという状況です。

Aベストアンサー

こんにちは

>非表示のブックのシートがselectで選択できないのかエラーが出てしまいます。
手作業でも非表示のブックでシートやセルを選択しようとしても無理ですよね?

VBAの記述の方法をSelectやActivateなどを用いないように書き直せば、ご希望のことは実現可能だと思います。

例として、以下では"TestBook"というブックを開き、そのシート1内でA1:C20の範囲の空白セルを探して、メッセージボックスにカンマ区切りで結果を表示します。
(殆ど時間がかかりませんので、非表示にしなくても同じだとは思いますが…)

Sub sample()
 Dim wb As Workbook, c As Range
 Dim str As String

 str = ""
 Set wb = Workbooks.Open(ThisWorkbook.Path & "\TestBook.xlsm")
 Windows(wb.Name).Visible = False

 For Each c In wb.Worksheets(1).Range("A1:C20")
  If c = Empty Then
   If str <> "" Then str = str & " , "
   str = str & c.Address
  End If
 Next c
 wb.Close SaveChanges:=False

 MsgBox str
End Sub

※ わざわざ『非表示』に設定しなくても、現在のウィンドウをアクティブにすることで、新しく開いたウィンドウを(裏側に)隠すこともできますね。

こんにちは

>非表示のブックのシートがselectで選択できないのかエラーが出てしまいます。
手作業でも非表示のブックでシートやセルを選択しようとしても無理ですよね?

VBAの記述の方法をSelectやActivateなどを用いないように書き直せば、ご希望のことは実現可能だと思います。

例として、以下では"TestBook"というブックを開き、そのシート1内でA1:C20の範囲の空白セルを探して、メッセージボックスにカンマ区切りで結果を表示します。
(殆ど時間がかかりませんので、非表示にしなくても同じだとは思いま...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QADOを利用したODBC、OLEDB経由などの違い

ADOを利用したデータベース接続についてなのですが
たとえばcsvファイルにアクセスする場合以下の三つのやり方があると思います。

Connectionのopenメソッドに

1.
"Provider=Microsoft.Jet.OLEDB.4.0;...."
とOLEDBプロバイダ名を指定する接続文字列を使う方法

2.
"Driver={Microsoft Text Driver (*.txt; *.csv)}....."
とODBCドライバを指定する接続文字列を使う方法

3..
"DSN=[データソース名]......"
とODBCのデータソース名を指定する方法


この三つの処理の違いがわかりません。
特に2.と3.の違いがまったくわかりません。
どなたか詳しい方、教えていただけませんか?

Aベストアンサー

細かな話は、参考URLを見ていただくとして、
まず、ODBCと、OLEDBの違いは、インターフェースが違うとところだけです。

歴史的な流れで。

ODBC→OLEDBと進化をしてきたのですが、ODBCがより具体的な指定が必要なのに大して、OLEDBは
より設定が抽象化されているといった解釈でいいのかな?。。と思っております。

もっと簡単にいうと、1のほうが変化に柔軟で
2と3は、変化するごとに、アプリケーションの改修を余儀なくされるといった解釈良いのかな?
OLEDBは、たとえばデータソースが、CSVから、データベースに変わったとしても最小限のアプリケーション改修で済む可能性が高いのですが、ODBCはそうもいかず、根本からアプリケーションを改修する
必要がでる可能性があります。

っていうほど、OLEDBもそんなにうまくはできていないと思いますけどね。。

参考URL:http://www.progress-japan.co.jp/datadirect/technote/ADOvsADODOTNET.asp

Q.VBSだとADODBのプロバイダが見つからない件

こんばんは

.vbsファイルからデータベースを操作しようとして躓いています。
エクセルvbaでは動いているのに、.vbsに移植するとエラーが出てしまいます。
エラーの内容は「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」です。

次のスクリプトです。

'ここから
Dim ADO_CONNECT
Dim MDBName
Dim dbCon
Dim strSQL

ADO_CONNECT = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
MDBName = WScript.Arguments(0) 'エクセルVBAの場合はハードコード
Set dbCon = CreateObject("ADODB.Connection")
dbCon.Open ADO_CONNECT & MDBName & ";"
strSQL = "命令文"
dbCon.Execute (strSQL)

'ここまで

プロバイダーの場所、バージョン、32/64ビット、あたりに問題がのかもしれませんが、調べてもよくわかりません。エクセルVBAでは動作するので、参照設定?の違いなのかもしれません。どのように解決したら良いでしょうか。

Win 7 Pro 64bit
MS Accessなし
Excel 2007 あり

こんばんは

.vbsファイルからデータベースを操作しようとして躓いています。
エクセルvbaでは動いているのに、.vbsに移植するとエラーが出てしまいます。
エラーの内容は「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」です。

次のスクリプトです。

'ここから
Dim ADO_CONNECT
Dim MDBName
Dim dbCon
Dim strSQL

ADO_CONNECT = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
MDBName = WScript.Arguments(0) 'エクセルVBAの場合はハードコード
Set dbCon = CreateOb...続きを読む

Aベストアンサー

スクリプトを32bit版ファイラーから試すと問題ありませんでした。
が、Explorer (64bitで動作)から試すと同じエラーになりました。
Explorer 64bit で動作

Wscript も64bitが呼ばれる

ADODB の64bit版は存在しないのでエラー発生の流れかと思います。
(Win7 64bit & Office 2010 64bit でもほんの少しだけ確認)

なので、
http://d.hatena.ne.jp/KenKens/20140312/1394641831
の中ほどにあるように32bit版で起動しなおすようにすれば解決するものと思われます。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Q実行時エラー -2147217900 ADODBでレコードセットオープン時エラー

お世話になります!
AccessVBAで実行時エラーが出ます。

SQLステートメントが正しくありません。 DELETE INSERT PROCEDURE SELECT または UPDATEを使用してください。

と表示されます。

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset 'URLマスタ
'接続
Set cn = Application.CurrentProject.Connection
Set rs = New ADODB.Recordset

'レコードセットを取得

rs.Open "URLマスタ", cn ・・・・・・・・・・・・・ここでエラー

つい先日までエラーが出ませんでした。
久しぶりにすると、私のPCではエラーが出ます。
他のPCでは出ません。

Windows7
Access2016 Office solo
を使用しています。
よろしくお願い申し上げます。

お世話になります!
AccessVBAで実行時エラーが出ます。

SQLステートメントが正しくありません。 DELETE INSERT PROCEDURE SELECT または UPDATEを使用してください。

と表示されます。

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset 'URLマスタ
'接続
Set cn = Application.CurrentProject.Connection
Set rs = New ADODB.Recordset

'レコードセットを取得

rs.Open "URLマスタ", cn ・・・・・・・・・・・・・ここでエラー

つい先日...続きを読む

Aベストアンサー

No.1 です。

> rs.Open "URLマスタ", cn , adCmdTable
> こうでしょうか?

これでは 3番目の引数ですね。 (^^;)

rs.Open "URLマスタ", cn , , , adCmdTable

これは
rs.Open "URLマスタ", cn ,adOpenForwardOnly ,adLockReadOnly , adCmdTable
と同等です。

良く使うメソッドでも、一応ヘルプで確認することをお勧めします。
https://msdn.microsoft.com/ja-jp/library/cc364218.aspx

QAccess 2013 でADOがうまく使えません

Access 2013 でADOが使えません。

下記のように記載しています。

Dim DB as ADODB.Connection
Dim rs as ADODB.Recordset

Set DB = CurrentProject.Connection

Set rs = New ADODB.Recordset
rs.Open "xxxxxxx", DB, adOpenKeyset, adLockOptimistic

「参照設定」で
Microsoft ActiveX Data Objects Recordset 6.0 Library
にはチェックを入れています。

実行すると
最初の Dim DB as ADODB.Connection の部分で

コンパイルエラー
ユーザー定義型は定義されていません

と出てストップしてしまいます。
何が間違いなのでしょうか。

Aベストアンサー

> 「参照設定」で
> Microsoft ActiveX Data Objects Recordset 6.0 Library
> にはチェックを入れています。

2013 は使ったことがないので確かなことは言えませんが、
普通は
[Microsoft ActiveX Data Objects x.x Library]
を参照設定するのではないでしょうか?

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

Q【ADO】「Execute」を使うときは「Update」は不要?

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

を実行したとき
テーブル1にデータがあるときはエラーにはならないのですが
何もデータがないときは「rs.Update」でエラーになります。
なので「Update」は消して実行していますが
「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか?

よろしくお願いします。

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

を実行したとき
テーブル1にデータがあるときはエラーにはならないのですが
何もデータがないときは「rs.Update」...続きを読む

Aベストアンサー

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

Sub test()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
cn.Execute "DELETE FROM テーブル1"
Set cn = Nothing
End Sub
と変更しても変わりはありません。
データベースの更新を行うだけが目的であるのならば、コピーを作成する必要はありません。

一方、ユーザーの操作を非同期(操作と処理が同時でないこと)で、データベースに反映したい場合にレコードセットを使用した更新を使用します。
Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
'フォームロードでレコードセットを作成し、ボタン押下で削除するなど
'今回は一括削除
Do Until rs.EOF
rs.Delete
rs.MoveNext
Loop
rs.close
cn.close
Set rs = Nothing
Set cn = Nothing
End Sub

Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub

Sub test()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLE...続きを読む

QDATE型変数を初期化する方法

他の変数みたいに
ゼロや""では初期化は出来ないのでしょうか?

Aベストアンサー

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Day(d)
End Sub
Form1には00:00:00、89/12/30が表示され、MSGBOXでは1899、12,30(31で無い)と表示されました。
こう言うことはエクセルの日付に似ており、シリアル値
のスタート日を表示しているところから、その値でセットされているはず。したがってd+1とか整数的演算が可能と
言うことであり、表示する時だけyyyy/mm/ddほか書式に
したがってVBが表示してくれると思う。
ただこの利用法は思いつかないが。
""に付いてはやっていませんが。

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Da...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング