4

特定の基準を満たすテーブル内のレコードの数を数えようとしています。私は SQL を上手に使いたいので、Dcount ではなく SQL を使用することを好みます。以下は私の現在のコードです:

Dim countString As String
Dim count

countString = "SELECT COUNT(*) FROM `Engagement Letters` WHERE 'Client ID' = " & Me.cboSelectClient

count = CurrentDb.OpenRecordset(countString).Fields(0).Value

ええ、わかっています。テーブルとフィールド名にスペースを使用しました。これを変更します。このクエリはそのまま実行できるはずですが、とりあえずそのままにしておきます。

上記を実行すると、実行時エラー 3464 が発生します - 条件式のデータ型が一致しません。以下の dcount 関数が正常に機能しました。

count = DCount("[Engagement Letter ID]", "Engagement Letters", "[Client ID] = " & Me.cboSelectClient)

また、WHERE を使用しない以下の COUNT クエリも正常に機能します。

"SELECT COUNT(*) FROM `Engagement Letters`"

私の SQL に関する知識はごくわずかであり、より高度な VBA に関する知識もごくわずかであるため、どこが間違っているのかわかりません。誰でもこれで私を助けることができますか?

4

1 に答える 1

1

このように文字列を作成してみてください。

countString = "SELECT COUNT(*) FROM [Engagement Letters]" & vbCrLf & _
"WHERE [Client ID] = " & Me.cboSelectClient
Debug.Print countString

スペースまたは文字、数字、およびアンダースコア文字以外の文字を含むオブジェクト (テーブルおよびフィールド) 名を角括弧で囲みます。

テーブル名には「Engagement Letters」を使用しましたが、バッククォートは角括弧と同じように機能するようです。おそらく、それらは常に同じようにうまく機能しますが、ブラケットのみを使用しているため、確実にはわかりません. また、バッククォートの代わりに括弧を使用すると、この間違いを回避できます...

WHERE 'Client ID' = " & Me.cboSelectClient

"Client ID"...これは、リテラル文字列を から取得した数値 (?)と比較するように db エンジンに要求していましたcboSelectClient

vbCrLfステートメントの 2 つの部分の間で使用したのは、 SELECT( 経由で) 完成した文字列を調べるときに便利だからDebug.Printです。

于 2012-07-17T00:24:14.587 に答える