Microsoft Access 掲示板

Access64bit版だと、帳票フォームのテキストボックスに#Name?が表示されます / 9

12 コメント
views
4 フォロー
9
くろ 2021/09/03 (金) 18:32:50

すみません、私の勘違いがありましたので、訂正と報告です。

データはSQLServer上にあり、リンクテーブルからADOdbで読んでいます。

これはリンクテーブルではなく、SQL Server上のテーブルから読んでいました。
rsがADODBで接続されているので当然の事でした。

同じくAccess上にリンクテーブルも張られていましたが、こちらはクエリを使用するためで
試しにリンクテーブルをすべて削除しても動作変わらずでした。(リンク先が無いエラーにはなりませんでした。)

ODBCのドライバですが、[ODBC Driver 17 for SQL Server]をインストールし、ADODBの
接続に"Provider=MSOLEDBSQL";としてもダメでした。(ちなみにSQLOLEDBも試しましたが同様でした。)
また、ODBCデータソースアドミニストレータ(64ビット)において、インストールした
ODBC Driverを使ってシステムDSNを構成し、このDSNを使って接続した場合も結果同じでした。

mayu様より、リンクテーブルを使ってDAOで読めば良いとのアドバイスをいただき試したところ、
この場合は正しく動作しました!ありがとうございます!!

DAO接続では正しく動作したのでそうすればよいのですが、修正箇所が多く…またデータ量が
多いうえ多人数で使用するシステムなので出来ればADO接続の方が良いのかなと考えています。

64bitAccessへの移行はすぐに絶対対応しないといけないと言うわけでもないため、引き続き
良い解法が無いか探しています。
引き続き良いアイデアがあればアドバイスいただけますと幸いです。

以下、試行中のイケた接続とイケてない接続方法です。

' イケてないADO 接続(テキストボックスに#Name?が表示される)
Private Sub cmdADODB_Click()
    Dim rs As New ADODB.Recordset
    Dim strSQL As String

    strSQL = "SELECT * FROM SQLServer上のテーブル WHERE DATA1 LIKE '%みかん%'"
    rs.Open strSQL, cn, adOpenStatic, adLockOptimistic
    ' cn はADODB.Connection としてSQLServerに接続しています。

    Set Me.Recordset = rs

    If rs.EOF = False And rs.BOF = False Then
        Me.txtData1.ControlSource = rs![DATA1].Name
        Me.txtData2.ControlSource = rs![DATA2].Name
    End If

    Set rs = Nothing

End Sub

' イケたDAO接続(でも修正箇所多く、処理速度に不安あり)
Private Sub cmdDAO_Click()
    Dim rs As DAO.Recordset
    Dim strSQL As String

    Set db = CurrentDB
    ' dbはDAO.Databaseとして宣言されています。

    strSQL = "SELECT * FROM リンクテーブル WHERE DATA1 LIKE'%いちご%'"
    SET rs = db.OpenRecordset(strSQL)

  Set Me.Recordset = rs
    ' これが無いと#Name? になりました。

    If rs.EOF = False And rs.BOF = False Then
        Me.txtData1.ControlSource = rs![DATA1].Name
        Me.txtData2.ControlSource = rs![DATA2].Name
    End If

    Set rs = Nothing
    Set db = Nothing

End Sub
通報 ...