Microsoft Access 掲示板

選択クエリで抽出した値で、更新したい / 9

16 コメント
views
4 フォロー
9
ちちみ 2023/09/08 (金) 12:43:07 2d148@1925b

何度も申し訳ありません
記載方法のご説明、ありがとうございました。今度はちゃんと見えていますでしょうか?

クエリのデザインビューに変数に置き換える前の以下の分を張り付け、& _ と " を外して実行させてみました。

        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

クエリの画面では、表示されました。もう一度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"

今度は実行時エラー3075「WHERE № Between 1 And 9 ORDER BY T_01_地耐力.変位4 DESC , T_01_地耐力.№ DESC」
演算子がありません になってしまいました。
お願いいたします

通報 ...
  • 10
    hiroton 2023/09/08 (金) 16:45:26 fe56d@f966d >> 9

    前回の質問でも同じ補足をしましたが、VBAの文字列では改行をそのまま入力することはできません
    _」はVBAコードとしての改行を無視するのみです

    "SELECT TOP 1 基4, 変位4, №" & _
    "FROM T_01_地耐力"
    

    は、単に

    "SELECT TOP 1 基4, 変位4, №" & "FROM T_01_地耐力"
    

    として実行されます。この結果生成される文字列は

    SELECT TOP 1 基4, 変位4, №FROM T_01_地耐力

    となります。これでは、「SELECT句で№FROMフィールドを指定」という記述になってしまいますね
    この直後ですでに構文エラーとなるような気もしますが、エラーメッセージがそのように出力されるのはよくわかりません


    hirotonが提示したちょっと楽をする記述をするなら次の通りです

            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"
    

            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"

    実際のSQL構文部分の各行で先頭に半角スペースを追加する形で記述します

    SQL構文は「改行」と「半角スペース」が同じ役割をするので、VBAでは直接入力できない改行の代わりに半角スペースを使います。さらに、改行を行の最後に入力するかわりに、行の先頭で記述します

    こうすることにより、
    面倒な改行の入力が半角スペース1つで済む
    インデントがそろって見やすい
    行末(文字列の最後)という気づきにくいところでの記述漏れを防げる
    というメリットがあります