Access2010でUPDATEできない

このQ&Aのポイント
  • Access2010でテーブルを更新しようとしているが、エラーが出てしまう。クエリでも同様のエラーが出るため、SQL自体が間違っている可能性がある。
  • テーブル1にデータが入っている場合と入っていない場合があり、区分にデータが入っていると実行年・月・日にもデータが入る。
  • VBAのコードを実行すると実行時エラー '3001'が出てしまう。何が問題なのかわからず困っている。
回答を見る
  • ベストアンサー

Access2010でUPDATEできない

ちょっと行き詰まってしまいました。 あるテーブルを更新しようと、以下のようなVBAを作成し実行しました。 しかし、エラーが出てしまいます。 【テーブル1】 ID,予定年,予定月,予定日,実行年,実行月,実行日,区分 ID、予定年・月・日にはデータが入っています。 区分にはデータが入ってる場合と入ってない場合があります。 区分にデータが入っていると、実行年・月・日にはデータが入っています。 【コード】 strSQL = "UPDATE テーブル1 SET 実行年 = 予定年, 実行月 = 予定月, 実行日 = 予定日 WHERE 区分 Is Null" DoCmd.RunSQL strSQL 【エラー】 Microsoft Visual Basicエラーダイアログが表示され、 「実行時エラー '3001' 引数が無効です。」と出ます。 クエリで同じものを作成しても同様のエラーが出ますが、SQL自体間違っているのでしょうか。 煮詰まっているのか、何がダメなのか判らない状況です。 もし判る方がいましたら、ご教授お願いします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

ちょっと見では大丈夫そうでしたが、自信が無かったので 似たようなのを作成して検証してみました。 すんなりと実行されました。 Googleオジサンに聞いたところ、もしかしてコレ? http://www.free-style.biz/lifediary/2012/04/access2007sp3.html 関連記事(リンク先)も含めると2010でも容疑濃厚かもしれない。 テーブルを作り直せば解決するらしいので 一旦CSVファイルにでも書き出してテーブル削除しインポートか リンク先のMS社の解決方法でなんとかなるかも? Access2010になってから、少し疑心暗鬼のこの頃。 ご参考まで。

ok-rjak
質問者

お礼

まさにご指摘の関連記事がビンゴのようでした! テーブルをXMLエクスポートして、インポートし直したものを同様のSQLで実行したところ、処理ができました。 ありがとうございました。

その他の回答 (1)

回答No.1

Access2000 で試してみました。 strSQL = "UPDATE テーブル1 SET 実行年=[予定年],実行月=[予定月],[実行日=[予定日] WHERE 区分 Is Null WITH OWNERACCESS OPTION" としたらどうでしょう

ok-rjak
質問者

お礼

回答有り難うございます。 WITH OWNERACCESS OPTION では同様のエラーが出てしまいました。 しかしこの方法は知りませんでしたので、大変勉強になりました。 有り難うございました。

