SQL Server 2005からテーブルビューをリンクしたレポートに使用するAccess MDBがあります。POテーブルの情報を取得し、他のテーブルの情報に応じて個別明細を更新することができます。私は、(データを作成する)プライマリアプリケーションの必要に応じて、互換性モード80からサーバー上の90に移行した約1カ月前まで、クエリが正常に機能していることは確かです。 100%の確実性でこれを言うことはできませんが、それは過去90日間に行われた唯一の大きな変化です。突然データがクエリに表示されず、レポートが奇妙に見えることがわかりました。アクセスクエリは、テーブルのリンク方法に応じて空のフィールドを返します。
これは失敗したクエリのコピーです:
SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
dbo_opmaster.shortchar01,
dbo_porel.ponum, dbo_porel.poline, dbo_podetail.unitcost
FROM ((dbo_porel
LEFT JOIN dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq)
AND (dbo_porel.jobseq = dbo_joboper.oprseq)
AND (dbo_porel.jobnum = dbo_joboper.jobnum))
LEFT JOIN dbo_opmaster ON dbo_joboper.opcode = dbo_opmaster.opcode)
LEFT JOIN dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline)
AND (dbo_porel.ponum = dbo_podetail.ponum)
WHERE (dbo_porel.jobnum="367000003")
それは次の値を返します。
jobnum opcode jobseqtype shortchar01 ponum poline unitcost
367000003 S 6624 2 15
クエリが正常にオペコードとshortchar01の値を表示しているはずです。リンクされたテーブルdbo_podetailを削除すると、これらのフィールドのデータが正しく表示されます(ただし、私は明らかにunitcostを持っていません)。最初はデータの問題だと思っていましたが、クエリをネストしてテーブルをリンクすると、うまくいきました。
は、たとえば次のコードは完璧に動作します:
SELECT qryTest.*, dbo_podetail.unitcost
FROM (
SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
dbo_opmaster.shortchar01, dbo_porel.ponum, dbo_porel.poline
FROM (dbo_porel
LEFT JOIN dbo_joboper ON (dbo_porel.jobnum=dbo_joboper.jobnum)
AND (dbo_porel.jobseq=dbo_joboper.oprseq)
AND (dbo_porel.assemblyseq=dbo_joboper.assemblyseq))
LEFT JOIN dbo_opmaster ON dbo_joboper.opcode=dbo_opmaster.opcode
WHERE (dbo_porel.jobnum="367000003")
) As qryTest
LEFT JOIN dbo_podetail ON (qryTest.poline = dbo_podetail.poline)
AND (qryTest.ponum = dbo_podetail.ponum)
私はそれが最初のケースでは、後者の場合には動作しない理由のために途方に暮れてよ。さらに悪いことに、一部のレコードでは断続的に動作するように見えますが、他のレコードでは動作しないように見えます(これは動作しないとうまく動作しません)。
あなたの専門家がいらっしゃいますか?
SELECTステートメントの列の1つが、クエリのメインテーブルのPKですか?第2に、テーブルにタイムスタンプフィールドがあり、それをすべてのSQL文に含めると、Accessはバインドされたフォームでデータを表示して更新する作業が改善されます。 –