1

私はこのAccess2002データベースに取り組んでいます。SQL Server 2008にリンクされたサーバーを使用します。メインフォームの読み込み中にDLookupを実行し、日付を確認するという問題があります。

EndDate = Nz(DLookup("End_Date", "Employee", "EmpID= " & EmpID & " AND End_Date IS NOT NULL AND End_Date < #" & Now & "#"), "")

これはAccess2002では正常に機能しますが、Access2010では次のようになります。文字列から日付や時刻を変換するときに変換に失敗しました

これがキッカーですが、Access2010では1人のユーザー(私自身)に対して機能します。他のユーザーはそれを動作させませんし、Windows7とAccess2010ランタイムを使用した他のインストールも正常に動作します。同じマシン上で、MDBも正しく機能します。SQL Serverのようにポンド記号を一重引用符に置き換えると、2010マシンでは正常に動作しますが、2002では動作しなくなります(duh)。

頭がおかしくなったばかりで、通常はOfficeをすべてアンインストールしてから再インストールし、AccessRuntimeのSP1が最後にインストールされていることを確認することで動作させることができました。

4

2 に答える 2

2

Now()の値を の文字列に変換する代わりにDLookup、db エンジンNow()にそれ自体を決定させます。

EndDate = Nz(DLookup("End_Date", "Employee", _
"EmpID= " & EmpID & " AND End_Date IS NOT NULL AND End_Date < Now()"), "")

そのアプローチは、日付/時刻と文字列との間の変換に依存しないため、報告された問題を回避できます。

オリジナルがどのように異なる結果をもたらしたかを調べたい場合はDLookup、異なるマシンで次のようなことを試してください。

Dim strCriteria As String
strCriteria = "EmpID= " & EmpID & " AND End_Date IS NOT NULL" & _
    " AND End_Date < #" & Now & "#"
Debug.Print "strCriteria: " & strCriteria
EndDate = Nz(DLookup("End_Date", "Employee", strCriteria), "")

そのコードを実行した後、イミディエイト ウィンドウ ( Crtl+ g) に移動し、 の値を調べますstrCriteria

于 2012-10-22T19:33:05.537 に答える
0

SQL Server で使用している日付/時刻フィールドのタイプが問題を引き起こす可能性があることに注意してください。これにより、バージョン間の違いが説明される可能性があります。

Access 2010 は、SQL Server 2008 で追加された 4 つの新しい日付/時刻データ型を限定的にサポートします。

TIME
DATE
DATETIME2
DATETIMEOFFSET

-- http://office.microsoft.com/en-us/access-help/create-an-access-project-HA010341589.aspx#_Toc257281378

日付をデータ型「Date」または「Date2」として SQL サーバーに保存している場合は、それらを「DateTime」に変更してみてください。テキストのように扱った

-- MS-Access フロントエンドは SQL Server からの日付を認識しません

余談ですが、必要はありませんEnd_Date IS NOT NULL。別の基準を追加すると、特に含めない限り、null 値は除外されます。

于 2012-10-22T19:55:53.410 に答える