web-dev-qa-db-ja.com

アクセスフォーム-クエリ式の構文エラー(演算子がありません)

クエリに対して作成したフォームで構文エラーが表示されます。変更するレコードへのアクセスを制限するフォームを作成しました。フォームにフィルターを設定しようとすると、フィルターしようとするすべての属性の構文エラーが表示されます。これは、クエリコード内の内部結合に()がないことに関係があると思いますが、奇妙なのは、クエリを問題なくフィルタリングできることです。以下はクエリコードです。

SELECT CUSTOMER.[Product Number], SALESPERSON.[Salesperson Number],
SALESPERSON.[Salesperson Name], SALESPERSON.[Email Address]
FROM SALESPERSON INNER JOIN CUSTOMER ON
SALESPERSON.[Salesperson Number] = CUSTOMER.[Salesperson Number];

フォームのみが構文エラーを生成する理由、またはこれを修正する方法はありますか?

5
FGLC0983

フォームのデザインビューに移動し、スペースのあるフィールド名を[]で囲むことで、すぐに修正できました。構文の問題に関する迷惑なポップアップなしで、組み込みのフィルターを使用できるようになりました。

9
Dedren

同じ問題がありました。 Dedrenが言うように、問題はクエリではなく、フォームオブジェクトのコントロールソースです。 [コントロールソース]の各オブジェクトを[]で囲みます。例:Contol Source: [Product number]Control Source: Salesperson.[Salesperson number]など.

Makitaは、クエリで参照している元のテーブルに行くことをお勧めします。スペースがないようにフィールドの名前を変更します。例:SalesPersonNumberProductNumberなど。これにより、将来の多くの問題も解決します。 。幸運を祈ります!

6
msllarson2

スペースを削除して、フィールド名を有効にしてみてください。長いショットですが、実際に私を助けてくれました。

2
Makita

Recordsourceが動的なフォームでこれを行いました。

SQLは大丈夫でした、答えはエラーをトラップすることです!

Private Sub Form_Error(DataErr As Integer, Response As Integer)
'    Debug.Print DataErr

    If DataErr = 3075 Then
        Response = acDataErrContinue
    End If

End Sub
0
Reuben Molloy

余分な()ブラケットは、フローの場合に問題を引き起こす可能性があります。これにより、クエリ式に構文エラー(演算子の欠落)も作成されます。

0
Robin

ダメダメダメ。

これらの答えはすべて間違っています。あなたの脳には根本的な欠如があり、今私はそれを改善しようとしています。

ここでの大きな問題は、命名スキームです。冗長で、望ましくない文字が含まれており、恐ろしく一貫性がありません。

最初Salespersonと呼ばれるテーブルは、_Salesperson.Salesperson number_、_Salesperson.Salesperson email_と呼ばれるテーブルの各フィールドを持つ必要はありません。すでにテーブルSalespersonにいます。この表のすべてはSalespersonに関連しています。あなたはそれを言い続ける必要はありません。

代わりに、IDEmailを使用してください。 Numberは予約語である可能性があるため、使用しないでください。データベースの有効期間中、すべてのフィールド名の周りに[]を入力することに本当に努力していますか?

Studentというテーブルの主キーは、IDまたはStudentIDのいずれかですが、一貫性があります。外部キーは、onlyが指すテーブルの名前にIDを続けたものでなければなりません。例:_Student.ID_および_Appointment.StudentID_。 IDは常に大文字です。あなたのIDEが、あなたのIDEがIDになります。アクセスもIDが好きだからです。

Second:すべてのフィールドにスペースや特殊文字を付けずに名前を付け、できるだけ短くして、予約語と競合する場合は別の語を見つけます。

代わりに:_phone number_はPhoneNumberを使用するか、さらに良いことに単純にPhoneを使用します。 _what time user made the withdrawal_を選択した場合、毎回それを入力する必要があります。

Third:そしてこれは最も重要 one:選択した命名スキームが常に一貫していることです。 「そのテーブルの郵便番号が必要です。名前はPostalCodeになります」と言うことができるはずです。命名規則に一貫性があるため、検索する必要さえなく、そのことを知っておく必要があります。

要約:簡潔で、冗長ではありません。名前をスペースなしで短くし、テーブル名を繰り返したり、予約語を使用したり、各単語を大文字にしたりしないでください。とりわけ、一貫性を保ってください。

アドバイスをいただければ幸いです。これが正しい方法です。私の答えは正しいものです。 絶対的な強迫観念に至るまで、あなたの命名スキームを非常につまらないものにしてくださいこの惑星での残りの人生のために。

注:実際には、テーブルのデザインビューとクエリでフィールド名を変更する必要があります。

0
Bluebaron

同じフォームのメインテーブルの「デザインビュー」に移動し、スペースのあるフィールド名の間にnderline(_)を挿入することで、すぐに修正しました。構文の問題に関する迷惑なポップアップなしで、組み込みのフィルターを使用できるようになりました。

0
Kasra

(Dredenが言うように)スペースのあるフィールド名を[]で囲みますクエリを保存し、閉じてから再度開きます

Access 2016を使用して、フィールド名の周りに[]を追加した後、クエリが保存されるまで、新しいクエリでエラーメッセージが表示されていました。

クエリを保存し(オブジェクトのリストに表示)、閉じて再度開くと、エラーメッセージが消えます。これはAccessのバグのようです。

0
Chris H.