powershell:form_sqlite_db_client
文書の過去の版を表示しています。
FormsとSQLiteによる簡易DBクライアント
Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # sqlite3.dll を読み込む Add-Type -Path ".\System.Data.SQLite.dll" # フォーム作成 $form = New-Object System.Windows.Forms.Form $form.Text = "Easy DB Client" $form.Size = New-Object System.Drawing.Size(1000,600) # DBのファイルパス(無ければ新規作成) $dbFile = ".\test.db" $connectionString = "Data Source=$dbFile;Version=3;" if (-not (Test-Path $dbFile)) { [System.Data.SQLite.SQLiteConnection]::CreateFile($dbFile) } # SQLite 接続オブジェクトを作成 $conn = New-Object System.Data.SQLite.SQLiteConnection($connectionString) $conn.Open() # コマンドオブジェクト $cmd = $conn.CreateCommand() # --- テーブルリスト表示 --- $cmd.CommandText = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;" $labelTable = New-Object System.Windows.Forms.Label $labelTable.Text = "テーブルリスト" $labelTable.Location = New-Object System.Drawing.Point(20,20) $labelTable.Size = New-Object System.Drawing.Size(100,15) $listBoxTable = New-Object System.Windows.Forms.ListBox $listBoxTable.Size = New-Object System.Drawing.Size(300,200) $listBoxTable.Location = New-Object System.Drawing.Point(20,40) # 実行 $reader = $cmd.ExecuteReader() while ($reader.Read()) { $tableName = $reader["name"] $listBoxTable.Items.Add($tableName) } $reader.Close() # レコード表示ボタン $btnShow = New-Object System.Windows.Forms.Button $btnShow.Text = "表示" $btnShow.Location = New-Object System.Drawing.Point(20,500) # 保存ボタン $btnSave = New-Object System.Windows.Forms.Button $btnSave.Text = "保存" $btnSave.Location = New-Object System.Drawing.Point(100,500) # DataGridView $dataGrid = New-Object System.Windows.Forms.DataGridView $dataGrid.Location = New-Object System.Drawing.Point(350,50) $dataGrid.Size = New-Object System.Drawing.Size(600,400) $dataGrid.AutoSizeColumnsMode = "Fill" $dataGrid.AllowUserToAddRows = $true $dataGrid.AllowUserToDeleteRows = $true $dataGrid.ReadOnly = $false # 変数をフォームスコープで共有 $dataTable = $null $adapter = $null $table = $null # レコード表示ボタンイベント $btnShow.Add_Click({ if ($listBoxTable.SelectedItem -ne $null) { $table = [string]$listBoxTable.SelectedItem $cmd.CommandText = "SELECT * FROM [$table];" $script:adapter = New-Object System.Data.SQLite.SQLiteDataAdapter $cmd # 自動でINSERT/UPDATE/DELETEコマンドを生成 $script:builder = New-Object System.Data.SQLite.SQLiteCommandBuilder $adapter $script:dataTable = New-Object System.Data.DataTable [void]$script:adapter.Fill($dataTable) $dataGrid.DataSource = $dataTable } }) # 保存ボタンクリックイベント $btnSave.Add_Click({ if ($script:adapter -ne $null -and $script:dataTable -ne $null) { try { # DataGridView の編集中セルを確定 if ($dataGrid.IsCurrentCellInEditMode) {$dataGrid.EndEdit() } $dataGrid.CurrentCell = $null # フォーカスを外して編集を確定 # DataTableの変更を確認 $changes = $script:dataTable.GetChanges() if ($changes -ne $null) { $script:adapter.Update($script:dataTable) Write-Host "UpdateCommand:" $adapter.UpdateCommand.CommandText Write-Host "InsertCommand:" $adapter.InsertCommand.CommandText Write-Host "DeleteCommand:" $adapter.DeleteCommand.CommandText [System.Windows.Forms.MessageBox]::Show("変更を保存しました","保存完了") } else { [System.Windows.Forms.MessageBox]::Show("保存対象の変更がありません","情報") } } catch { [System.Windows.Forms.MessageBox]::Show("保存中にエラーが発生しました。`n$_","エラー") } } else { [System.Windows.Forms.MessageBox]::Show("保存できるデータがありません。先に表示ボタンでテーブルを読み込んでください。","情報") } }) # コントロール $form.Controls.Add($labelTable) $form.Controls.Add($listBoxTable) $form.Controls.Add($btnShow) $form.Controls.Add($dataGrid) $form.Controls.Add($btnSave) # --- フォームを閉じたら DB も閉じる --- $form.Add_FormClosed({ $conn.Close() }) # フォームを表示 [void]$form.ShowDialog()
powershell/form_sqlite_db_client.1758644336.txt.gz · 最終更新: 2025/09/24 01:18 by mikoto