• ベストアンサー

ACCESSでSQL文

宜しくお願いします。 ACCESS2000で 仕訳帳テーブルの特定期間の科目ID別集計を中間テーブルに生成する処理の以下の文でエラーメッセージが出ます。 DoCmd.RunSQL ("Insert Into 中間(月度,科目ID,借方計,貸方計) " _ & "Select 開始日,科目ID,sum(借方),Sum(貸方) From 仕訳帳" _ & "Group By 科目ID where (仕訳日 >= 開始日) and (仕訳日 <= 終了日)") エラーメッセージの内容は 「クエリー式’科目ID where (仕訳日 >= 開始日) and (仕訳日 <= 終了日)'の構文エラー:演算子がありません」

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

SQLに自信が無いのならクエリデザインで作成することをお勧めします。 また、クエリでエラーがでたのならまず変数に代入し表示すればミスも確認できます。 strSQL = "SQL文" debug.print strSQL DoCmd.RunSQL strSQL (1)Where句はGroup Byの内側に記述 (もし集約後の抽出であればHaving句) (2)集約に開始日がない (3)貸方計) 、仕訳帳の後ろに空白がない (4)仕訳日は仕訳帳テーブルの項目? 変数であれば文字列の外だしにする必要があります。 " ~ ('" & 仕訳日 & "' >=開始日 ~ "

shinkami
質問者

お礼

御回答有難うございます (1)(mo_gu様の指導の通り)と(3)の処理でで解決しました。 (4)についてはフィールド名がユニークのためテーブル名を省略しています。

その他の回答 (1)

  • mo_gu
  • ベストアンサー率51% (56/109)
回答No.1

DoCmd.RunSQL ("Insert Into 中間(月度,科目ID,借方計,貸方計) " _ & " Select 開始日,科目ID,sum(借方),Sum(貸方) From 仕訳帳 " _ & " where (仕訳日 >= 開始日) and (仕訳日 <= 終了日) Group By 科目ID") "の後にスペースを入れたらどうでしょうか? Group Byをwhere の後に

shinkami
質問者

お礼

ご回答有難うございます ご提示の通りWher句とGroup By句を入れ替えて解決しました

