こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

accessの SQL文 INSERT命令

次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。
文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。

DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

投稿日時 - 2007-07-05 03:38:55

QNo.3140739

困ってます

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

質問に書かれている、「フォーム上に定義したテキスト項目」とあるのが、フォームのモジュールに定義してあるものなのか、フォーム上のテキストボックスなのか?
フォーム上とありましたので、テキストボックスと判断し最初の回答をしたのですが、実際のテーブルの項目のデータ型が不明なので、詳細は書きませんでしたが、混乱されてもいけませんので フォーム上のテキストボックスの場合の時の参考までに。

利用者:テキスト
日付:日付型
ほかは、数値扱い(開始時刻はたぶん数値ではないと思いますが)
とした場合 No2さんの回答の様に
Dim Sqlstr As String
Sqlstr = "insert into 介護メモ (利用者,日付,身体単位,生活単位,開始時刻) " & _
"values ("" & Me!利用者 & "",#" & Me!日付 & "#," & Me!身体単位 & _
"," & Me!生活単位 & "," & Me!開始時刻 & ")"
DoCmd.RunSQL Sqlstr

投稿日時 - 2007-07-05 16:30:53

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

えーと構文調べました?

普通は

INSERT INTO テーブル名 (項目名1,項目名2)
  VALUES (入れる値1,入れる値2)

デスよ。

・valuesの位置がおかしい
・テーブルの項目が5つあるのに入れる値が-1の1つしかない

項目名と入れる値はちゃんと対応してないと。
(コピーが切れてるだけ?)


insert into 介護メモ (,利用者,日付,身体単位,生活単位,開始時刻)
values (-1,・・・・)

となるはず?

投稿日時 - 2007-07-05 15:21:09

お礼

命令文の構成をあいまいにしていました。

投稿日時 - 2007-07-12 14:07:25

ANo.6

No2 です。
大変失礼しました。No5さんの通りです。
以下のように項目名を列挙してください。

DoCmd.RunSQL "insert into 介護メモ (利用者,日付,身体単位,生活単位,開始時刻) '←項目名
       values (利用者,日付,身体単位,生活単位,開始時刻)", -1     '←データ値

投稿日時 - 2007-07-05 15:03:46

お礼

よく分かりました

投稿日時 - 2007-07-12 14:04:25

ANo.5

オートナンバーは、最大値+1とは限りません。
ID=11まで登録後、そのデータを削除し現在の最大値が10の場合
次に追加する際は、IDは あくまでも12となります。
ACCESSが勝手に採番してくれるので あえて並べる必要はありません
セットするフィールド名をIDを除き列挙する方がよいと思いますが・・

投稿日時 - 2007-07-05 13:52:24

お礼

有難うございます。
フィールド名の記述が必要でした。

投稿日時 - 2007-07-12 14:02:35

ANo.4

No.2です。

ID も項目なので、項目として入れてください。
但し、IDにはテーブル上のに存在しない値(MAX値+1)を設定してください。
※ 以下のように「介護メモ」テーブルの「ID」の最大値を求めて、最大値+1 にして設定してください。
Select MAX(ID) AS ID FROM 介護メモ

DoCmd.RunSQL "insert into 介護メモ values (ID,利用者,日付,身体単位,生活単位,開始時刻)", -1

投稿日時 - 2007-07-05 13:05:19

補足

度々の回答ありがとうございます。
Select MAX(ID) AS ID FROM 介護メモ
とするとコンパイルエラーになります。
DoCmd.RunSQL "Select max(介護ID) AS ID FROM 介護メモ"
とすると実行時エラーになります。メッセージは
「”RunSQL/SQLの実行”アクションを実行するには,SQLステートメントからなる引数を指定する必要があります」
どのように記述するのですか?

投稿日時 - 2007-07-05 21:57:13

ANo.3

皆さんの回答に加えて・・
フォーム上に定義したテキスト項目名を、SQL文に そのまま記述できませんので そもそもの書き方が間違っていますよ。
テキスト項目の前で、一旦SQL文を " で囲い & で テキスト項目を
接続して書きます。
また、その項目が文字、数値、日付により、接続部分に工夫がいる
(SQL文としておかしくないように)場合もあります。
介護メモのオートナンバーをのぞく 項目名もちゃんと記述したほうがよいですね。

投稿日時 - 2007-07-05 11:30:49

お礼

有難うございます。
SQL文が間違っていました。勉強になりました。

投稿日時 - 2007-07-12 13:59:46

ANo.2

おやようございます。

書き方の間違いです。
value→values と項目名「利用者」前の「,」は要りませんよ。

DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1
 ↓
DoCmd.RunSQL "insert into 介護メモ values (利用者,日付,身体単位,生活単位,開始時刻)", -1

投稿日時 - 2007-07-05 09:08:45

補足

ご回答ありがとうございます。 一歩前進です。
ご指摘の通り
DoCmd.RunSQL "insert into 介護メモ values (利用者,日付,身体単位,生活単位,開始時刻)", -1
としますと「クエリーの値と出力するフィールドの数が一致しません」とエラーメッセージが変わりました。
オートナンバー書式のキー項目[ID]に関係あるのでしょうか「,」を残しますと
[INSERT INTOステートメントの構文エラーです。] ともとのメッセージに戻ります。

投稿日時 - 2007-07-05 11:11:26

お礼

お礼遅くなりました。
皆様のお蔭でシステムが一つ完成しました。

投稿日時 - 2007-07-12 13:17:46

ANo.1

value → values では?

投稿日時 - 2007-07-05 04:40:54

補足

ご回答ありがとうございます。
一歩前進しましたが、まだエラーがあるようです。

失礼とは存知ますが、残ったのエラーの内容は他の回答者様の補足に記述しましたので、ここでは省略させて戴きます。

投稿日時 - 2007-07-05 11:23:30

お礼

有難うございました。
皆様のお陰でシステムが一つ完成しました。
ただ、一括更新でテーブルのデータをフォームのテキストBOXに呼び出して処理をしていますので一月分のデータ5000件程度を生成するのに5分程度掛かりそうなので、
http://kikitai.teacup.com/qa3141094.html」ANo.4で[chie65536]様の指摘していただきましたので手直しを加えようと思っています。

投稿日時 - 2007-07-12 13:53:49

あなたにオススメの質問