
昨日も
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) IBM Notes9のメールをExcelVBAにて送信するコードについての質問です。 以下のコードを 3 2023/06/21 17:58
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
希望の位置へフィールドを追加...
-
キーワードを1つにまとめたいです
-
型 varchar から型 numeric へ...
-
オラクルのLONG RAW型のテーブ...
-
JavaとOracle Javaって何が違う...
-
sqlite2とsqlite3の違いについて
-
顧客管理ソフトのおすすめは?
-
データベースとweb画面
-
オラクルのバージョンとウィン...
-
掲示板とデータベースソフトの...
-
accessの利用方法について
-
ACCESSが開かなくなってしまい...
-
データベースの最適化をマクロ...
-
多量の画像整理をアクセスで
-
DB2のログインについて
-
緊急事態発生!!初心者です!...
-
Accessの2002と97の違いは?
-
Oracleを遠隔地から操作する時...
-
会員のデータベース化するには...
-
Accessも社内のネットワーク(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DAO フィルターをかけたい エ...
-
Access2000のVBAでコンパイルエ...
-
希望の位置へフィールドを追加...
-
ACCESS2000でテーブルをVBAから...
-
エクセルからアクセスにADO...
-
列名が無効です
-
FindFirst複数条件
-
データベースの変換
-
accessのvbaでの実行時エラーに...
-
パススルークエリの使い方について
-
三枝夕夏って?
-
sqlite3の動作が?xamppでは問...
-
型 varchar から型 numeric へ...
-
キャッシュとバッファの違いは?
-
エクセルのフォームについて(...
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
クエリをキャンセルしたいので...
-
データベースの2GBって・・・?
-
listener.logが肥大化
おすすめ情報