Microsoft Access 掲示板

コンパイルエラー

2 コメント
views
4 フォロー

SQL初心者です。VBAに以下のように記載したのですが、赤い文字になり困っています。

StrSQL = "SELECT TOP 1 基4, 変位4, №" & _
        "FROM T_01_地耐力"
        "WHERE T_01地耐力.№ Between 1 And 9" &
        "ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;"

お願いいたします

ちちみ
作成: 2023/09/05 (火) 12:50:10
通報 ...
1
hiroton 2023/09/05 (火) 14:02:58 修正 6f898@f966d

行連結文字

VBAは基本的に1行1命令です
行を続けて1命令とする場合には _([スペース]+[アンダースコア])を最後の行を除いた各行の行末に記述します

StrSQL = "SELECT TOP 1 基4, 変位4, №" & _
        "FROM T_01_地耐力"
        "WHERE T_01地耐力.№ Between 1 And 9" &
        "ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;"

質問のコードでは1行目に続けて2行目までは1命令として処理されますが、3行目・4行目はそれぞれ独立した1命令と処理されるため不正なコードとしてコンパイルエラーになります


ついでにですが、そのまま質問のコードのような連結を行うとクエリとして実行できないSQL文になります

そのままVBAで連結された場合

SELECT TOP 1 基4, 変位4, №FROM T_01_地耐力WHERE T_01地耐力.№ Between 1 And 9ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;

SELECT TOP 1 基4, 変位4, №FROM T_01_地耐力WHERE T_01地耐力.№ Between 1 And 9ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;

となります。VBAでは文字列に改行をそのまま入力することはできません

SELECT TOP 1 基4, 変位4, №
FROM T_01_地耐力
WHERE T_01地耐力.№ Between 1 And 9
ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;

のように、改行を含んだ文字列とするためには改行を入れる部分に代替のコードを記述する必要があります。たとえばvbNewLineを使います

StrSQL = "SELECT TOP 1 基4, 変位4, №" & vbNewLine & _
        "FROM T_01_地耐力" & vbNewLine & _
        "WHERE T_01地耐力.№ Between 1 And 9" & vbNewLine & _
        "ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;"

hirotonがSQL文をVBAで作る場合は簡単なものであれば次のような記述にしたりします

StrSQL = _
    " SELECT TOP 1 基4, 変位4, №" & _
    " FROM T_01_地耐力" & _
    " WHERE T_01地耐力.№ Between 1 And 9" & _
    " ORDER BY T_01_地耐力.変位4  DESC , T_01_地耐力.№ DESC;"

・1行目は代入する文字を記述せず、 _で即座に終えます
・2行目のSQLの開始行にも先頭に空白スペースを入れます
・改行コードは使いません

これで、目的のSQL文をそっくりそのまま使いつつ、VBA記述のルールから逸脱せず、ミスしにくい記述ができます

2
ちちみ 2023/09/06 (水) 12:17:13 2d148@1925b

VBAは基本的に1行1命令、そこから分かっていませんでした。「& _」の意味も...
とっても分かりやすくて助かりました。本で見ても検索しても理解できなくて。クエリのSQLを張り付けて削除したり付け加えたり、深みにハマっておりました。ありがとうございました。