OpenRecordSet 他について

このQ&Aのポイント
  • AccessプロジェクトでOpenRecordSetを使用する際に「実行時エラー'91'」が発生する問題があります。
  • このエラーはオブジェクト変数またはWithブロック変数が設定されていないことを示しています。
  • Jetワークスペースでは使用できますが、Accessプロジェクトでは上手くいかない可能性があります。
回答を見る
  • ベストアンサー

OpenRecordSet  他について

Accessプロジェクトを使用しています。 Dim strSQL As String Dim DBS As Database Dim RST As DAO.Recordset Set DBS = CurrentDb Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset,dbReadOnly) 「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」 と出てきます。デバッグを押すと、 上記最終行でSTOPします。 次のように変更しても同じでした。 Set RST = DBS.OpenRecordset("TESTDATA") 又は Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset) ヘルプ等を見ると、Jetワークスペースでのみ 使用可と出てきます。 ADO,DAO,OpenRecordset等が理解しきれていないように思うのですが、 Access97(DAO?)では 何も出てこなかった上記のような内容、 何故Accessプロジェクトでは 上手くいかないのでしょうか?

  • cdma
  • お礼率36% (91/247)

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 VBAの画面を開いて、ツールの参照設定を見てごらん。Microsoft ActiveX Data Objects x.x Libraryと、Microsoft DAO x.x Objects Libraryの両方にチェックが入っているんじゃないかなぁ・・・・。  もしそうなら、恐らくActiveX Data Objectsの方が上になっているはずだ。DAOの方が上にくるようにしてあげよう。これで一応は解決する・・・・はず。  DAOとADOは、ものすごく簡単(そして不正確)に言ってしまうと ・DAOはMDB内部を操作するもの ・ADOは不特定多数のDBを操作するもので、Jet DBを指定すればMDB内部も操作できるもの となる。  Access2000以上はデフォルトでADOを使う設定になっているのだが、例えばAccess97からインポートしたようなMDBを使うと、そちらはDAOを使う設定になっていてバッティングが起こる事もある。  参照設定でDAOだけにチェックを入れてやってみてごらん。  もし最初からそうなっていたら私にはお手上げだ。

関連するQ&A

  • テーブルのリンク(ACCESS)

    ACCESS2003で下記の記述で「実行時エラー ’3219’ 無効な処理です。」というエラーメッセージがでます。 外部mdbでテーブルをリンクさせるとこのエラーがでます。同じmdbファイルにデータテーブルを置くと問題なく処理できます。 参照設定も過去ログを見てチェックしています。 Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("テーブル名", dbOpenTable) ACCESS97では何の問題もなかったのですが, 2003ではうまくいきません。 どうかよろしくお願いします。

  • アクセス2000VBA DAOをADOに書き換えてください

    アクセス2000VBA DAOをADOに書き換えてください 下記プログラムをADOに書き換えてください。(DAT1、DAT2はモジュールにて定義してあります) Option Compare Database Dim DBS As Database Dim QDF As QueryDef Dim RST As DAO.Recordset Dim COUNT1 Private Sub Form_Load() On Error Resume Next DAT2 = [Forms]![伝票]![HAKKOU1] Set DBS = CurrentDb Set QDF = DBS.QueryDefs("発行") With QDF .Parameters("DAT1") = DAT2 ’もしかしたら DAT2 ではエラーがでるかもしれません。 Set RST = .OpenRecordset() ’正しい記述を教えてください .Close End With With RST COUNT1 = !指示書 .Close End With

  • ACCESS2000VBAでエラー「型が一致しません」

    ACCESS2000で、フォーム上にボタンを作り、そのボタンをクリック時に 以下のイベント プロシージャを実行させています。 Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("採番_相談者") Dim Number rst.MoveFirst Number = rst!相談者番号 Number = Number + 1 Me.相談者NO = Number '相談者NOはフォーム上のテキストボックスです。 で上記 Set rst = dbs.OpenRecordset("採番_相談者") の所で、「実行時エラー 13 型が一致しません」とエラーになります。 テーブル:採番_相談者は、オートナンバー型のIDフィールドと相談者番号という7桁のテキスト型で ”1000001”が入っています。(ちなみに、数値型に変えても同じエラーでした。) 詳しい方教えてください。お願いします。

  • accessからsqlserverにアップサイジングしましたが,テーブ

    accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • ACCESS クエリーから件数取得

    下記のような記述でクエリーより件数を取得したいのですがうまくいきません。 rstBufの指定が悪いのだとは思い、調べてはいるのですがうまくいかない状態です。 どなたかご助言をお願い致します。 Dim rstBuf As DAO.Recordset Dim qryBuf As DAO.QueryDef strSQL=select xx from xx Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL) Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset) If rstBuf.EOF = False Then rstBuf.MoveLast count = rstBuf.RecordCount End If rstBuf.Close Set rstBuf = Nothing

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • 用語を変数に入れて検索するには?MS Access

    こんにには。 MS Accessで、ある用語(ここではAA111とします)を検索しようとして下記にようにしました。 Dim daoDB As DAO.Database Dim daoRS As DAO.Recordset DBnm = Me.KENSAKU.Value KI = "AA111" Set daoDB = CurrentDb Set daoRS = daoDB.OpenRecordset(DBnm, dbOpenDynaset) daoRS.FindNext "ID = KI" するとエラーとなりました。 daoRS.FindNext "ID = KI" を daoRS.FindNext "ID = 'AA111'" とするとOKでした。変数を使用することは出来ないのでしょうか? 宜しくお願いいたします。

  • Access2007 データ型エラーについて

    お世話になっております。 下記のVBAでコードを数値型からテキスト型に変更したところ、「抽出条件でデータ型が一致しません。」というエラーが出ました。 デバッグをクリックすると、dbs.Execute strSQLの部分が黄色に反転しています。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub 在庫差引_Click() Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me!サブフォーム.Form.RecordsetClone With rst .MoveFirst Do Until .EOF strSQL = "UPDATE マスター " & _ "SET 在庫数 = NZ(在庫数) - " & Nz(!数量, 0) & " " & _ "WHERE コード = " & !コード dbs.Execute strSQL .MoveNext Loop .Close End With End Sub

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub