システムwiki

パラメータのテーブルを参照するSQLコードの修正

IrshadA 解決済 最終更新日:2020-08-20 15:00

以下のコードを使用すると、正しい結果が得られます
WHERE(TblSvcSetB.ToSelect)= True AND QSvcRemindB.HoursWorkedAfterLastSvc>460;

同じ値が記載されている表を参照すると、エラーは発生しませんが、一部のレコードがドロップされます
WHERE(TblSvcSetB.ToSelect)= True AND QSvcRemindB.HoursWorkedAfterLastSvc>Dlookup( "[KomSetupReminder]"、 "[ USysTblLevel] ");

[KomSetupReminder] "、" [USysTblLevel]-フィールドタイプは数値、フィールドサイズは長整数、小数点は自動です

クエリを入力する代わりに、tableからパラメータを参照できるようにするために、何を修正したらよいかアドバイスしてください.

返信リスト(回答:11)

1 #
HansVMV

この作業はありますか?

ここで、ここで(tblsvcsetb.toselect)= trueとqsvcremindb.hoursWorkedAfterLastSvc>Val(Dlookup( "[KomSetupreminder]"、 "[usystbllevel]"));

応答1# ->にスキップ
2 #
IrshadA

先生、

機能しませんでした.エラーはありませんが、適切な結果はありません.

それから、クエリの上部でパラメータを宣言しようとしましたが、エントリのdailogがポップアップして結果が表示されないので、間違っています.

クエリの上部で、以下を使用しました

パラメータ[table]![USysTblLevel]![KomSetupReminder] INTEGER;

そして最後に使用された行で:
WHERE(TblSvcSetB.ToSelect)= True AND QSvcRemindB.HoursWorkedAfterLastSvc>[Tables]![USysTblLevel]![KomSetupReminder];

ここで、QSvcRemindB.HoursWorkedAfterLastSvcフィールドが以下の方法で作成されたことにも触れておきます.ソースQSvcRemindBに問題がある可能性があります:

HoursWorkedAfterLastSvc:Format(NZ([CurrentSMR]、0)-NZ([LastSvcSMR]、0)、 "#、#00.0")

確認してアドバイスしてください.

応答2# ->にスキップ
3 #
HansVMV
クエリの完全なSQLを投稿できますか?
応答3# ->にスキップ
4 #
IrshadA

先生、

完全なクエリは次のとおりです:

a)正常に機能している

SELECT QSvcRemindB.Model、QSvcRemindB.SerialNo、QSvcRemindB.SvcDue、QSvcRemindB.HoursWorkedAfterLastSvc、TblSvcSetB.LineNo、TblSvcSetB.JobDesc、TblSvcSetB.SvcAction、TblSvcSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetReset>

