• ベストアンサー

VBでAccessのMDBを参照する環境について

VBからAccessのMDBを操作するアプリケーションを作り、Visual Studio Installerでインストーラを作成しました。 そのパッケージをWin98SEをインストールしたてのマシンにMDAC 2.7をインストールし、作ったパッケージからアプリケーションをインストールしたところ、実行時に 実行時エラー '429': ActiveXコンポーネントはオブジェクトを作成できません。 とエラーが出ます。 試しにテーブルを開き、1件目のデータを読み取るだけの簡単なプログラムを作り、対象のマシンで動作させてみても結果は同じです。 MDACのインストールだけではだめなんでしょうか。 作成したアプリケーションは配布したいので、コントロールパネルを変更するなどの手間はかけたくないのです。 アプリケーションのインストールだけで環境ができるのが理想ですが、何か言い方法はないでしょうか。 ちなみにためしで作った簡単なプログラムのコードを記述します。 ---------------------------- Private Sub Form_Load() Dim mydb As DAO.Database Dim rs As Recordset Set mydb = OpenDatabase(".\tellist.mdb") Set rs = mydb.OpenRecordset("SELECT Count_TBL.* FROM Count_TBL") Text1.Text = rs!telno rs.Close mydb.Close End Sub ---------------------------- よろしくお願いします。

  • kmor
  • お礼率90% (255/283)

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

ドライバのせいかな? もしAccessをその98マシンにインストールしてできたのなら、ドライバのせいだと思います。(もちろん開発環境と同じバージョンのAccessです) 今までADO2.6を使用して、Accessの入っていないPCのMDBをやったことはあります。 DAOではAccessの入っていないPCは、私は未経験です。 ですので、全て推測です。 参考URLより抜粋 概要 MDAC 2.7 SP1 の再配布可能インストーラーは、Microsoft Windows XP SP1 と同じ Data Access コア コンポーネントをインストールします。このリリースには、Microsoft Jet、Microsoft Jet OLE DB Provider、Desktop Database Drivers ODBC Driver、Visual FoxPro ODBC Driver は含まれていません。

参考URL:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9ad000f2-cae7-493d-b0f3-ae36c570ade8&DisplayLang=ja
kmor
質問者

お礼

ありがとうございます。 インストーラの設定でなんとかなりました。

その他の回答 (2)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

なるほど、、 GUIDをレジストリに書いてなかったのですね。。。 面倒でもこまめにGUIDを書いていかないと、毎回手作業でのレジストリ登録が必要になります。

kmor
質問者

お礼

お礼が遅くなり、申し訳ありませんでした。 何とかできました。ありがとうございました。

noname#4564
noname#4564
回答No.1

