1

日付/時刻フィールドを持つ Access テーブルがあります。日付/時刻フィールドと他の 3 つのテキスト フィールドから、別のデータベースの一致するキー フィールドと同じ形式の複合キー フィールドを作成したいと考えていました。

そこで、3 つのテキスト フィールドを連結し、モジュールにユーザー定義関数を記述して、日付フィールドを「YYYYMMDD」形式の文字列として出力しました。

Public Function YYYYMMDD(dteDate As Date) As String
    YYYYMMDD = Format(dteDate, "YYYYMMDD")
End Function

その後、Access でクエリを正常に実行でき、すべて正常に動作します。

しかし、Excel で DAO コードをセットアップし、Access 内で正常に動作するクエリを実行しようとすると...

db.Execute "qryMake_tblValsDailyAccount"

...Excel で「式に定義されていない関数があります。(エラー 3085)」というエラーが表示されます。

私にとって、これは Excel および/または Access のバグです。(Excel) クライアントは、(Access) サーバーが分離しているときに通常完全に行われる内部計算について何も知る必要がないからです。

Excel はクエリ定義 (パラメーターのない名前) をサーバーに送信し、サーバーに作業を任せてから回答を受け取る必要があります。サーバー内部の機能に関与する必要があるのはなぜですか?

誰もこれを回避する方法を知っていますか?

4

2 に答える 2

4

AccessはJetを使用し、AccessとJetの組み合わせはVBA機能を理解します。DAOは、VBA機能を理解しない一般的なデータアクセス層です。

DAOを使用する場合、Accessを自動化するのではなく、単にそのブリッジを使用してデータにアクセスします。

Accessの一部のバージョンは内部でDAOを使用してJetと通信しますが、VBAを理解する機能はDAOではなくAccessにプログラムされています。

私はあなたの回避策があなたができる最善だと思います。

于 2010-05-13T21:10:02.017 に答える
1

わかりました。VBA 関数を、主キー ValsDaily_ID を介して元のデータ テーブルに結合するクエリに置き換えることで、修正をハッキングしました。

SELECT tblValsDaily.ValsDaily_ID, 
Format(Year(tblValsDaily.BusinessDate))+
Format(Month(tblValsDaily.BusinessDate),"00")+
Format(Day(tblValsDaily.BusinessDate),"00") AS YYYYMMDD
FROM tblValsDaily;

しかし、これは本当に不自由です.なぜVBAバージョンが機能しないのかはまだわかりません.

于 2010-05-13T17:04:13.173 に答える