Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルフォームコントロール値とテーブル値が重複しない場合にinsertする
記事No10888
投稿日: 2017/12/02(Sat) 23:30
投稿者13
OS:win10
Access Version:2016

よろしくお願いします。

【環境】
Accessフォーム上に、
「年度」「部署コード」という名前のテキストボックスコントロールと、
「更新」コマンドボタンがあります。
テーブルAに、
「Nendo」「BushoCode」というフィールド名があります。


【やりたいこと】
「更新」ボタンを押すと、
テーブルA「BushoCode」フィールドに
「部署コード」テキストボックスの値を重複しないようにInsertしたいです。


【記述コード】(年度と部署コードのデータ型は数値型)
Dim adocon As ADODB.Connection
Dim sql As String

Set adocon = CurrentProject.Connection

sql = "INSERT INTO テーブルA (Nendo, BushoCode) VALUES (" & Me.年度.Value & ", " & Me.部署コード.Value & ")"
sql = sql & "AND NOT EXISTS (SELECT 'X' FROM テーブルA WHERE テーブルA.[BushoCode] = " & Me.部署コード.Value & ")"

adocon.Execute (sql)


【質問】
 上記を実行すると、「SQLステートメントの最後には、セミコロン(;)が必要です。」
という実行時エラーが出ますが、どこにセミコロンを入れればいいのか分かりません。
 そもそも上記の記述で可能なのか、ご教授お願いできればと思います。よろしくお願いします。

タイトルRe: フォームコントロール値とテーブル値が重複しない場合にinsertする
記事No10889
投稿日: 2017/12/05(Tue) 14:08
投稿者mayu
> 上記を実行すると、「SQLステートメントの最後には、セミコロン(;)が必要です。」
> という実行時エラーが出ますが、どこにセミコロンを入れればいいのか分かりません。
> そもそも上記の記述で可能なのか、ご教授お願いできればと思います。よろしくお願いします。

セミコロンの問題ではありませんので、エラーメッセージ自体は不適切ですけど
掲載いただいた SQL文は WHERE の記述が抜けているため
結局は構文エラーになってしまいます。

また、INSERT INTO ... VALUES ... WHERE NOT EXISTS も
実行可能な構文ではないですから、以下のように書き換えて下さい。

※ 部署コードを 999 とした場合

INSERT INTO テーブルA ( Nendo, BushoCode )
SELECT 2017, 999 
FROM テーブルA
WHERE BushoCode = 999
HAVING Count(1) = 0 ;

タイトルRe^2: フォームコントロール値とテーブル値が重複しない場合にinsertする
記事No10890
投稿日: 2017/12/11(Mon) 11:53
投稿者13
mayuさん

ありがとうございます!
ご教授いただいた内容で解決しました。

HAVING Ccountを初めて知りました。
また機会があればよろしくお願いいたします。


> > 上記を実行すると、「SQLステートメントの最後には、セミコロン(;)が必要です。」
> > という実行時エラーが出ますが、どこにセミコロンを入れればいいのか分かりません。
> > そもそも上記の記述で可能なのか、ご教授お願いできればと思います。よろしくお願いします。
>
> セミコロンの問題ではありませんので、エラーメッセージ自体は不適切ですけど
> 掲載いただいた SQL文は WHERE の記述が抜けているため
> 結局は構文エラーになってしまいます。
>
> また、INSERT INTO ... VALUES ... WHERE NOT EXISTS も
> 実行可能な構文ではないですから、以下のように書き換えて下さい。
>
> ※ 部署コードを 999 とした場合
>
> INSERT INTO テーブルA ( Nendo, BushoCode )
> SELECT 2017, 999
> FROM テーブルA
> WHERE BushoCode = 999
> HAVING Ccount(1) = 0 ;

タイトルRe^3: フォームコントロール値とテーブル値が重複しない場合にinsertする
記事No10891
投稿日: 2017/12/11(Mon) 17:43
投稿者mayu
> HAVING Ccountを初めて知りました。

SQL文中にスペルミスがありました。ごめんなさい。

(誤)
HAVING Ccount(1) = 0 ;

(正)
HAVING Count(1) = 0 ;

※ 記事No:10889 も修正しておきました。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る