MDBフォームを開く操作でエラーが発生する

このQ&Aのポイント
  • Access2003 SP3を使用している場合、別のMDBのフォームを開く操作でエラーが発生します。
  • 1回目は成功するが、2回目以降はOpenDatabaseの処理で「実行時エラー3045」が発生します。
  • GetObjectでオブジェクトを解放するにも関わらず、ファイルが既に使用されているというエラーが発生します。
回答を見る
  • ベストアンサー

別のMDBのフォームを開く操作をしているのですがエラーになってしまいま

別のMDBのフォームを開く操作をしているのですがエラーになってしまいます (Access2003 SP3を使用) Function keisan() Dim obj As Access.Application Dim db_name As String Dim tmpDB As Database Dim tabname As String Dim tdynaset as Recordset Dim KeisanKekka as Boolean ’MDBのフォームを開く db_name="c:\keisan.mde" Set obj = GetObject(db_name) obj.DoCmd.OpenForm "計算", acNormal, , , , acDialog obj.Application.Quit Set obj = Nothing '計算結果をもってくる Set tmpDB = OpenDatabase(db_name)'ここでエラー**** Set tdynaset = tmpDB.OpenRecordset("select 計算結果 from データ", dbOpenSnapshot, dbForwardOnly) KeisanKekka = Nz(tdynaset.Fields(0), False) tdynaset.Close Set tdynaset = Nothing tmpDB.Close Set tmpDB = Nothing End Function これで1回目は上手くできるのですが2回目からOpenDatabaseのところでエラーになってしまいます 「実行時エラー3045 c:\keisan.mdbは既に使用されているので、使用できませんでした」 GetObjectの解放はしているのになぜこのようなエラーがでてしまうのでしょうか・・・ 別のPCでもやってみたのですが同じエラーが起こりました どうかよろしくお願いします

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

コードを掲載してもいいのですが、以下に方法が あります。検討してみてください。 http://www.accessclub.jp/bbs6/0007/das1538.html

yosip_i
質問者

お礼

回答どうもありがとうございます。試してみます

