
昨日も
http://oshiete.coneco.net/qa8283354.html
で質問し、nicotinism様にご回答いただいたのですが
またわからなくなったので教えてください。
エクセルからアクセスでDAOで接続した時に、
フィルタをかけて該当のレコードの他のフィールドの値を返すにはどうすればいいでしょうか?
-------------------------
Sub test()
Dim ac As Object
Dim db As DAO.database
Dim DAOrs As DAO.Recordset
Set ac = CreateObject("Access.Application")
Set db = ac.DBEngine.OpenDatabase("PW.accdb", False, True, ";pwd=0000")
Set DAOrs = db.OpenRecordset("select * from TPW")
DAOrs.Filter = "サイト名 = " & "'nanaco'"
MsgBox DAOrs("Password")
DAOrs.Close: Set DAOrs = Nothing
db.Close: Set db = Nothing
ac.Quit: Set ac = Nothing
End Sub
-------------------------
これだとエラーにもならないけどフィルタがかかってない為、全然関係ないレコードの値を取得してしまいます。
再度ご回答いただければ助かります。
ご教授よろしくお願いします。
No.2ベストアンサー
- 回答日時:
すみませんが前回の続きを少し。
確かにAccessからならパスワード付のアクセスに接続できました。
なのでそのときに出来た
cn.connectionString をExcelに持って行って試しましたが
『実行時エラー 3001
引数が間違った型、許容範囲外、または競合しています』
であえなく撃沈でした orz
http://www.connectionstrings.com/access-2010/
でも
『Note! Reports say
that a database encrypted using Access 2010 - 2013 default encryption scheme
does not work with this connection string.
In Access; try options and choose 2007 encryption method instead.
That should make it work. We do not know of any other solution.
Please get in touch if other solutions is available!』
ということなので諦めることにします。。。
私はレコードセットの Filter は遅いので実際に使用したことはありません。
WHERE 句 で指定しています。
Set DAOrs = db.OpenRecordset("select * from TPW WHERE サイト名 = 'nanaco'")
のように。
レコード数が少なければ運用上問題はなさそうなので、
Set DAOrs = db.OpenRecordset("select * from TPW")
DAOrs.Filter = "サイト名 = " & "'nanaco'"
↓
Set DAOrs = db.OpenRecordset("TPW", dbOpenSnapshot)
DAOrs.Filter = "サイト名=" & "'nanaco'"
Set DAOrs = DAOrs.OpenRecordset() '開き直し
DAOrs.MoveLast '以下2行余計ですがレコード数を取得したいときに
MsgBox DAOrs.RecordCount
MsgBox DAOrs("Password")
のようになるかと。
ただ、ここまで書きながら、いまさら言うな!と怒られるかもですが、
良からぬ人がExcelのコードを見てAccessファイルのパスワードを知り悪用・・・
の心配はないですか。
Excel の VBAProjectの保護をクラックする方法がネット上に一杯あります。
Accessファイルを accdb → accde に変換して、
AccessでExcelに書き込むか、Excelで
sPWD=inputbox("パスワードは?")
Set db = ac.DBEngine.OpenDatabase("PW.accdb", False, True, ";pwd=" & sPWD)
のように平文のパスワードは書き込まない方が安全かもです。
何度もご回答ありがとうございます。
アクセス→アクセスを試していただいたのですね。
私は英語が全く読めないのですが、リンク先はそういう意味なのですか。
Filter が遅いことも知りませんでした。
>良からぬ人がExcelのコードを見てAccessファイルのパスワードを知り悪用・・・
の心配はないですか。
確かにその可能性もありますね。
考えてなかったです。
>Excel の VBAProjectの保護をクラックする方法
そのような方法があるのですか。
それも知りませんでした。
パスワードの管理にも気を付けます。
ありがとうございました。勉強になりました。
No.1
- 回答日時:
DAO の Filter とか Sort は、ADO での動き、設定&適用っていう事はなく、
設定してから OpenRecordset して、新しく求める手順だったかと
以下、雰囲気
Dim DAOrs2 As DAO.Recordset
DAOrs.Filter = "サイト名 = " & "'nanaco'"
Set DAOrs2 = DAOrs.OpenRecordset()
※ DAOrs2 は使わずに、Set DAOrs = DAOrs.OpenRecordset() でも
※ OpenRecordset してから Filter するより、
初めから "select * from TPW WHERE サイト名 = 'nanaco'"
で求めた方が速かったかと思います。
ただ、後に DAOrs を使う処理が控えているのであれば、そのままでも
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PowerPointのスライドの途中で...
-
パワーポイント「スライドショ...
-
パワーポイントの表
-
エクセル・パワーポイントなど...
-
音声マークを一括非表示にしたい。
-
【画像あり】パワーポイントの...
-
PowerPointで、作成されたファ...
-
Microsoft Office2016をOffice2...
-
皆さん、おはようございます♪ ...
-
【パワーポイントのフォントが...
-
パワーポイントのアニメーショ...
-
プレゼン時のポインター
-
アニメーションの設定を一括で...
-
パワーポイントで説明しながら...
-
ExcelのグラフをPowerPointに貼...
-
PowerPoint で動画を再生中に表...
-
27歳の彼氏と電化製品を見に行...
-
Microsoft Outlook本文に、パワ...
-
パワーポイントをプロンプター...
-
パワーポイント2019 図の透...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
希望の位置へフィールドを追加...
-
キーワードを1つにまとめたいです
-
現在CentOSにOpenldapをインス...
-
パススルークエリの使い方について
-
FindFirst複数条件
-
VBAのfor next で繰り返しが出...
-
[ACCESS/VBA]動的にSQL文を...
-
Access2000のVBAでコンパイルエ...
-
accessのvbaでの実行時エラーに...
-
データベースの変換
-
UNION ALLのように順番がありNU...
-
DAO フィルターをかけたい エ...
-
110db+110db=?db 教えて下さい。
-
型 varchar から型 numeric へ...
-
JavaとOracle Javaって何が違う...
-
データベースの最適化をマクロ...
-
SQL Serverとは?
-
AndroidからのAccessデータベー...
-
データベースの2GBって・・・?
-
ハイフン無しの電話番号データ...
おすすめ情報