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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Access

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2035閲覧

VB.netのデータをACCESSへ登録したいです

rarara_123

総合スコア11

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Access

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/04/14 07:06

編集2021/04/15 07:58

発生している問題
INSERT INTOステートメントの構文エラーを解消したいです。

エラーメッセージ
System.Data.OleDb.OleDbException: 'INSERT INTO ステートメントの構文エラーです。'

この例外は、最初にこの呼び出し履歴 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(System.Data.OleDb.OleDbHResult) System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(System.Data.OleDb.tagDBPARAMS, out object) System.Data.OleDb.OleDbCommand.ExecuteCommandText(out object) System.Data.OleDb.OleDbCommand.ExecuteCommand(System.Data.CommandBehavior, out object) System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(System.Data.CommandBehavior, string) System.Data.OleDb.OleDbCommand.ExecuteNonQuery() WindowsApp6.Form1.Button3_Click(Object, System.EventArgs) 場所: Form1.vb System.Windows.Forms.Control.OnClick(System.EventArgs) System.Windows.Forms.Button.OnClick(System.EventArgs) System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs) ... [呼び出し履歴が切り捨てられました] でスローされました

https://www.fenet.jp/dotnet/column/%E8%A8%80%E8%AA%9E%E3%83%BB%E7%92%B0%E5%A2%83/6260/
上記サイトを参考にINSERTINTOの記述を変えてみましたがエラー解消されません。

該当のソースコード

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 'Access接続準備 Dim command As New OleDbCommand Dim cnAccess As OleDbConnection = New OleDbConnection() 'SQL文作成 Dim cm As New OleDbCommand("INSERT INTO table2 ( 日付,出勤時間(時),出勤時間(分),退勤時間(時),退勤時間(分),給料) VALUES(@hiduke,@syukkinJikan,@syukkinHun,@taikinJikan,@taikinHun,@kyuuyoKakutei)", cnAccess) 'パラメーター化 cm.Parameters.Add(New OleDbParameter("@hiduke", hiduke)) cm.Parameters.Add(New OleDbParameter("@syukkinJikan", syukkinJikan)) cm.Parameters.Add(New OleDbParameter("@syukkinHun", syukkinHun)) cm.Parameters.Add(New OleDbParameter("@taikinJikan", taikinJikan)) cm.Parameters.Add(New OleDbParameter("@taikinHun", taikinHun)) cm.Parameters.Add(New OleDbParameter("@kyuuyoKakutei", kyuuyoKakutei)) '作成した接続文字列を設定 cnAccess.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database2.mdb" 'Access接続開始 cnAccess.Open() 'SQL文の実行 cm.ExecuteNonQuery() '終了 command.Dispose() cnAccess.Close() End Sub

使っているツールのバージョンなど補足情報
ACCESSのバージョン2016
Windows10の64ビット
WindowsForms
Visual Studio2019
NET Framework 4.8
AccessDatabaseEngine.exeインストール済です。

ご教示よろしくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/04/14 07:43

ソースコードの中身が空のイベントハンドラなど邪魔なだけです。コードを見てもらいたいと思うなら、全く関係ない余計なコードは削除して見やすくするとか、回答者・閲覧者に見てもらえる努力をしませんか? 見てもらえないと話が始まらないわけですから。
YAmaGNZ

2021/04/14 07:45

構築したSQLを確認しましたか? 文字列と変数名の区別が出来ていますか?
退会済みユーザー

退会済みユーザー

2021/04/14 07:48

エラーメッセージを書きましょう。
rarara_123

2021/04/14 08:14

大変失礼しました。余計なコードを削除いたしました。
rarara_123

2021/04/14 08:14

エラーメッセージを追加いたしました。
rarara_123

2021/04/14 08:16

文字列と変数名をもう一度チェックいたします。
YAmaGNZ

2021/04/14 08:20

実行しようとしているSQLを確認してください。 思っているSQLになっていますか?
rarara_123

2021/04/14 08:43

変数の区別が出来てないかもしれません。調べます。
退会済みユーザー

退会済みユーザー

2021/04/14 09:03

SQL 文は必ずパラメータ化しましょう。SQL インジェクション防止には必須です。加えて「ステートメントの構文エラー」という今回の問題も未然に防ぐことができます。 SQL 文を StringBuilder を使って組み立てるのは止めましょう。見にくくなってエラーを見つけにくくなるだけで何のメリットもありません。普通に文字列で書いてください。
rarara_123

