2

MonthName 関数を使用する MS Access で SQL クエリを作成しました。アクセスでは問題なく動作します。データベースのクエリに頻繁に使用する Excel モジュールに正確な SQL ステートメントをコピーしました。クエリを実行すると、MonthName が未定義の関数名であることが Excel に通知され続けます。MonthName 部分を削除すると、クエリは正常に実行されます。

参照か何かが不足しているようです... 現在、Microsoft ActiveX Data Objects Library 6.0 を参照しています。誰かが私を正しい方向に向けることができますか? ありがとう

strSQL = "SELECT DISTINCT Customers.CustomerName, Employees.EmployeeName, [Policy data revised].EXDT, MonthName(Month([EXDT])) AS expMonth 
          FROM (([Service Team table] 
          INNER JOIN Customers 
          ON [Service Team table].CustID = Customers.CustID) 
          INNER JOIN Employees 
          ON [Service Team table].EmployeeID = Employees.EmployeeID) 
          INNER JOIN [Policy data revised] 
          ON Customers.CustID = [Policy data revised].CustID 
          WHERE ((([Service Team table].RoleExtension)='2.  Underwriting Assistant') 
          AND (([Policy data revised].EXDT) 
             BETWEEN #" & minExpDt & "# AND #" & maxExpDt & "#)) 
          ORDER BY [Policy data revised].EXDT ASC;"
4

2 に答える 2

4

このMonthName()関数は、Access アプリケーション セッション内で実行されるクエリでのみ使用できます。Microsoft Jet Expression Service サンドボックス モードについての箇条書き「プロパティ シートから呼び出された場合、または SQL ステートメントで使用された場合、次の VBA 関数は機能しません」を参照してください。Access アプリケーション セッション内で、db エンジンは式サービスを使用してそのサンドボックス化された関数を使用できます。

は使えないので、代わりにMonthNameこの式を試してください。Format

Format([EXDT], 'mmmm') AS expMonth
于 2013-05-23T17:11:14.133 に答える
1

奇妙なことに、Excel 2010 (64 ビット) で次のコードを試してみたところ、うまくいきました。

Sub foo()
'' Reference: "Microsoft ActiveX Data Objects 6.0 Library"
Dim con As ADODB.Connection, rst As ADODB.Recordset
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Gord\Desktop\Database1.accdb;"
Set rst = New ADODB.Recordset
rst.Open "SELECT MonthName(Month([BookingStart])) FROM Payment_tbl", con, adOpenStatic, adLockOptimistic
Debug.Print rst(0).Value
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub

編集

HansUp のコメントに加えて、Office 2007 と Office 2010 の間で何かが変更されたに違いありません。Office 2010 を実行している 32 ビット マシンから別のテストを実行し、Access 2000 の .mdb ファイルに対して上記のコードを実行すると、両方を使用して機能しました...

Provider=Microsoft.ACE.OLEDB.12.0;

...と...

Provider=Microsoft.Jet.OLEDB.4.0;

SandBoxMode下のレジストリ値も確認しました...

HKLM\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines

...そしてそれは3、「有効」の値です (参照:こちら)。

于 2013-05-23T17:16:57.163 に答える