FROM(QSvcRemindB INNER JOIN TblSvcSetA ON(QSvcRemindB.SvcDue=TblSvcSetA.SvcCategory)AND(QSvcRemindB.Model=TblSvcSetA.MachModel)AND(QSvcRemindB.ModelV=TblSvcSetA.ModelVTblSvcSetA.ModelVTblSvcSetA.ModelSsetB.SetSvcSetB.SetSet.FormNo

WHERE(TblSvcSetB.ToSelect)= True AND QSvcRemindB.HoursWorkedAfterLastSvc>460;

b)460をtableから取得したいので正常に機能しないため、以下はエラーなしで機能しますが、すべてのレコードが上記のようにプルされるわけではありません.

SELECT QSvcRemindB.Model、QSvcRemindB.SerialNo、QSvcRemindB.SvcDue、QSvcRemindB.HoursWorkedAfterLastSvc、TblSvcSetB.LineNo、TblSvcSetB.JobDesc、TblSvcSetB.SvcAction、TblSvcSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetReset>

FROM(QSvcRemindB INNER JOIN TblSvcSetA ON(QSvcRemindB.SvcDue=TblSvcSetA.SvcCategory)AND(QSvcRemindB.Model=TblSvcSetA.MachModel)AND(QSvcRemindB.ModelV=TblSvcSetA.ModelVTblSvcSetA.ModelVTblSvcSetA.ModelSsetB.SetSvcSetB.SetSet.FormNo

WHERE(TblSvcSetB.ToSelect)= True AND QSvcRemindB.HoursWorkedAfterLastSvc>Val(Dlookup( "[KomSetupReminder]"、 "[USysTblLevel]"));

確認とアドバイスをお願いします.

応答4# ->にスキップ
5 #
HansVMV

即時windows (Ctrl + G)、入力またはコピー/貼り付けをアクティブにすると返される

? Dlookup( "[KomSetupreminder]"、 "[usystbllevel]")

Enterを押す?

応答5# ->にスキップ
6 #
IrshadA

SIR、

の結果

?Dlookup( "[KomSetupreminder]"、 "[usyStbllevel]")
460

応答6# ->にスキップ
7 #
HansVMV

ありがとうございます.これは変なので、それがうまくいかない理由はわかりません.

usySTBLLEVELには1つのレコード、または複数のレコードのみが含まれていますか?

応答7# ->にスキップ
8 #
IrshadA

先生、

Applicationのいくつかの設定でこのレコードフィールドを使用しているため、レコードは1つしかありません.

テストのために、>460のWHEREをクエリから削除しました.同じクエリに基づくレポートの1つにvbaを適用し、それが機能した

レポートのオープンイベント

文字列を暗くする

myfilter="[HoursWorkedAfterLastSvc]>"&DLookup( "[KomSetupReminder]"、 "[USysTblLevel]")

Me.Filter=myfilter

Me.FilterOn=True

すべての記録をもたらします.しかし、問題は、多くのレポートを検索して、このクエリが使用されている場所として編集する必要があるだけなので、クエリに条件を適用するので、いくつかのレポートで作業する必要はありません.

他のアイデアを適用して達成できるかどうかをガイドしてください.

応答8# ->にスキップ
9 #
HansVMV

どうですか

SELECT QSvcRemindB.Model、QSvcRemindB.SerialNo、QSvcRemindB.SvcDue、QSvcRemindB.HoursWorkedAfterLastSvc、TblSvcSetB.LineNo、TblSvcSetB.JobDesc、TblSvcSetB.SvcAction、TblSvcSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetB.ReblSBSetReset>

FROM(QSvcRemindB INNER JOIN TblSvcSetA ON(QSvcRemindB.SvcDue=TblSvcSetA.SvcCategory)AND(QSvcRemindB.Model=TblSvcSetA.MachModel)AND(QSvcRemindB.ModelV=TblSvcSetA.ModelVTblSvcSetA.ModelVTblSvcSetA.ModelSetTabSetB.SetSvcSetB.SetSvcSetB.SetSvcSetB.SetSvcSetB.SetSvcSetB.SetSvcSetA.TblSvcSetB.SetSvcSetB.SetSvcSetA.TblSvcSetB.SetSvcSetB.SetSvcSetB.SetSvcSetB.Set.Inset FormNo、
USysTblLevel

WHERE TblSvcSetB.ToSelect=True AND QSvcRemindB.HoursWorkedAfterLastSvc>
USysTblLevel.KomSetupReminder
応答9# ->にスキップ
10 #
IrshadA
お客様、
コピーして貼り付け、クエリを実行する
エラー「条件式のデータ型が一致しません」
pls.助言
応答8# ->にスキップ
11 #
KenSher

KomSetupReminderには単一の行しか含まれていないため、tableと現在のクエリの現在の結果tableのデカルト積を返すことができるはずです.したがって、DLookup関数の呼び出しは避けてください.
SELECT QSvcRemindB.Model、QSvcRemindB.SerialNo、 QSvcRemindB.SvcDue、
QSvcRemindB.HoursWorkedAfterLastSvc、TblSvcSetB.LineNo、TblSvcSetB.JobDesc、
TblSvcSetB.SvcAction、TblSvcSetB.ReqCategory、TblSvcSetB.ReqPartNo、
TblBqReqPartNo、
TblSvcSetSqbTclSqtSetTabSvcSetSet (QSvcRemindB INNER JOIN TblSvcSetA
ON(QSvcRemindB.SvcDue=TblSvcSetA.SvcCategory)
AND(QSvcRemindB.Model=TblSvcSetA.MachModel)
AND(QSvcRemindB.ModelV=TblSvcSetA.ModelV)
TblSvcSetB ON TblSvcSetA.FormNo=TblSvcSetB.FormNo
WHERE TblSvcSetB.ToSelect=TRUE
AND QSvcRemindB.HoursWorkedAfterLastSvc>USysTblLevel.KomSetupReminder;