• ベストアンサー

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

  • 命令文が長文になります 行を分割入力出来ますか

    何度もお世話になります。 QNo.3140739 の続きです。 以下はレコード挿入のルーチンです Function 介護メモ挿入() on Error GoTo レコード挿入_Err DoCmd.SetWarnings False DoCmd.RunSQL "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月) values (利用者 , 日付 , 身体単位 , 生活単位 , 開始時刻,年月)", -1 DoCmd.SetWarnings True レコード挿入_Exit: Exit Function レコード挿入_Err: MsgBox Error$ Resume レコード挿入_Exit End Function これで実行は出来たのですが、文中の介護メモは実際にはフィールド数が38ある介護記録というテーブルです。長い命令文になります。 画面内に表示できるように命令文の分割をしたいのですが 以下のように変更したのですが「クエリ式'11:00:00'の構文エラー」と時刻項目は文字列扱いのようです 同様に日付項目は分数式扱い? Function 介護メモ挿入() DIM SQL文 as String SQL文 = "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月) values (" SQL文 = SQL文 & """" & 利用者 & """," & 日付 & "," & 身体単位 & "," & 生活単位 & "," & 開始時刻 SQL文 = SQL文 & "," & 年月 & ")" On Error GoTo レコード挿入_Err DoCmd.SetWarnings False DoCmd.RunSQL SQL文, -1 DoCmd.SetWarnings True レコード挿入_Exit: Exit Function レコード挿入_Err: MsgBox Error$ Resume レコード挿入_Exit End Function

  • ACCESS のテーブルからテキストボックスへSQL文で取り出すことは出来ますか

    お世話になります。 ACCESS2000です。 フォームには既にテーブルが定義してあります。 このフォーム上のテキストボックスに別のテーブルの項目を取り出したいのですが? 二つのテーブルにはリレーションは有りません DoCmd.RunSQL ("Insert into [会計責任者] Select 会計担当 FROM 役員TBL where 会計年度=[期初日];") ではSQL文の構文エラーのメッセージになります 簿記のシステムを作っています。 会計担当は毎年入れ替わるので役員TBLを定義しました 会計年度:各会計年度の期初日(2008-4-1) 会長 会計担当 … [期初日]、[会計責任者] はフォーム上にテキストボックスとして定義しました。

  • AccessのRunSQLのINSERTでの確認メッセージを消す方法。

    こんにちは。 AccessのRunSQLのINSERTでの確認メッセージを出さない方法を知りたいと思っています。 下記き構文をAccess2000/VBAにて作成しましたが、 DoCmd.RunSQL "INSERT INTO test VALUES ('a','b');" 「一件追加します・・・・」という確認メッセージが表示されてしまいます。 これを出さない方法を知りたいです。 宜しくお願い致します。

  • access の UPDATE のSQL文教えてください

    下記は合計テーブルの振仮名へ利用者テーブルの振仮名をセットする文です。 実行すると「構文エラー、演算子がありません」とメッセージです DoCmd.RunSQL "update 合計 set 合計.振仮名 = 利用者.振仮名 from 利用者 WHERE 合計.利用者 = 利用者.利用者;" 利用者テーブルは[利用者]がキー項目になっています 合計テーブルはキー項目を持たないテーブルで[利用者],[振仮名]、[金額]の各項目があります。

  • Access にて DISTINCROW を使用した INSERT SELECT

    お世話様です。 Access2003 VBAにて、DoCmd.RunSQLを使用してSQL文を流す際、 普通のINSERT-SELECT文はOKですが、 そのSELECT文にDISTINCROW句を使用していると、 数百件程度のSELECT結果しかINSERTできません。 本当は数千件のSELECT結果をINSERTしたいのですが、 これを実行した場合、エラーにもならず、1レコードもINSERTされません。 ためしに、DINSTINCTROWではなく、SQL文を変更してDISTINCTにしてみたところ、 2000件以上でもINSERTできました。 DISTINCROW句を使用して数千件でもINSERTできる方法はあるでしょうか? ちなみにSELECT単体ですと、DISTINCTROWを使用していながら、 数千件でも結果を表示できます。 SQL例: str_SQL = " INSERT INTO 結果テーブル(フィールド1, フィールド2, フィールド3)  SELECT DISTINCTROW A.項目1, A.項目2, B.項目1  FROM テーブル1 A, テーブル2 B  (WHERE句はあってもなくても現象変わらず)  ORDER BY A.項目4 ASC, A.項目5 ASC " DoCmd.RunSQL (str_SQL) よろしくお願いいたします。

  • ACCESSでSQL文

    宜しくお願いします。 ACCESS2000で 仕訳帳テーブルの特定期間の科目ID別集計を中間テーブルに生成する処理の以下の文でエラーメッセージが出ます。 DoCmd.RunSQL ("Insert Into 中間(月度,科目ID,借方計,貸方計) " _ & "Select 開始日,科目ID,sum(借方),Sum(貸方) From 仕訳帳" _ & "Group By 科目ID where (仕訳日 >= 開始日) and (仕訳日 <= 終了日)") エラーメッセージの内容は 「クエリー式’科目ID where (仕訳日 >= 開始日) and (仕訳日 <= 終了日)'の構文エラー:演算子がありません」

  • Access2000におけるテーブル追加について

    テーブル1にテーブル2の内容をすべて追加しようと思います。 二つのテーブルのフィールド項目は同じにしました。(テストなのでとりあえず番号と名前) マクロを使ってやろうと思い、アクションを「SQLの実行」とし、SQLステートメント には「INSERT INTO <テーブル1> SELECT<社員番号>,<名前>FROM<テーブル2>」 としました。 しかし、マクロを実行してみると「INSERT INTO 構文エラー」となってしまいます。 なぜなんでしょうか?

  • Docmd.RunSQL 文で 追加時の確認メッセージの省略出来ますか

    QNo.3140739,QNo.3141094の追加質問です。 テーブルへ追加書き込み処理に DoCmd.RunSQL "insert into 介護メモ values(ID,利用者,日付,身体単位,生活単位,開始時刻)", 0 としましたところ、確認メッセージが出て,OKをクリックすると書き込んでくれるのですが、一度に2000件前後のデータを追加します。 この確認メッセージを省略する方法を教えてください

  • DoCmd.RunSQL "DROP Query

    アクセスVBAで DoCmd.RunSQL "DROP Query クエリ1;" はできないのですか? DROP TABLE または DROP INDEX ステートメントの構文エラーです。 (エラー 3295) となります。 テーブルを削除する場合は DoCmd.RunSQL "DROP Table テーブル1;" でエラーにならずにできました。 DROPはクエリに対しては使えないのか教えてください。

  • Insert文で・・・

    失礼します。SQL初心者なので質問します。 Insert into Aテーブル Select X , Y , Z From Bテーブル というSQLがあり、Aテーブルの列数を3から4にした際、AテーブルへのInsertの項目を、BテーブルからSelectされたX,Y,Z以外に普通の変数αも新たに作成した4つめの項目として同時にInsertしたい場合、どのようなSQLにすれば良いでしょうか? Insert into Aテーブル (Select X , Y , Z From Bテーブル),α みたいに都合良くはいきませんよね??

専門家に質問してみよう