• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【access】表の更新(UPDATE文))

accessでの表の更新(UPDATE文)

山田 太郎(@f_a_007)の回答

  • ベストアンサー
回答No.3

【訂正】No.2さんの回答を見て・・・ あちゃー! UPDATE TBL2 INNER JOIN TBL1 ON TBL2.Key=TBL1.Key SET TBL2.M1 = TBL1.M1 WHERE LEN(TBl2.M1 & "")=0; INNER JOIN しているので WHERE節は《ヌルならば》で事足りることを失念し無駄な条件を書いていることに気が付きました。当然に「あっ、そうなんだ!」とは悟られたでしょうが・・・。ここに、明示的に訂正しておきます。なお、IsNUll()ではなくてLEN()を用いる場合は LEN(TBl2.M1=0; は、エラーになります。 LEN(TBl2.M1 & "")=0; とヌル値対策が必要です。

sunflower153
質問者

お礼

ご丁寧にありがとうございました。 ご教示頂いた内容で上手くいきました。

関連するQ&A

  • 【access】表の値を別項目にセットする方法

    accessでの表の更新に関しご教示ください。 access2010を使用しTBLの編集を行いたいです。 具体的には以下の通り。 ■仕様 TBL1.M1の項目にカンマ区切りの文字列がある。 上記項目の値をカンマで区切り、TBL1.M2~TBL1,M4にセットしたい。 TBL1(全てテキスト型):編集前 ―――――――――――――――――――― Key |M1   |M2  |M3  |M4    ―――――――――――――――――――― 1  |1,2,3 |   |   | ―――――――――――――――――――― 2  |a,b,c |   |   | ―――――――――――――――――――― TBL1(全てテキスト型):編集後 ―――――――――――――――――――― Key |M1   |M2  |M3  |M4    ―――――――――――――――――――― 1  |1,2,3 |1   |2   |3 ―――――――――――――――――――― 2  |a,b,c |a   |b   |c ―――――――――――――――――――― VBAでプログラムを組んでもなかなか上手くいきません。 良い方法は無いでしょうか。

  • access 更新?追加? クエリ

    ACCESSについて質問です。よろしくお願いします。 「TBL情報管理」 に 電話番号・会員番号・会員名・住所 などのデーターが、 「TBL受注内容」 に 電話番号・会員NO・会員氏名 などのデーターがあります。 「TBL受注内容」の会員NOと会員氏名に「TBL情報管理」の会員番号と 会員名を電話番号をキーにして取り込みたいと思います。 選択クエリなら SELECT TBL受注内容.電話番号, TBL情報管理.会員番号 AS 会員NO, TBL情報管理.会員名 AS 会員氏名 FROM TBL受注内容 INNER JOIN TBL情報管理 ON TBL受注内容.電話番号 = TBL情報管理.電話番号; これでいいのかと思いますが、実際にTBL受注内容にデーターをセット する方法がわかりません。 つたない説明で申し訳ありませんが、よろしくお願いいたします。 WIN XP ACCESS 2003 SP2

  • Access Update文の副問い合わせ

    以下のAのSQLをAccessから実行すると「実行時エラー3073 更新可能なクエリであることが必要です。」エラーが表示されます。 一時、待避としてBのような処理をしていますが、かなり処理速度がかかります。 何とかAのような1文で処理できないでしょうか? 'A================================================ Update PV_PRINT pv Set 勉強日 = (SELECT max(日付) as 日 FROM 基本記録テーブル where 項目2 between 3011 and 3014 and pv.USER_NUM = 基本記録テーブル.ID GROUP BY ID); 'B================================================ stSQL = "SELECT max(日付) as 日, ID FROM 基本記録テーブル where 項目2 between 3011 and 3014 GROUP BY ID;" Set TBL1 = CurrentDb.OpenRecordset(stSQL) Do Until TBL1.EOF stSQL = "UPDATE PV_PRINT " stSQL = stSQL & " SET PV_PRINT.勉強会日 = " & Format(TBL1![日], "yyyymmdd") stSQL = stSQL & " WHERE PV_PRINT.USER_NUM = " & TBL1![ID] & ";" CurrentDb.Execute stSQL TBL1.MoveNext Loop Set TBL1 = Nothing

  • DTS クエリーデザイナ で更新クエリー

    今回、訳あってSQL2000Severを導入する事になり勉強中です。 今までAccessでDB更新/追加/削除は経験あり、HPを見ても移行は簡単なイメージがありましたが、更新クエリーだけイメージがあいません。 TBL A /TBL B の2つのTBLがあり、TBL Aの項目をTBL Bで更新しようとする場合,Accessならクエリーで2つのTBLを追加してTBL AをTBL Bの項目で更新できたのですが、DTSデザイナで更新を選択するとTBL Aしか追加できません。 又、クエリアナライザを使ってもJOINの後の構文エラーから先に進めない状態です。 初歩的質問で申訳ありませんが、助言できる方がいらっしゃいましたら助けて下さい。 サンプルSQL UPDATE [TBL A] AS A INNER JOIN [TBL B] AS B ON A.KOUMOKU = B.KOUMOKU SET [A].[TANKA] = [B].[TANKA]; キーワード 'AS' 付近に正しくない構文があります。

  • Accessで差分取得する方法は? LEFT JOIN エラー

    Accessで差分抽出するSQLを教えてください。 【旧テーブル】t1 id, class, number, value 1, "a", 1, "aka" 2, "a", 2, "aki" 3, "a", 3, "aku" 【新テーブル】t2 id, class, number, value 1, "a", 1, "aka" 2, "a", 2, "更新" 3, "a", 3, "aku" 4, "a", 4, "新規" 5, "b", 1, "新規" 【ダメだったクエリ】 SELECT t2.* FROM t2 INNER JOIN t1 WHERE t1.class IS NULL OR t1.number IS NULL 【望む結果】 4, "a", 4, "新規" 5, "b", 1, "新規" *列 id は各テーブルの主キーですが、新旧テーブル間の関連はありません(リレーションではありません)。

  • VBでSQL文のUPDATE文を使った時のエラー

    access VBA初心者ですが回答、ご指摘のほうよろしければお願いします。 フォームにて更新ボタン押下時、テーブルの更新日付を現在の日付で更新したいと考えております。 下記のようにVBを組み込んだのですが、実行すると「UPDATE ステートメントの構文エラーです」というエラーがでてしまいます。 構文のどこが悪いか御指南いただけないでしょうか。 test_TBLの更新日付のフィールドを現在日付で更新 Dim sql As String Dim newdate As Date newdate = Now() sql = "UPDATE test_TBL SET 更新日付 =#" & newdate & "#" DoCmd.RunSQL sql

  • インラインビューの更新権限について

    UPDATE句をインラインビューを使って実施しようと思い UPDATE ( SELECT A.FLD1,B.FLD2 FROM TBL1 A,TBL2 B WHERE A.KEY1=B.KEY1 AND CONCAT(A.KEY2,A.KEY3)=B.KEY2 AND B.KEY2='12345') C SET C.FLD1=C.FLD2 のようにSQLを書きました。 ORA-01779: キー保存されていない表にマップする列は変更できません のメッセージが出力されました。 CREATE VIEW TEST AS SELECT A.FLD1,B.FLD2 FROM TBL1 A,TBL2 B WHERE A.KEY1=B.KEY1 AND CONCAT(A.KEY2,A.KEY3)=B.KEY2 AND B.KEY2='12345' でビューを作って確認したら select * from user_updatable_columns where table_name='TEST'; OWNER TABLE_NAME COLUMN_NAME UPDATA INSERT DELETA ---------- ----------- --------------- ------ ------ ------ TEST TEST FLD1 NO NO NO TEST TEST FLD2 NO NO NO 確かにUPDATEできないようです。 テーブルはこんな感じです。 TBL1 ------------------------------------------- KEY1 NUMBER 4 PK KEY2 NUMBER 5 PK KEY3 NUMBER 1 PK FLD1 CHAR 6 TBL2 ------------------------------------------- KEY1 NUMBER 4 PK KEY2 NUMBER 6 PK FLD2 CHAR 6 同じように TBL3 ------------------------------------------- KEY1 NUMBER 2 PK KEY2 NUMBER 4 PK KEY3 CHAR 6 PK KEY4 NUMBER 4 PK FLD3 CHAR 6 TBL4 ------------------------------------------- KEY1 NUMBER 4 PK KEY2 CHAR 6 PK FLD4 CHAR 6 でビューを作ったら CREATE VIEW TEST2 AS SELECT A.FLD3,B.FLD4 FROM TBL3 A,TBL4 B WHERE A.KEY2=B.KEY2 AND A.KEY3=B.KEY3 AND A.KEY1='12' AND A.KEY4='1234' OWNER TABLE_NAME COLUMN_NAME UPDATA INSERT DELETA ---------- ----------- --------------- ------ ------ ------ TEST TEST2 FLD3 YES YES YES TEST TEST2 FLD4 NO NO NO 更新可能なようです。 ビューを作ったとき、UPDATEやINSERT文が有効・無効になる違いは何でしょうか? 毎回一旦ビューを作って select * from user_updatable_columns where table_name='TEST'; のような確認しかできないのでしょうか? よろしくお願いいたします。

  • ACCESS 結合ができません。

    祖母が句会に入っていて、私はACCESSを触っているだけなのですが、祖母の周囲にパソコンを使える人が居ないため、頼まれました。 プログラムの変更なのですが、ACCESSを作った人は退会されているので、困り果てております。 ・現在の時間帯が、第2希望まで選べているが、それが第5希望まで選べるようになった。 ・テーブル「T時間M」から「T時間M-4」まであり、-2からは、第2希望から参照している。 クエリの構造については、画像で添付しましたが、仮名に変更してあります。 コードについては、SQLで組まれており、LEFT JOINとなっていますが、3つ以上の結合を行うと、フォームでは「Name?」となってしまいます。 コードの記述についてですが、SQLの構文部分を書き出します。 SQL = "SELECT T会員M.名前," _ & "T男女M.男女, T会員M.年齢, [T時間M.項目C] &" _ & " T時間M.回数 AS 第1, T会員M.当落1," _ & " [T時間M_1.項目C] & T時間M_1.回数 AS 第2, T会員M.当落2" _ & " FROM T時間M INNER JOIN (T男女M INNER JOIN (T会員M LEFT JOIN T時間M AS T時間M_1 ON" _ & " T会員M.第二希望時間CD = T時間M_1.時間id) ON T男女M.男女C = T会員M.男女C) ON" _ & " T時間M.時間id = T会員M.第一希望時間CD " _ この後の記述は & "WHERE ~省略 & " ORDER BY  ~省略 Me.RecordSource = SQL となっています。

  • ACCESSクエリで複数テーブルの値の結合について

    現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。 テーブルは外部データよりインポートしています。 Aテーブル KEY1 | KEY2 | 値1 -------------------------- 00000001 | AAAAAAAA | 100 00000001 | BBBBBBBB | 200 00000002 | AAAAAAAA | 1000 Bテーブル KEY1 | KEY2 | 値1 -------------------------- 00000001 | AAAAAAAA | 500 00000002 | BBBBBBBB | 300 これを、 KEY1 | KEY2 | 値1 ------------------------------------------------ 00000001:00000001 | AAAAAAAA:AAAAAAAA | 100:500 ←(1) 00000001:NULL | BBBBBBBB:NULL | 200:NULL ←(2) 00000002:NULL | AAAAAAAA:NULL | 1000:NULL ←(3) NULL:00000002 | NULL:BBBBBBBB | NULL:300 ←(4) と表示したいのです。 INNER JOIN では、上記(1)しか表示されません。 また、LEFT JOIN では、(1)(2)(3)は表示されますが、(4)が表示されません。 SQLは下記です(INNER JOINを使用した場合) SELECT [Aテーブル.KEY1] & ":" & [Bテーブル.KEY1] AS KEY1, [Aテーブル.KEY2] & ":" & [Bテーブル.KEY2] AS KEY2, [Aテーブル.値1] & ":" & [Bテーブル.値1] AS 値1 FROM Aテーブル INNER JOIN Bテーブル ON ([Aテーブル].[KEY1]=[Bテーブル].[KEY1]) AND ([Aテーブル].[KEY2]=[Bテーブル].[KEY2]); どなかた教えてください。お願いします。

  • Accessでの連鎖更新について

    いつもお世話になっております。 表題の件、アクセスでの連鎖更新についての質問です。 以下のようなテーブルを持っているとしまして T商品マスタ ID:オートナンバー(主キー) 管理番号:INT 商品名:String T部品 管理番号:INT 部品名:String 備考:String T商品マスタとT部品は、管理番号をキーにして1対多になるのですが クエリで T商品マスタ.管理番号 T商品マスタ.商品 T部品.備考 表示自体は、T商品マスタのレコード分のみ表示させて、備考を入力した場合、T部品の管理番号が同じレコードすべてに同じ備考を登録したいのですが、エンティティやクエリの作りについて、どうすればよいか見当がつきません。 T商品マスタの管理番号は、主キーになっておらずNullも許可し重複もあります。 T部品は、主キーがなく同一の管理番号で部品が多数あります。 ネットで調べ、連鎖更新をしようと思ったのですが、エンティティの作成画面でエラーが発生してしまいました。 初心者で、知識がなく説明がうまくできませんが、どうぞよろしくお願い致します。