2021/04/14 10:33

ありがとうございます。パラメーター化は気づけませんでした。 StringBuilderを使わないで文字列で書いてみます。
退会済みユーザー

退会済みユーザー

2021/04/15 01:07

> 変数の区別が出来てないかもしれません。調べます。 と書いてありますが、調べたのですか? 結果はどうだったのですか? 何が問題か分かったのですか? > ありがとうございます。パラメーター化は気づけませんでした。 と書いてありますが、パラメータ化ということを分かって言ってますか? 結局どうするのですか?  何か言われたけど、分からないけど取りあえずテキトーに返事を返したとしか思えませんけど。そうでないというなら、調べた結果、パラメータ化をどうするかを書いてください。
rarara_123

2021/04/15 01:33

①パラメーター化がどういうものか理解する。 ②パラメーターに書き換える。 ③StringBuilderを使わないで文字列で書く。 この順番で進める予定です。 今は①を取り組んでおります。
退会済みユーザー

退会済みユーザー

2021/04/15 01:35

> 変数の区別が出来てないかもしれません。調べます。 と書いてありますが、調べたのですか? 結果はどうだったのですか? 何が問題か分かったのですか?
rarara_123

2021/04/15 01:47

INSERT INTOの構文が間違っていると思います。
退会済みユーザー

退会済みユーザー

2021/04/15 01:50

> INSERT INTOの構文が間違っていると思います。 どう間違っているかを調べましょう。そこが分からないままにしておくのは、レスをもらった人に失礼です。
rarara_123

2021/04/15 01:53

仰るとおりです。調べます。
退会済みユーザー

退会済みユーザー

2021/04/15 01:55

sql.ToString の結果を見ればわかると思います。
退会済みユーザー

退会済みユーザー

2021/04/15 02:48 編集

上の 2021/04/15 10:33 の質問者さんのコメントの ① ~ ③ にはたぶんかなり時間がかかると思いますので、このスレッドは「INSERT INTOの構文が間違っていると思います」ということが確認出来たらクローズしていただけませんか? ① ~ ③ 以降の話は新たに別のスレッドを立てて質問していただければと思います。
rarara_123

2021/04/15 03:59

INSERT INTOの構文でも時間がかかりそうです。 ①~③について、承知しました。別スレッドを用意いたします。
退会済みユーザー

退会済みユーザー

2021/04/15 04:05

sql.ToString の結果を見たのですか? どうしてもわからなければ、その結果を質問欄にコピペしてどこが問題か聞いてはいかが?
rarara_123

2021/04/15 05:22

sql.ToStringの結果はわからなかったので結局見ることは出来ませんでした。 INSERT INTOそのものが書けていませんでした。正しい構文を書くことによってエラーが解消されました! ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/04/15 05:26

では、解決した方法 (正しい構文) を自分で解答欄に書いてこのスレッドはクローズしてください。
rarara_123

2021/04/15 05:30

承知しました。構文を追加してクローズします。
guest

回答1

0

自己解決

sql.ToStringの結果はわからなかったので結局見ることは出来ませんでした。
INSERT INTOそのものが書けていませんでした。正しい構文を書くことによってエラーが解消されました!

Dim cm As New OleDbCommand("INSERT INTO table2 ( DateTimePicker1.Text,syukkinJikan,syukkinHun,taikinJikan,taikinHun,kyuuyoKakutei) VALUES(DateTimePicker1.Text, @syukkinJikan,@syukkinHun,@taikinJikan,@taikinHun,@kyuuyoKakutei)")

ありがとうございました。

投稿2021/04/15 05:25

編集2021/04/15 05:28
rarara_123

総合スコア11

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

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

退会済みユーザー

退会済みユーザー

2021/04/15 05:27

その「正しい構文」というのを解答欄に書いてもらえませんか?
退会済みユーザー

退会済みユーザー

2021/04/15 06:07

それは SQL Server や MySQL の名前付きパラメータを使うパラメータ化された SQL 文で、質問者さんの OleDb + JET + Access で使えるはずがないです。 質問のコメント欄でも書きましたが、分からないから取りあえずテキトーに返事しているとしか思えませんけど・・・
rarara_123

2021/04/15 08:02

失礼しました。 上記の①パラメーター化がどういうものか理解する。②パラメーターに書き換える。 ③StringBuilderを使わないで文字列で書く。と混ざっておりました。 いろいろ調べながら修正してみましたが、まだエラーが解消されておりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問