• ベストアンサー

accessの SQL文 INSERT命令

次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。 文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

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

  • ベストアンサー
  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.8

質問に書かれている、「フォーム上に定義したテキスト項目」とあるのが、フォームのモジュールに定義してあるものなのか、フォーム上のテキストボックスなのか? フォーム上とありましたので、テキストボックスと判断し最初の回答をしたのですが、実際のテーブルの項目のデータ型が不明なので、詳細は書きませんでしたが、混乱されてもいけませんので フォーム上のテキストボックスの場合の時の参考までに。 利用者:テキスト 日付:日付型 ほかは、数値扱い(開始時刻はたぶん数値ではないと思いますが) とした場合 No2さんの回答の様に Dim Sqlstr As String Sqlstr = "insert into 介護メモ (利用者,日付,身体単位,生活単位,開始時刻) " & _ "values ("" & Me!利用者 & "",#" & Me!日付 & "#," & Me!身体単位 & _ "," & Me!生活単位 & "," & Me!開始時刻 & ")" DoCmd.RunSQL Sqlstr

その他の回答 (7)

回答No.7

えーと構文調べました? 普通は INSERT INTO テーブル名 (項目名1,項目名2)   VALUES (入れる値1,入れる値2) デスよ。 ・valuesの位置がおかしい ・テーブルの項目が5つあるのに入れる値が-1の1つしかない 項目名と入れる値はちゃんと対応してないと。 (コピーが切れてるだけ?) insert into 介護メモ (,利用者,日付,身体単位,生活単位,開始時刻) values (-1,・・・・) となるはず?

shinkami
質問者

お礼

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

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.6

No2 です。 大変失礼しました。No5さんの通りです。 以下のように項目名を列挙してください。 DoCmd.RunSQL "insert into 介護メモ (利用者,日付,身体単位,生活単位,開始時刻) '←項目名        values (利用者,日付,身体単位,生活単位,開始時刻)", -1     '←データ値

shinkami
質問者

お礼

よく分かりました

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.5

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

shinkami
質問者

お礼

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

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

No.2です。 ID も項目なので、項目として入れてください。 但し、IDにはテーブル上のに存在しない値(MAX値+1)を設定してください。 ※ 以下のように「介護メモ」テーブルの「ID」の最大値を求めて、最大値+1 にして設定してください。 Select MAX(ID) AS ID FROM 介護メモ DoCmd.RunSQL "insert into 介護メモ values (ID,利用者,日付,身体単位,生活単位,開始時刻)", -1

shinkami
質問者

補足

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

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.3

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

shinkami
質問者

お礼

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

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

おやようございます。 書き方の間違いです。 value→values と項目名「利用者」前の「,」は要りませんよ。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1  ↓ DoCmd.RunSQL "insert into 介護メモ values (利用者,日付,身体単位,生活単位,開始時刻)", -1

shinkami
質問者

お礼

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

shinkami
質問者

補足

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

回答No.1

value → values では?

shinkami
質問者

お礼

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

shinkami
質問者

補足

ご回答ありがとうございます。 一歩前進しましたが、まだエラーがあるようです。 失礼とは存知ますが、残ったのエラーの内容は他の回答者様の補足に記述しましたので、ここでは省略させて戴きます。

関連するQ&A