質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

受付中

accessでのINSERT,DELETEの書き方について教えてください

makino
makino

総合スコア0

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

2回答

0評価

0クリップ

5738閲覧

投稿2016/03/25 02:00

編集2022/01/12 10:55

初心者で申し訳ないのですが、
accessでのSQLで、UPDATE,INSERT,DELETEを組み合わせた書き方がよくわかりません。

マスターとトランザクションで、
1 商品コードが被ったら更新、
2 マスター側に商品コードがなかったら追加、
3 商品コードが被ってるけど、追加するデータが入ってなかったら削除
というプログラムです。

まず、INSERTするとテーブルのデータが全て追加されてしまうので、
1行ずつ追加したいこと。

次に、Ifでrs_ans! rs_transaction!としてるので、毎回、OpenとCloseを繰り返さなければならないのか。
(現在ここでエラーになります・・・)

そもそもIf文ではなくUnionで書けないのか・・・

色々とおかしな部分があるかと思いますが、教えてください。お願いします。

SQL

Sub Key\(\) Dim cnn As ADODB\.Connection Dim rs_master As ADODB\.Recordset Dim rs_ans As ADODB\.Recordset Dim rs_transaction As ADODB\.Recordset Dim aSQL As String Set cnn = CurrentProject\.Connection Set rs_master = New ADODB\.Recordset Set rs_ans = New ADODB\.Recordset Set rs_transaction = New ADODB\.Recordset rs_master\.Open "master", cnn, adOpenKeyset, adLockOptimistic rs_ans\.Open "ans", cnn, adOpenKeyset, adLockOptimistic Do Until rs_master\.EOF rs_ans\.AddNew rs_ans!商品コード = rs_master!商品コード rs_ans!商品名 = rs_master!商品名 rs_ans!単価 = rs_master!単価 rs_ans\.Update rs_ans\.MoveNext rs_master\.MoveNext Loop rs_transaction\.Open "transaction", cnn, adOpenKeyset, adLockOptimistic rs_ans\.MoveFirst Do Until rs_transaction\.EOF If rs_ans!商品コード = rs_transaction!商品コード Then aSQL = "UPDATE ans SET ans\.商品名 = '" & rs_transaction!商品名 & "', ans\.単価 = " & rs_transaction!単価 & "" & _ " WHERE ans\.商品コード = " & rs_transaction!商品コード & "" If rs_transaction!単価 = 0 And rs_transaction!商品名 Is Null Then aSQL = "DELETE FROM ans" & _ " WHERE \(" & rs_transaction!単価 & " = 0\) & \(" & rs_transaction!商品名 & " IS NULL\)" End If ElseIf rs_ans!商品コード <> rs_transaction!商品コード Then aSQL = "INSERT INTO ans \( 商品コード, 商品名, 単価 \) SELECT transaction\.商品コード, transaction\.商品名, transaction\.単価 " & _ " FROM transaction WHERE ans\.商品コード <> " & rs_transaction!商品コード & "" End If rs_ans\.Close rs_ans\.Open aSQL, cnn, adOpenKeyset, adLockOptimistic rs_transaction\.MoveNext Loop Set rs_ans = Nothing rs_master\.Close: Set rs_master = Nothing rs_transaction\.Close: Set rs_transaction = Nothing cnn\.Close: Set cnn = Nothing End Sub

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

kaz.Suenaga
kaz.Suenaga

2016/03/25 02:12

master、ans、transaction のそれぞれのテーブルの関係性を整理していただけますか。 追加、削除、更新の対象は ans ですか。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。