関連するQ&A

  • エラー3011

    パス名もきちんと設定し、データもあっているのですが オブジェクトが存在しないか、名前、パス名が違うと エラーがでてしまいます。どこが違うのでしょうか? Dim db As String Dim db_Mdb As DAO.Database Dim rd_Mdb As DAO.Recordset Dim stSQL As String db = "C:\XXX\VB\kanri.mdb"   'パス名は、アドレスをコピー貼り付けしたので間違いないと思います) ”省略(データベースに接続)” stSQL = "select * from name where bango=0001;" Set rd_Mdb = db_Mdb.OpenRecordset(stSQL, dbOpenTable) お願いしますm(__)m

  • アクセスVBAです

    Sub test() Dim DB As Database Dim T As TableDef Dim myTable As String myTable = "Table1" Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs If T.Name = myTable Then DoCmd.DeleteObject acTable, myTable Exit For End If Next DB.Close Set DB = Nothing End Sub これを実行しようとすると Dim DB As Database の部分で コンパイルエラー プロジェクトではなく、ユーザ定義型を指定してください。 と言うエラーになります。 Dim DB As Objectにすればエラーにならずに進みますが 何が原因なのでしょうか?

  • 二つのMDBファイルの間のデータのやり取り

    おせわになります。みなさんの知恵を貸してください。 いかがシステム構成です。 A.mdb(テーブル:Work1) B.mdb(テーブル:Work2) A.mdbはカレントデータベースです。B.mdbはDSN=KANRIで アクセスしたいです。 現在Work1のデータをWork2に追加したいのですが、どのような方法が考えられますか? ちなみに以下のコードを書いてみました。 -------------------------------------------------- Dim cn1 As New ADODB.Connection, cn2 As New ADODB.Connection Dim rs1 As New ADODB.Recordset, rs2 As New ADODB.Connection Dim com As New ADODB.Command, mysql As String Set cn1 = CurrentProject.Connection cn2.ConnectionString = "provider=MSDASQL;DSN=KANRI" mysql = "insert into Work2 select * from Work1" com.activeconnection = cn2 com.commandtext = mysql com.Execute Set com = Nothing rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing cn1.Close: Set cn1 = Nothing cn2.Close: Set ch2 = Nothing -------------------------------------------------- Work1は見当たらないとエラーが出ました。 どなたか教えてください。 rs1.EoF Loop をまわしながら一行ずつ追加するしかないでしょうか?

  • SQLServerからMDBへのデータバックアップ

    SQLServer7.0からクライアントPCへMDB形式でデータバックアップを取ろうと考えており VBAを使って以下のPGを作成したのですがSQLServerのテーブルが参照できないらしく テーブルが見つかりませんとエラーが出てしまいます。 SQLServerのテーブル指定部分がいけないのは分かっているのですがどう記述すれば分かりません。 本来このようなレベルでは自分で調べなければいけないことは重々承知なのですが、 うちの会社には書籍がほとんど無いのです・・・。 下記の方法はネットで調べました。 DoCmd.CopyObject以外でももっ効率よくテーブルごと転送する方法はあるのでしょうか? お恥ずかしい話ですが、識者の方 ご教授よろしくお願い致します。 Dim db As DAO.database Dim DBname As String Dim DB_SQL As String DBname = "c:\temp\ZZZ.mdb" If Dir(DBname) <> "" Then Kill DBname End If Set db = CreateDatabase(DBname, dbLangJapanese) db.Close Set db = Nothing DB_SQL = "DRIVER={SQL Server};SERVER=XXX;DATABASE=XXX;UID=XXX;PWD=XXX" DoCmd.CopyObject DBname, , acTable, DB_SQL & ".テーブル名" Exit Sub

  • 拡張子が.mdbでないアクセスファイルを開くには?

    拡張子が.mdbでない以下のようなアクセスファイルOSAKA.sffを開くにはどのようにしたらよいですか? 現状、 Set db の行で 実行時エラー3343“データベースの形式認識できません”とエラーが出ます。 Private Sub Command5_Click() Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset 'デフォルトのワークスペースを定義する Set ws = DBEngine.Workspaces(0) 'データベースを開く Set db = ws.OpenDatabase("C:\Data\OSAKA\OSAKA.sff") End Sub

  • excelファイルをVBで取り込む

    下記のようなプログラムで、excelから表を取り込むのですが、シート名を指定しても、オブジェクトが見つかりませんとエラーが出ます。visualbasicの極意500から抜粋して使用しようとしました。わかる肩よろしくお願いいたします。 Private Sub Command1_Click() Dim DB As Database Dim strConnect As String Dim rst As Recordset strConnect = "Excel 8.0;DATABASE=C:\temp\売上実績.xls" Set DB = OpenDatabase("C:\temp\売上実績.xls", False, False, strConnect) 'テーブル名を指定 Set rst = DB.OpenRecordset("売上$", dbOpenTable) Do While Not rst.EOF Debug.Print rst!売上高 rst.MoveNext Loop rst.Close DB.Close Set DB = Nothing Set rst = Nothing End Sub

  • mdbがとじれない

    VB6で開発をしています。 DB変数A = OpenDatabase(【mdb名】) Set QUERY変数B = DB変数A.CreateQueryDef("") QUERY変数B.SQL = SQL文 QUERY変数B.Execute (中略) Set レコード変数C = DB変数A.OpenRecordset(SQL文2) (中略) Set DB変数A = Nothing といった処理を行っています。 この処理を繰り返すのは問題ないのですが、 この処理で使用している【mdb名】はレコードロックされたままになってしまいます。 どのように修正したらよいのでしょう?

  • Access VBA 添付型フィールド

    Access VBAで添付型フィールドからファイル名を取りだしたいのですが、どのようにすればいいでしょうか? Private Sub Sample() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim SQL As String   Set DB = CurrentDb SQL_1 = "SELECT * FROM ボランティア情報 ORDER BY 分野 & 団体名読み;" Set RS = DB.OpenRecordset(SQL_1, dbOpenDynaset) With RS   Do While Not .EOF   MsgBox (!写真.FileName)  ←ここでエラーが出ます。 .   MoveNext   Loop End With RS.Close Set RS = Nothing Set MDB = Nothing End Sub

  • 他のmdbファイルのform,macro,reportsをテキスト化し

    他のmdbファイルのform,macro,reportsをテキスト化したい。 asSaveTextを使って、mdbファイルのみが格納されている"C:\testA"フォルダにある全てのmdbファイルに対して、macro,form,reports等のvbeのソースコードを"C:\testB"にテキストファイルとして自動出力してくれるツールを作成したいのですが、エラーで止まってしまいます。何が悪いのかご教授下さいませんでしょうか。 下記のマクロがあるのは、"C:\testA""C:\testB"でもない場所にある適当なmdbファイルの標準モジュールです。 以下は、サンプルソースです。よろしくお願いしますm(--)m Option Compare Database Public Sub Output() Dim db As Database Dim souce As Container Dim InPutPass As String Dim OutPutPass As String Dim FileName As String Dim FilePass As String Dim objAccess Const cnsDIR = "\*.*" InPutPass = "C:\testA" OutPutPass = "C:\testB" FileName = Dir(InPutPass & cnsDIR, vbNormal) Do While FileName <> "" '開くファイルのパスを設定 FilePass = InPutPass & "\" & FileName 'Accessオブジェクトを作成します Set appAccess = CreateObject("Access.Application") 'MDBファイルを開きます appAccess.OpenCurrentDatabase (FilePass) 'macroをテキスト化する Set souce = appAccess.Containers("Scripts") For Each d In souce.Documents If Left(d.Name, 1) <> "~" Then Application.SaveAsText acMacro, d.Name, OutPutPass & "\Macro_" & d.Name & ".txt" End If Next d 'Formをテキスト化する Set souce = db.Containers("Forms") For Each d In souce.Documents If Left(d.Name, 1) <> "~" Then Application.SaveAsText acForm, d.Name, OutPutPass & "\Form_" & d.Name & ".txt" End If Next d 'Reportをテキスト化する Set souce = db.Containers("Reports") For Each d In souce.Documents If Left(d.Name, 1) <> "~" Then Application.SaveAsText acReport, d.Name, OutPutPass & "\Reports_" & d.Name & ".txt" End If Next d 'MDBファイルを閉じます appAccess.CloseCurrentDatabase 'Accessオブジェクトの破棄 Set appAccess = Nothing '次のファイル名を取得 FileName = Dir() Loop End Sub

  • ACCESS97で作成したmdbファイルに書き込む為の記述

     ADOを使用してExcelで作成したデータをACCESS97で作成したmdbファイルに書き込む処理を行いたいと思います。 書籍を見ながらコードを記述しているのですが、1,2,の項目については問題なく処理ができるのですが、最後のmdbファイルへの書き込み処理がどうしてもうまくいきません。 主に出力されるエラーは「現在のプロバイダはIndex機能に必要なインターフェイスをサポートしていません。」というものです。いろいろ試行錯誤したのですが解決できませんでした。 やはりACCESS97で作成したmdbファイルだからダメなのでしょうか? 原因と対処方法を教えていただければ幸いです。よろしくお願いします。以下はmdbファイルへの書き込みのサンプルコードです。 Dim myFile As String Dim myTbl As String Dim myRng As Range Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim i As Integer myFile = ThisWorkbook.Path & "\sampleDB.mdb" myTbl = "社員" Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" 'Access(Jet)用のOLE DBプロバイダを使用 .Open myFile End With myRS.Open myTbl, myCon, adOpenStatic, adLockPessimistic, adCmdTableDirect myRS.Index = "社員ID" For i = 2 To myRng.Rows.Count myRS.Seek myRng(i, 1).Value If myRS.EOF Then myRS.AddNew For j = 1 To myRng.Columns.Count myRS.Fields(myRng(1, j).Value).Value = myRng(i, j).Value Next Next myRS.Update myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing