none
.NET Framework4.6 環境におけるDAOを用いたMDB操作 RRS feed

  • 質問

  • お世話になっております。

    以下の環境にて、MDBのリンクテーブルをODBCデータソース経由のテーブルで更新するアプリをメンテナンスしております。

    ・VisualStudio2013

    ・.Net Framework4.5.1

    「.Net Framework4.5.1」のサポート終了に伴い、「.Net Framework4.6.1」をターゲットにし、

    稼働を確認しているのですが、以下のメソッドの「db.TableDefs.Append(tdTemp)」の箇所にて、

    ループの途中で「vbhost.exeは動作を停止しました」というメッセージが表示され、アプリが落ちてしまいます。

    同じ端末(Win8.1/32bit)において、「.Net Framework4.5.1」で起動した場合は問題なく、

    「.Net Framework4.6.1」で起動した場合に問題が発生しており、

    どのような解決方法があるのか、現状全く分からない状態となっております。

    何か解決につながる情報をお持ちの方がいらっしゃれば、教えて頂けないでしょうか。

    宜しくお願い致します。

    *********************************************************

    Public Function AttachTable(ByRef db As DAO.Database, ByRef tb As DAO.TableDef, ByRef sDSN As String, ByRef sTBOWNER As String, ByRef sUID As String, ByRef sPWD As String) As Boolean
    ' 引数      : データベース、テーブル、ODBC_DSN、テーブルオーナー、ODBCテーブル
    ' 目的      : 指定されたテーブルを接続先のODBCデータ名でアッタチする
    '             エラーが発生した場合、メッセージを表示する。
    ' 戻り値    : True : 正常
    '             False: 異常
    On Error GoTo AttachTable_Err

    Dim tdTemp As DAO.TableDef
    Dim sTBName As String
    Dim iPos As Short
    Dim sDBName As String
    Dim sConnect As String
    Dim sTBL As String
    Dim iCreateTmp As Short

    AttachTable = True
    iCreateTmp = False

            sConnect = ""
            sDBName = db.Name
    sTBName = tb.Name
    sTBL = tb.SourceTableName
    iPos = InStr(sTBL, ".")
    If iPos = 0 Then
    iPos = InStr(sTBL, "/")
    If iPos <> 0 Then
    sTBL = Mid(sTBL, iPos + 1)
    End If
    Else
    sTBL = Mid(sTBL, iPos + 1)
    End If
    'テーブルをアタッチする
    tdTemp = db.CreateTableDef(sTBName & "_$$$")
    tdTemp.SourceTableName = sTBOWNER & "." & sTBL
    sConnect = sConnect & "UID=" & sUID & ";"
    sConnect = sConnect & "PWD=" & sPWD & ";"
    tdTemp.Connect = "ODBC;DSN=" & sDSN & ";" & sConnect
    db.TableDefs.Append(tdTemp)
    iCreateTmp = True
    '元のテーブル削除
    db.TableDefs.Delete(sTBName)
    '名称変更
    tdTemp.Name = sTBName

    Exit Function

    AttachTable_Err:
    Call gErrMsg("", "ODBCテーブルセットアップ")
    If iCreateTmp Then
    db.TableDefs.Delete(sTBName & "_$$$")
    End If
    AttachTable = False
    Exit Function
    End Function

    *********************************************************

    2016年3月23日 9:09