インストーラ作ったことがないんで、よくわかりませんが、再配布パッケージにDAOを含めてみてはどうでしょうか? ファイルがあるのに動かない、ということなら、 RegSvr32 "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll" でどうでしょう?(^^; (パスは、実際の環境に即して読み替えてください)

kmor
質問者

お礼

ありがとうございます。 インストーラにはvb5db.dllとdao360.dllは登録されているのですが、ターゲットマシンにはインストールされていないようです。 コピーしてRegSvr32を実行するとできました。 なぜインストールされないのか不明です。

関連するQ&A

  • MDBのアクセス権

    VB6で、MDBファイルを操作しています。 Set myws = DBEngine.Workspaces(0) Set mydb = myws.OpenDataBase("xxx.MDB")で MDBを開いています。 インストールがadministratorで行うとなんら問題が無いのですが、それ以外のユーザーの権限でアクセスするとエラーになります。EXEは実行しているようです。 1:そのユーザーのMyDocumentにインストール 2:ProguramFilesにそのユーザーの権限を与える。 3:他のユーザーで実行 のいずれも動作しますが、先方の要求はあくまでもインストーラでなんら操作せずとも実行できるとの事です。もしくはバッチファイルを組む。 というものです。 インストーラは、VisualStudioInstallerを用いてます。 MDBファイルさえアクセスできれば良いのですが、adminiのパスワードなども全てのマシンで異なります。 良いアイデアがあれば、教えてください。よろしくお願いいたします。

  • accessのMDBをパッケージして配布

    office2000developer で accessで作成したMDB を配布したいのですが、うまくいきません。パッケージして配布のものも出来上がります。それをCDRに焼いて、ACCESSの入ってないPCにインストールして、出来上がったMDBを開こうとするのですが、うまくいきません。ランタイム環境でaccessを作動するにはどうしたらよいのでしょうか? インストール先とかの問題なのでしょうか?

  • VB6 ADOの参照設定の意味、

    VB6.0にて、ADOを使用したアプリケーションを作成しています。 参照設定にてADO2.7を指定しています。 コンパイルしたアプリケーションを、 MDAC2.5が入っている環境で、動かしてみたら動きました。 インストールされているMDACの確認には、Microsoftのツールを使用しました。 下記コードを記述したモジュールを作成し、 Dim adoCon As ADODB.Connection Set adoCon = New ADODB.Connection MsgBox adoCon.version その環境にてバージョンを確認したら 「2.5」と表示されました。 ちなみに、MDAC2.7がインストールされている環境では、「2.7」と表示されました。 ここで質問があるのですが、 参照設定でADO2.7を指定した場合、 動作先の環境に入っている最新のADOのバージョンが使われると考えて良いのでしょうか? たとえば、動作先の環境にADO2.1が入っていたら、参照設定のバージョンに関わらず、それで動作する・・・ が、バージョンに依存するメソッドを実行するとエラーになってしまうとか。 Createobjectで生成するのと、かわらないのでしょうか? よろしくお願いいたします。

  • VB2010 DataGridからmdb更新

    以下のプログラムであるフォーム上のDataGridViewにmdbファイルから 読み込んだ値をDataGrid上で編集して更新ボタン(Button_UpD)クリックで mdbの中身を更新させたいです。 メモリ上(?)では書き換わるのですがmdbの更新にはなっていません。 検索したところBuilderを使うようなやり方も書いていてためしましたが うまくいきません。 ご教授下さい。   '更新ボタンをクリック Private Sub Button_UpD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_UpD.Click Dim Answer As Long Answer = MsgBox("更新を保存しますか?", vbYesNoCancel, "保存確認") Select Answer Case vbYes Dim ConectString As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath Dim Cn As New OleDbConnection(ConectString) Dim SQLCm As OleDbCommand = Cn.CreateCommand Adapter = New OleDbDataAdapter(SQLCm) Dim dRow As DataRow Dim dTable As DataTable Dim i As Integer dTable = CType(DataGridView2.DataSource, DataTable) For Each dRow In dTable.Rows '変更された場合(Modified) If dRow.RowState = DataRowState.Modified Then '一度に編集状態をコミット dRow.AcceptChanges() End If Next For i = 0 To dTable.Rows.Count - 1 Debug.WriteLine(i.ToString() & ControlChars.Tab _ & dTable.Rows(i).RowState.ToString()) Next Setting.Close() Setting.Show() Me.Close() End Select End Sub

  • Driver={Microsoft Access

    アクセス2007です。 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFile As String MyFile = "C:\test.accdb" cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\" & MyFile & ";" rs.Open "SELECT * FROM テーブル1", cn MsgBox "テーブルに接続出来ました。" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ********************************************************* を実行しても実行時エラーになります。 cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\" & MyFile & ";" を cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFile に変えればうまくいきますが なぜ、"Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\"じゃダメなのでしょうか? 教えてくださいませ。

  • Access VBA クエリパラメーターについて

    Access VBA についてご質問させていただきます。 AccessVBAにてフォームを起動したときに、ユーザーで作成したクエリにおいて各クエリのデータ件数を取得するプログラムを作成いたしました。 '各クエリの件数をカウントする処理 Public Sub Data_Count() 'カウント用変数を宣言して、初期化する Dim i, j As Integer: i = 0: j = 11: b = 0: Dim rs As Recordset: Dim str(1) As String Dim Fname As Form: Set Fname = Forms!F99_メイン Dim mydb As Database: Set mydb = CurrentDb 'クエリ名・エクセル名用配列を初期化する Erase QName: Erase EName: Erase Count 'クエリの数だけ繰り返す For Each myqer In mydb.QueryDefs If Left(myqer.name, 1) = "Q" And Left(myqer.name, 3) <> "Q0_" Then 'クエリ名用変数の要素数を変更し、クエリ名を格納する ReDim Preserve QName(i): QName(i) = myqer.name 'エクセル用変数の要素数を変更し、エクセルファイル名を格納する ReDim Preserve EName(i): EName(i) = QName(i) & ".xlsx" '件数用配列の要素数を変更する ReDim Preserve Count(i) 'クエリを開く Set rs = CurrentDb.OpenRecordset(QName(i)) 'クエリのレコードが0件の場合 If rs.EOF Then 'クエリの件数を保存する Count(i) = 0 'クエリのレコードが1件以上の場合 Else 'クエリの最終行に移動してクエリ件数を保存する rs.MoveLast: Count(i) = rs.RecordCount End If End If rs.Close i = i + 1 End If Next End Sub 上記のコードを実行してみたところ、ユーザーで作成したクエリを開く際に、 実行時エラー'3061':パラメーターが少なすぎます。1を指定してください。というエラーが発生してしまいました。 どのように修正すればよろしいでしょうか?

  • access 初心者です。

    Private Sub 患者番号_AfterUpdate() Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Set Cn = CurrentProject.Connection Set Rs = New ADODB.Recordset Rs.Open "[tbl個人情報]", Cn, adOpenKeyset, adLockOptimistic Rs.Find "[患者番号] = " & Me![患者番号] If Rs.EOF Then MsgBox "レコードが見つかりません。ID=" & Me![患者番号] Else Me![性] = Rs![性] End If Rs.Close: Set Rs = Nothing Cn.Close: Set Cn = Nothing End Sub 上記の式を見よう見まねで作成したのですが、エラーが出てしまします。          Me![性] = Rs![性]  が見つかりません どのように解釈すれば良いのでしょうか? ちなみに、サブフォームに入れているテキストボックスの「[性]を 同じサブフォーム内の[患者番号]から検索がしたいです。 初歩的なことで申し訳ございません。よろしくお願いします。

  • 二つの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 をまわしながら一行ずつ追加するしかないでしょうか?

  • VBからAccessへの接続でエラー

    OS:Win2K SP4 SOFT:VB6 ACCESS2K Dim strDatabase As String Dim cn As Object Dim rs As Object Sub xx() Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") strDatabase = "C:\出荷配送システム\mftbc.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDatabase ・       ・       ・ End Sub 上記ソースの「cn.OPEN」メソッドでエラーが発生します。 エラー内容は 'OPEN'メソッドは失敗しました。'_Connection'オブジェクト データベースに接続できません。 です。 何が原因なんでしょうか?? mdbのあるPath,File名は合っています。

  • 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

専門家に質問してみよう