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

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

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

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

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

Q&A

解決済

1回答

4008閲覧

VB.netのデータをACCESSで更新したいです

rarara_123

総合スコア11

Visual Studio

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

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

0グッド

0クリップ

投稿2021/04/19 07:47

編集2021/04/19 08:28

前提・実現したいこと
VB.netのデータをACCESSで更新したいです。

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

この例外は、最初にこの呼び出し履歴 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.Button5_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) ... [呼び出し履歴が切り捨てられました] でスローされました

該当のソースコード

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 'Access接続準備 Dim command As OleDbCommand Dim cnAccess As OleDbConnection = New OleDbConnection() 'SQL、更新 Dim cm As New OleDb.OleDbCommand("UPDATE table2 (Set [出勤時間(時)] = :11 where 日付 = :1", cnAccess) '作成した接続文字列を設定 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

UPDATEの基本構文は、問題なく記述出来ていると思われます。
UPDATE 表名
SET 列名 = 値
WHERE 更新する行を特定する条件

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

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

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

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

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

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

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

YAmaGNZ

2021/04/19 07:57

作成したSQLをACCESSで実行して、SQLが悪いのかプログラムが悪いのかを切り分けましょう。
sousuke

2021/04/19 07:58

.netのOleDb.OleDbCommandに関してはよく知りませんが「(Set」の開始のかっこが閉じてなかったり「 = :11」などのコロンを使ったSQLの記述方法は正しいものなのでしょうか? 「UPDATEの基本構文は、問題なく記述出来ていると思われます。」というのはどういう形で問題ないと判断しているのでしょうか?
rarara_123

2021/04/19 08:07

エラー内容が構文エラーなのでSQLそのものではなくプログラムが悪いと考えております。
rarara_123

2021/04/19 08:12

INSERTで使った分をUPDATEに置き換えています。 'SQL文作成 Dim cm As New OleDbCommand("INSERT INTO table2 ( 日付,[出勤時間(時)],[出勤時間(分)],[退勤時間(時)],[退勤時間(分)],給料) VALUES(@hiduke,@syukkinJikan,@syukkinHun,@taikinJikan,@taikinHun,@TextBox2.Text)", cnAccess) それと、調べたところ基本構文そのものは問題なく記述出来ていると思いました。
sazi

2021/04/19 08:12

VB.netのデータって何ですか? VB.NETでアクセスしているデータをAccessで更新したいという事なら、VB.netは取り敢えず関係なくて、VB.Netでどんなデータにアクセスしているかですけど。
rarara_123

2021/04/19 08:16

VB.netのフォームに入力したデータをACCESSに表示させてます。その表示させているデータをVB.net側から更新をさせたいです。
sazi

2021/04/19 08:21

> VB.netのフォームに入力したデータをACCESSに表示させてます。 「ACCESSに表示させてます」って何ですか? VB.NETのフォームからAccessのデータに追加していて、追加は出来ているけど更新もしたいという事ですか?
rarara_123

2021/04/19 08:24

仰るとおりでございます。 追加は出来ていて更新もしたいです。
YAmaGNZ

2021/04/19 08:38 編集

>エラー内容が構文エラーなのでSQLそのものではなくプログラムが悪いと考えております 貴方の判断ではなくACCESSでSQLを実行して切り分けをしましょう。 こういう場合は「思う」ではなくSQLのみで実行して何が間違っているのか確定させることが重要です。
rarara_123

2021/04/19 10:06

ありがとうございます。ACCESSを実行して切り分けをする方法を学ぶ事が出来ました。
退会済みユーザー

退会済みユーザー

2021/04/19 23:58

前のスレッド https://teratail.com/questions/333520 その前 https://teratail.com/questions/333203 もそうだけど、何か言われたけど、分からないから取りあえずテキトーに返事を返しているとしか思えませんけど。 何が問題か理解できてないから解決できていないでしょうから、きっとまた同じ質問をするのではないかと思ってますが、そういうの止めませんか?
guest

回答1

0

ベストアンサー

UPDATEの基本構文は、問題なく記述出来ていると思われます。

中途半端に(が残ったりパラメータ識別(:)らしきものが残っているので、駄目でしょうね。
良く分かりませんが、

Dim cm As New OleDbCommand("INSERT INTO table2 ( 日付,[出勤時間(時)],[出勤時間(分)],[退勤時間(時)],[退勤時間(分)],給料) VALUES(@hiduke,@syukkinJikan,@syukkinHun,@taikinJikan,@taikinHun,@TextBox2.Text)", cnAccess)

上記で上手くいったのなら、以下の様にしてみたらどうですか。

"UPDATE tables Set [出勤時間(時)] = @syukkinJikan where 日付 = @hiduke"

ここで@XXXはパラメータですから値のセットは事前に行っておく必要があります。
insertが上手くいっているなら、そのロジックはあるのでしょうからそれを流用すれば良いでしょう。

因みにパラメータ識別に@を使用するのはSQL ServerかMySQLとかなので、Accessは単にリンクテーブルではないのでしょうか。

投稿2021/04/19 08:37

編集2021/04/19 08:43
sazi

総合スコア25173

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

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

rarara_123

2021/04/19 10:10

今日半日使っても解消出来なかったのでとても助かります。ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/04/20 00:02

> Accessは単にリンクテーブルではないのでしょうか。 OleDb + JET + Access なら位置パラメータマーカ ? です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問