この記事では、クエリファイルから取得した更新系のクエリ(INSERT・UPDATE・DELETE)を実行してAccessのテーブルデータを更新する方法についてご説明します。
今回扱う更新系のクエリとは、テーブルデータを更新するINSERT、UPDATE、DELETEのクエリのことを指します。
【動画】クエリファイルから取得した更新系のクエリ(INSERT・UPDATE・DELETE)を実行してAccessのテーブルデータを更新する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
PowershellからSQLiteのデータベースに接続してデータを取得し、そのデータをCSVファイルにエクスポートしています。
コードの流れ
Accessのテーブルのとクエリファイルの例
Accessのテーブル
Accessのデータベースに「t_item」のテーブルが存在しており、10件データが存在しています。
クエリファイル
今回は3種類のクエリファイルを用意しました。
①INSERT実行用クエリファイル
以上は、「t_item」にデータを追加するINSERT文が記述されたクエリファイルです。
このINSERT実行用クエリファイルを読み込んでINSERT文を実行すると、1件データが追加されます。
このINSERT実行用クエリファイルを読み込んでINSERT文を実行した結果は下のとおりです。
INSERT文が実行されて、データが1件追加されています。
②UPDATE実行用クエリファイル
以上は、「t_item」のデータを更新するUPDATE文が記述されたクエリファイルです。
このUPDATE実行用クエリファイルを読み込んでUPDATE文を実行すると、条件(名前がトマトのデータ)に該当するデータが更新されます。
このUPDATE実行用クエリファイルを読み込んでUPDATE文を実行した結果は下のとおりです。
UPDATE文が実行されて、条件に該当するデータが更新されています。
③DELETE実行用クエリファイル
以上は、「t_item」のデータを削除するDELETE文が記述されたクエリファイルです。
このDELETE実行用クエリファイルを読み込んでDELETE文を実行すると、条件(項番が1のデータ)に該当するデータが削除されます。
このDELETE実行用クエリファイルを読み込んでDELETE文を実行した結果は下のとおりです。
DELETE文が実行されて、条件に該当するデータが削除されています。
PowerShellのコード(例)
# フォルダパスを設定する $folderPath = "C:\work\10_勉強\18_PowerShell\0026\" # データベースのパスとクエリファイルのパスを指定 $dbPath = ($folderPath, "0026.mdb" -join '') # クエリファイルのパスを指定 $queryPath = ($folderPath, "0026.sql" -join '') # 接続文字列を設定する $connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$dbPath;" # OleDbConnectionオブジェクトを生成する $connection = New-Object System.Data.OleDb.OleDbConnection($connectionString) # クエリをファイルから読み込む $query = Get-Content $queryPath # OleDbCommandオブジェクトを生成する $command = New-Object System.Data.OleDb.OleDbCommand($query, $connection) # データベースに接続する $connection.Open() # クエリを実行する $command.ExecuteNonQuery() | Out-Null # 接続を閉じる $connection.Close()
注目すべきコード①
最初に見て頂きたいのは2行目から8行目です。
# フォルダパスを設定する $folderPath = "C:\work\10_勉強\18_PowerShell\0026\" # データベースのパスとクエリファイルのパスを指定 $dbPath = ($folderPath, "0026.mdb" -join '') # クエリファイルのパスを指定 $queryPath = ($folderPath, "0026.sql" -join '')
コードの説明
以上のコードは、データベースのフルパスとクエリファイルのフルパスを設定するコードです。
注目すべきコード②
次に見て頂きたいのは11行目から14行目です。
# 接続文字列を設定する $connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$dbPath;" # OleDbConnectionオブジェクトを生成する $connection = New-Object System.Data.OleDb.OleDbConnection($connectionString)
コードの説明
以上のコードは、接続文字列を作成してAccessConnectionオブジェクトを生成するコードです。
Accessのデータベースに接続するための接続情報をAccessConnectionオブジェクトに格納します。
このコードにより、どのAccessのデータベースに接続するのか、PowerShellが認識できるようになります。
注目すべきコード③
次に見て頂きたいのは17行目です。
# クエリをファイルから読み込む $query = Get-Content $queryPath
コードの説明
以上のコードは、クエリをファイルから読み込む処理のコードです。
以上のコードを実行することで今回実行したいクエリがPowershellで読み込まれます。
注目すべきコード④
次に見て頂きたいのは20行目です。
# OleDbCommandオブジェクトを生成する $command = New-Object System.Data.OleDb.OleDbCommand($query, $connection)
コードの説明
以上のコードは、クエリをOleDbCommandメソッドに渡してOleDbCommandオブジェクトを生成するコードです。
OleDbCommandオブジェクトを生成することで、クエリを実行することができるようになります。
注目すべきコード⑤
次に見て頂きたいのは23行目です。
# データベースに接続する $connection.Open()
コードの説明
以上のコードは、PowerShellがデータベースに接続する処理のコードです。
注目すべきコード⑥
次に見て頂きたいのは26行目です。
# クエリを実行する $command.ExecuteNonQuery() | Out-Null
コードの説明
以上のコードは、クエリを実行する処理のコードです。
Out-Nullは実行結果をコンソール上で非表示にするコマンドレットです。
今回は実行結果をコンソール上で表示にする必要が無いので、Out-Nullコマンドレットを実行します。
注目すべきコード⑦
次に見て頂きたいのは29行目です。
# 接続を閉じる $connection.Close()
コードの説明
以上のコードは、データベースとの接続を閉じる処理のコードです。
動作確認
「Accessのテーブルのとクエリファイルの例」をご覧ください。
最後に
この記事では、クエリファイルから取得した更新系のクエリ(INSERT・UPDATE・DELETE)を実行してAccessのテーブルデータを更新する方法についてご説明しました。
Powershellからクエリファイルから更新系のクエリ(INSERT・UPDATE・DELETE)を取得して実行したい場合は本記事を参考にして頂けたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。