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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

2558閲覧

access2016更新クエリのSQL文(update,Dmax)の書き方について

renny

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/10/01 11:30

編集2019/10/04 00:36

初めまして。閲覧ありがとうございます。
access2016、windows10で在庫管理システムを作っていますが、わからない部分があるので質問させて下さい。

SQLのupdateでT_単価マスタの更新日とT_入出庫滅失データの出庫日を比べ、T_入出庫滅失データの出庫日より小さいT_単価テーブルの更新日の最新を取ってきてT_入出庫滅失データのフィールド、単価参照日に数値を更新します。その際、T_単価マスタとT_入出庫滅失データのレコードにある会社商品名が一致しているものを比較します。

使うテーブル

CREATE TABLE T_単価マスタ(
ID COUNTER PRIMARY KEY,
会社名 CHAR(255),
商品名 CHAR(255),
単価 INT,
更新日 DATE,
会社商品名 CHAR(255)
);

CREATE TABLE T_入出庫滅失データ(
ID COUNTER PRIMARY KEY,
商品名 CHAR(255),
入庫日 DATE,
出庫日 DATE,
滅失日 DATA,
入庫数 INT,
出庫数 INT,
滅失数 INT,
会社名 CHAR(255),
単価 INT,
更新日 DATE,
単価参照日 DATE,
会社商品名 CHAR(255)
);

更新クエリSQLコード

UPDATE T_入出庫滅失データ SET T_入出庫滅失データ.単価参照日 = DMax("更新日","T_単価マスタ","[更新日]<=#" & Format([出庫日],"yyyy/mm/dd") & "#" And "会社商品名 = '[T_単価マスタ]![会社商品名]'");

T_単価マスタ 2019/8/1
T_入出庫滅失データ 2019/9/1  
update後→T_入出庫滅失データ 単価参照日 20190801

T_単価マスタ 2019/10/1
Bテーブル 2019/11/1
update後→T_入出庫滅失データ 20191001

しかし実際は

T_単価マスタ 2019/8/1
T_入出庫滅失データ 2019/9/1
update後→T_入出庫滅失データ 20191001

T_単価マスタ 2019/10/1
T_入出庫滅失データ 2019/11/1
update後→T_入出庫滅失データ 20191001

となってしまいます。

原因として考えられるのは

①日付型を直接比較できないので、formatで文字列型になおして比較しているがそれがうまくいっていない

②文法ミス

です。
お力添えよろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2019/10/01 12:51

Aテーブル、Bテーブルと言う仮名ではなく、実名にしてください。 もし実名をだすのがまずいなら、SQLも含めてすべて仮名に統一してください。 それと、それぞれのテーブルのフィールド名とデータ型を列挙してください。また、主キー設定も提示してください。
Orlofsky

2019/10/01 19:37

>UPDATE T_入出庫滅失データ SET T_入出庫滅失データ.単価参照日 = DMax("更新日","T_単価マスタ","[更新日]<=#" & Format([出庫日],"yyyy/mm/dd") & "#" And "会社商品名 = '[T_単価マスタ]![会社商品名]'"); >Aテーブル 2019/8/1 >Bテーブル 2019/9/1   update後→Cテーブル値 20190801 T_入出庫滅失データ や T_単価マスタ と Aテーブル, Bテーブル, Cテーブル のテーブル名は一致させないと誰にも理解できません。
sazi

2019/10/02 00:46

説明にはA,B,C三つのテーブルが出てきますが、updateでは2つのテーブルしか出てきていませんけど?
renny

2019/10/02 13:43

拙い質問で申し訳ありませんでした。修正しましたので、お時間あるときに確認よろしくお願いします。
hatena19

2019/10/02 14:07

CREATE TABLE 文の提示ありがとうございます。 マークダウン記法のコードタグ内にいれてください。SQLコードを選択して、ツールバーの <code> をクリックすればOKです。 あと、SQLに全角空白、全角文字が紛れ込んでいますので、半角に変更しておいてください。
hatena19

2019/10/02 14:09 編集

2つのテーブルは一対多の関係だと思いますか、2つのテーブルを結合するフィールドは何になりますか。 あと、データ例も数件でいいので提示してもらえますか。
renny

2019/10/04 00:44

ご指摘ありがとうございます。自分なりに修正してみました。2つのテーブルは直接リレーションはなっておらず、T_商品マスタという別のテーブルの商品名とそれぞれ一対多でリレーションをしております。申し訳ないです、データ例は会社と単価も入ってしまっている関係上ちょっと提示が難しいです。
guest

回答1

0

ベストアンサー

現状のままでSQLの文法ミスを修正するなら、下記のような感じでしょうか。

sql

1UPDATE T_入出庫滅失データ 2SET 3 T_入出庫滅失データ.単価参照日 = 4 DMax("更新日","T_単価マスタ", 5 "[更新日]<=#" & Format([出庫日],"yyyy/mm/dd") & "# " & 6 "And 会社商品名 = '" & [会社商品名] & "'");

ただ、テーブルの正規化を検討された方かいいかと思います。

正規化の一例

T_商品マスター
商品コード 主キー
商品名
会社名

T_商品単価マスター
商品単価コード 主キー
商品コード T_商品マスターの外部キー
単価
更新日

T_入出庫滅失データ
入出庫滅失ID 主キー
商品単価コード T_商品単価マスターの外部キー
入庫日
出庫日
滅失日
入庫数
出庫数
滅失数

投稿2019/10/03 00:25

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renny

2019/10/04 00:45

ご指摘ありがとうございます! SQL変更したら無事に動きました。おっしゃっているようにテーブルの正規化をしてもっとブラッシュアップしていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問