![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
昨日も
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ランキング
-
列名が無効です
-
三枝夕夏って?
-
UNION ALLのように順番がありNU...
-
データベースの選定について 要...
-
型 varchar から型 numeric へ...
-
VBAかSQL?
-
今年亡くなった有名人を一発で...
-
データベースの最適化をマクロ...
-
HPを書き換えたい
-
キャッシュとバッファの違いは?
-
データベース3000が終わり、新...
-
LVMでHDDが壊れた時の対応
-
音楽アルバムのデータベース作成法
-
FDの初期化
-
macのデータベースソフト探して...
-
オラクルのLONG RAW型のテーブ...
-
初心者です。Accessを使って、...
-
データベースの使用例とその技術
-
access2019をダウンロードして...
-
Googleの衛星写真はいつ掲載さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FindFirst複数条件
-
希望の位置へフィールドを追加...
-
[ACCESS/VBA]動的にSQL文を...
-
エクセルからアクセスにADO...
-
列名が無効です
-
データベースの変換
-
Access 余分な件数分データ削除...
-
Access2000のVBAでコンパイルエ...
-
パススルークエリの使い方について
-
多値従属
-
Microsoft Accessパスワード忘...
-
accessのvbaでの実行時エラーに...
-
sqlite3の動作が?xamppでは問...
-
Berkeley DB 1.85 -> GNU dbm ...
-
コンピュータ用語、データベー...
-
型 varchar から型 numeric へ...
-
データベースの最適化をマクロ...
-
汎用カード型のデータベースソ...
-
キャッシュとバッファの違いは?
-
リスト形式の表とデータベース...
おすすめ情報