関連するQ&A

  • ACCESSのSQLです。

    お世話になります。  ACCESS210で  勘定科目、仕訳帳、予実集計の3個のテーブルで  仕訳帳を月ー科目ID毎に集計して予実集計に反映するのに DoCmd.RunSQL ("Delete From 予実集計;") DoCmd.RunSQL ("Insert Into 予実集計(月度,科目ID,当年実績)" _ & "Select [仕訳日]-Day([仕訳日])+1 as 月初,科目ID, " _ & " sum(IIf([貸借区分] = ""借方"",[借方]-[貸方],[貸方]-[借方] as 収支) _ & " FROM 勘定科目 INNER JOIN 仕訳帳 ON ID = 仕訳帳.科目ID" _ & " WHERE 繰越FG)=False group BY [仕訳日] - Day([仕訳日]) + 1 as 月初,科目ID; ")  とすると  実行時エラー "3075" 構文エラー演算子がありませんとなります。  因みに、下記の仕訳帳クエリ(下方に記述)を用いて DoCmd.RunSQL ("Delete From 予実集計;") DoCmd.RunSQL ("Insert Into 予実集計(月度,科目ID,当年実績) _ & " Select 月初,科目ID,sum(金額) From 仕訳帳クエリ _ & " WHERE 繰越FG = False group by 月初,科目ID; ") とするとエラーなく終了するのですが、出来ればクエリーを乱用したくないのです。 ・勘定科目  ID(主キー)  勘定科目名  勘定CD  科目群ID  貸借区分(借方、貸方)  繰越FG ・仕訳帳(主キーなし)  伝票No.  仕訳日  摘要  科目ID(勘定科目.IDにリレーション)  借方  貸方 ・予実集計  月度 (主キー 仕訳日の月初=仕訳日-DAY(仕訳日)+1)  科目ID(主キー)  当年予算  当年実績  前年予算  前年実績 ・仕訳帳クエリ勘定科目.IDー仕訳帳.科目ID  伝票No.  仕訳日  摘要  科目ID  借方  貸方  月初:仕訳日-DAY(仕訳日)+1  金額:iff(貸借区分="借方",借方-貸方,貸方-借方) 長文になりましたが、宜しくお願いします。

  • Access2007 の SQL文です。

    宜しくお願いします。 DoCmd.RunSQL ("update 予算月別 inner join 予算実績 on 予算月別.科目ID=予算実績.科目ID " _ & " set 合計金額 =sum(当年予算) where (月度>=開始日) and (月度<=終了日) group by 科目ID; ") これで 実行時エラー '3137': SQL ステートメントの最後には、セミコロン(;)が必要です。 下記のSQL文は実行できました。 これを編集したものです。 DoCmd.RunSQL ("update 予算月別 inner join 予算実績 on 予算月別.科目ID=予算実績.科目ID " _ & " set 金額01 =当年予算 where 月度=開始日 ; ")

  • access の UPDATE のSQL文教えてください

    お世話になります。 仕訳抽出 (キー無し)の勘定科目別の金額を勘定科目毎に集計して仕訳集計(キー項目:勘定科目)の金額を更新するSQL文です。 1つ目はOK ですが 2つ目で「構文エラー:演算子がありません」となります。 DoCmd.RunSQL "UPDATE 仕訳集計 set 金額=0 " DoCmd.RunSQL "UPDATE 仕訳集計 " _ & " INNER JOIN 仕訳抽出 ON 仕訳集計.勘定科目 = 仕訳抽出.勘定科目" _ & " SET 仕訳集計.金額 = SUM(仕訳抽出.金額) Group by 仕訳抽出.勘定科目;"

  • ACCESS VBA 条件付き処理

    お世話になります。 仕訳伝票の入力フォームを 日付、伝票No.、目的のテキストボックスと目的テーブルにある、借方規定値、貸方規定値のテキストボックスをメインフォームとし 借方金額、貸方金額のテキストボックス、借方科目ID、貸方科目IDのコンボボックスをサブフォームに配置しました。 サブフォームで新規レコードの借方科目IDにメインフォームの借方規定値をコピーするために次のようにコーディングしました。 尚借方科目IDはテーブル定義でフィールドサイズ:長整数型 規定値:0にしています 命令文の右端の(1)(2)(3)で説明します。 (1)または(2)が有効であればよいのですが (1)(2)はきいていないようで、(3)は有効です Private Sub 借方金額_Exit(Cancel As Integer) If 借方科目ID = 0 Then 借方科目ID = Me.Parent!借方 '…(1) End If If IsNull(借方科目ID) Then 借方科目ID = Me.Parent!借方 '…(2) End If 借方科目ID = Me.Parent!借方 '…(3) End Sub

  • ACCESSテーブルのデータの一部を削除

    よろしくおねがいします。 仕訳伝票のテーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]に仕訳日のフィールドがあります。 仕訳日が削除日以前のデータを削除するのに次のようにしました。 1 DoCmd.RunSQL ("delete FROM 仕訳明細 where 仕訳日<=[削除日] INNER JOIN 仕訳伝票 ON 仕訳伝票.仕訳ID = 仕訳明細.仕訳ID ;") 2 DoCmd.RunSQL ("delete from 仕訳伝票 where 仕訳日<=[削除日] ;") 2 はうまくいきそうなのですが 1 が「 '実行時エラー 3075' クエリー式…の構文エラー演算式がありません」となります。

  • ACCESSの規定値を動的に設定するには

    お世話になります。 仕訳伝票の登録フォームを作りました。 テキスト項目にコンボボックスを5個セットしました。 実際に操作するとマウス操作とキーボード操作の作業が面倒です。 フォームは伝票No.、日付、伝票の目的 のメインフォーム「仕訳伝票入力」 勘定科目、適用、金額のサブフォーム「仕訳伝票入力明細サブ」 メインフォーム上の伝票の目的が決まればサブフォームの勘定科目(借方科目、貸方科目)ほぼ決まります。 そこで伝票の目的テーブルに借方、貸方に勘定科目IDの項目に登録しておき、 これをサブフォームの借方科目、貸方科目の規定値として動的に設定出来ないものかと… この質問は前の http://kikitai.teacup.com/qa4980091.html の補足です。こちらも宜しくお願いします。

  • access の UPDATE のSQL文教えてください

    下記は合計テーブルの振仮名へ利用者テーブルの振仮名をセットする文です。 実行すると「構文エラー、演算子がありません」とメッセージです DoCmd.RunSQL "update 合計 set 合計.振仮名 = 利用者.振仮名 from 利用者 WHERE 合計.利用者 = 利用者.利用者;" 利用者テーブルは[利用者]がキー項目になっています 合計テーブルはキー項目を持たないテーブルで[利用者],[振仮名]、[金額]の各項目があります。

  • accessの SQL文 INSERT命令

    次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。 文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

  • PL/SQLのDELETE文について

    PL/SQLでDELETE文を書こうとしているのですが、 文法がわかりません。。。 分かる方がおられましたら、教えてくださいm(_ _)m 今、TABLE1を削除したいのですが、条件がいろいろあって、 以下のように書いてみたのですがダメでした。 こういう書き方は、できないんでしょうか・・・。 削除条件は、TABLE2に存在し、かつ、TABLE2のTENSUが0のもので、 TABLE3が存在しないものです。 DELETE TABLE1 FROM TABLE1 ,TABLE2 ,TABLE3 WHERE TABLE1.ID = TABLE2.ID AND TABLE2.TENSU = 0 AND Not Exists (SELECT TABLE3.ID FROM TABLE3 WHERE TABLE3.ID = TABLE2.ID) 説明が下手なので、うまく、伝わっているか、心配なのですが・・・、 よろしくお願いします。

  • SQL文のエラー

    SQL文でエラーが表示されます。どの部分を修正すればいいですか? SQL文が長いので文字列を結合する演算子「.」を使って複数行に分けています。 エラー内容:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ? and product_id = product.id' at line 2 //商品番号だけでなく、商品名や価格も表示したいので商品情報を保持するproductテーブルと 結合する。 //全て取得するのでSELECTは* //favoriteテーブルにはcustomer_idとproduct_id //productテーブルにはid, name, price $sql = 'SELECT * FROM favorite, product' . 'WHERE customer_id = ? and product_id = product.id '; // ?に顧客番号を指定する。 // favoriteテーブルの商品番号(product_id列)と、productテーブルの商品番号(id列)が // 一致している行だけが必要なので、WHERE句に条件を追加する。

専門家に質問してみよう