ラベル Access の投稿を表示しています。 すべての投稿を表示
ラベル Access の投稿を表示しています。 すべての投稿を表示

アプリケーションで認識できないデータベースであるか、またはファイルが破損しています。



アクセスでの実行時エラー3049


データベース '' を開くことができません。アプリケーションで認識できないデータベースであるか、またはファイルが破損しています。

原因
アクセスデータベースのサイズが2GBを超えたときに出るエラーみたいです。



自分の場合はdaoでデータアップの新規追加や更新のテストをしているときに発生しました。

対策

「データベースツール」→「データベースの最適化/修復」でファイルサイズが最適かされて小さくなることが多いのでこれで回避するのが通常っぽいです。
これでダメならデータベース分割するしかないのかもしれないです。

パスは正しくありません。アクセスエラー




エラーメッセージ
「パス'(パス.ファイル名)'は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。」

エラー内容
アクセス(MS ACCESS)でリンクテーブルの接続先がない場合に発生するエラーです。
テーブルの中でリンクとして扱っているテーブルのリンク先がなかったり、接続が切れているというメッセージです。


対応
バージョンによってメニューの場所は変わっていますが2013の場合は

[外部データ]→[リンクテーブルマネージャー]で

しかるべきリンク先に再設定すればエラーが解消されるはずです。

DAO使用時の「メモリ不足です」



DAOを使ってエクセルからアクセスにデータを入れようとした時に


「実行時エラー '3035';
メモリ不足です」


というエラーが出てしまいました。



対象法
アクセス自体は開いていなかったのでエクセル本体を再起動するとエラーメッセージは出ませんでした。

ExcelからAccessデータにADOを使って接続する



ExcelVBAでADO接続を使用してMSAccessのデータを取得する方法です。
ADOはActiveX Data Objectsの略でOLEDB(Object Linking and Embedding, Database)プロバイダを通してデータを取得する APIです。

ADOを使用するには参照設定(VBEの「ツール」)で Microsoft ActiveX Data Objects 6.1 Library にチェックを入れます。

バージョンによる違いはよくわかりません。とりあえず最新のにチェック入れておけばいいと思います。


サンプルコードでは企業コードから業種と市場をエクセルに出力してみます。
サンプルファイル名
・Accessファイル:「ListedCompany.accdb」もしくは「ListedCompany.mdb」
・Access内テーブル:「T_LC」
・出力先エクセルファイル:「sample52.xlsx」(オープン済)

テーブルイメージ

サンプルコード
Sub testAdo()
Dim i As Long
' ※注)参照設定
'出力先エクセルファイル
Dim ws As Worksheet
    
 Set ws = Workbooks("sample52.xlsx").Worksheets(1)

 '接続するAccessファイル名
  Dim dbAcc As Variant
   dbAcc = "D:\test\ListedCompany.accdb"
    
   '旧ファイル形式
   'dbAcc = "D:\test\ListedCompany.mdb"
    
 '接続する
  Dim dbConnect As New ADODB.Connection
    dbConnect.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & dbAcc & ""
 dbConnect.Open
    
'条件に合うレコードを取得する
  Dim dbRecordset As New ADODB.Recordset
  Dim dbTarget As ADODB.Fields
  Dim strSQL As String

 '===================
  For i = 2 To 11
    '企業コードでの条件検索
    strSQL = "SELECT * FROM T_LC WHERE 企業コード = " & ws.Cells(i, 1) & ""
     dbRecordset.Open strSQL, dbConnect, adOpenKeyset, adLockReadOnly
    
     Set dbTarget = dbRecordset.Fields
      ws.Cells(i, 2) = dbTarget("業種")
      ws.Cells(i, 3) = dbTarget("市場")
    
      '取得したレコードを閉じる
      dbRecordset.Close
  Next i

 '接続を閉じる
 dbConnect.Close

End Sub


結果イメージ



※上場企業一覧のAccessファイルはこちらのCSVファイルを頂いて作成しました