関連するQ&A

  • accessでcommitができますか?

    accessで複数のテーブルから1つのテーブルに書き込みをしています。VBAでSQL文を作成しDoCmd.RunSQLでinsertを実行しています。データが多いと遅くなるようです。Commitとか実行できるのでしょうか?そうすれば早くなりますか?ご指導のほどお願いいたします。

  • access一部のフィールドを他のテーブルへVBA

    先日 https://okwave.jp/qa/q10245651.html において > table2の新しいデータとして > table1のデータをコピーしたい、 単に追加で ということであれば、という 御回答: Sub Test() Dim StrSQL As String StrSQL = "INSERT INTO table2 SELECT table1.* FROM table1;" DoCmd.SetWarnings False DoCmd.RunSQL StrSQL DoCmd.SetWarnings True End Sub ---------------------- 上記の 回答をいただき うまく稼働しました 部分的にフィールドを別テーブルに 移動するとき ここでは table1のフィールド名 IDに table2のフィールド名 bに 入っている数値 にい 1を加えた数値を 移動したいのですが Public Function Test() Dim tb1 As Table Dim tb2 As Table tb1 = table1 tb2 = table2 Dim strSQL As String strSQL = "INSERT INTO table2![ID]SELECT"("[b]"FROM tablel)+1" (table1のフィールド[b]の数値に1を加えた数値を table2のフィールド[ID]に移行する、というつもりです) DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Function 稼働しません すみません 宜しくお願い致します (ついでながら ここで でてくるb というのは テーブル table3 の IDの総和 すなわち SELECT Count(table3.ID) AS b FROM table3; 要は table3の最後のレコードの次のレコードの 番号の数値を table2のIDに移動したい というわけであります) (いずれのIDや bについても 数値型 長整数型 重複あり です)

  • Access2000のVBAについて

    下記のプログラムだと挿入が可能になります。 Private Sub 削除_コマンド_Click() If IsNull(Me.社員コード) Then MsgBox ("社員コードが入力されていません") Else Dim strSQL As String strSQL = "INSERT INTO 社員情報テーブル(社員コード,作成日) " _ & " VALUES ('" & Me.社員コード & "', now());" DoCmd.RunSQL strSQL End If End Sub しかし、下記のプログラムだとinsert文の『Me.社員コード』で エラーが発生します。 エラーメッセージは 『メソッドまたはデータメンバが見つかりません』 と表示されます。 上と下とどう違うのでしょうか。 Private Sub 削除_コマンド_Click() If IsNull(Me.社員コード) Then MsgBox ("社員コードが入力されていません") Else Dim strSQL As String strSQL = "INSERT INTO 社員情報テーブル(社員コード,氏名(氏),作成日) " _ & " VALUES ('" & Me.社員コード & "','" & Me.氏名(氏) & "', now());" DoCmd.RunSQL strSQL End If End Sub

  • ACCESSのモジュールでのUNION

    ACCESS超初心者です。 モジュールでテーブルAとBテーブルBを結合しテーブルCを作成したいのですが、 DoCmd.RunSQL " SELECT * FROM TABLE_A UNION SELECT * FROM TABLE_B INTO TABLE_C; " でRunSQL実行時のエラー(2342)となってしまいます。 きっと基本的なことだと思うのですが・・・ どうぞお教えください。

  • 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の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(貸借区分="借方",借方-貸方,貸方-借方) 長文になりましたが、宜しくお願いします。

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

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

  • 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 月度=開始日 ; ")

  • Access2000でのINSERT文の作成マクロについて

    MSAccess2000での環境下、2つのテーブルを参照した結果を別テーブルにINSERTしたいと考えております。 <会員TBL> 600件 ID、氏名、会員区分ID <会費TBL> 5件 会費区分ID、年会費 <請求TBL>・・・INSERTしたいテーブル 会員TBL.氏名、会費TBL.会費区分ID、会費TBL.年会費、請求日(INSERT文実行日) 以上のような会員テーブルと年会費テーブルを結合した請求データを請求テーブルに挿入したいと考えております。 Access2000でこのようなデータの作成が可能であれば、全会員分の請求レコードを作成するSQL文の作成から実行までをマクロで実行したいと考えています。 Access2000での開発経験が皆無の為、勝手がわかりません。 どなたかアドバイスをいただければ幸いです。

  • ACCESS2007でレコードの条件付き削除

    よろしくおねがいします。 テーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]の仕訳日のフィールドが削除日以前のデータを削除するのに次のようにしました。 「仕訳明細クエリ」作成 ※添付画像を見てください DoCmd.RunSQL ("delete FROM 仕訳明細クエリ;")で 「 実行時エラー'3086' 指定したテーブルから削除できませんでした 」 因みに 「仕訳明細クエリ」を開いてDeleteキーで手動削除すると仕訳明細のレコードは削除できましたが仕訳伝票のレコードは残っています。

専門家に質問してみよう