ユーザ用ツール

サイト用ツール


powershell:form_sqlite_db_client

文書の過去の版を表示しています。


FormsとSQLiteによる簡易DBクライアント

一つ上へ

# Form用のモジュールを読み込み
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
 
# sqlite3.dll を読み込む
Add-Type -Path "path\to\dll\System.Data.SQLite.dll"
 
# --- クエリ実行関数 ---
function showTableList {
    param(
        [System.Data.SQLite.SQLiteConnection]$Connection
    )
 
    $cmd = $Connection.CreateCommand()
    $cmd.CommandText = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"
 
    try {
        $results = New-Object System.Collections.Generic.List[object]
 
        $reader = $cmd.ExecuteReader()
        while ($reader.Read()) {
            $row = [PSCustomObject]@{
                name = $reader["name"]
            }
            $results.Add($row) | Out-Null
        }
        $reader.Close()
        return $results
    }
    catch {
        return $null
    }
}
 
# --- テーブルデータを表示 ---
function showData {
    param (
        [System.Data.SQLite.SQLiteConnection]$Connection
    )
 
    $cmd = $Connection.CreateCommand()
    $cmd.CommandText = "SELECT col1,col2,col3 FROM tablename"
 
    try {
        $results = New-Object System.Collections.Generic.List[object]
        return $null
    }
    catch {
        return $null
    }
}
 
# 初期化処理
# DBのファイルパス(無ければ新規作成)
$dbFile = "path\to\databases\database.db"
$connStr = "Data Source=$dbFile;Version=3;"
# SQLite 接続オブジェクトを作成
$conn = New-Object System.Data.SQLite.SQLiteConnection($connStr)
$conn.Open()
 
 
# フォーム作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "簡易DBクライアント"
$form.Size = New-Object System.Drawing.Size(1200,800)
 
# テーブル一覧表示領域ラベル
$tbListLabel = New-Object System.Windows.Forms.Label
$tbListLabel.Text = "テーブルリスト"
$tbListLabel.Location = New-Object System.Drawing.Point(20,20)
$tbListLabel.Size = New-Object System.Drawing.Size(100,15)
 
# テーブル一覧表示領域
$tbListArea = New-Object System.Windows.Forms.ListBox
#$tbListArea.Size = New-Object System.Drawing.Size(300,200)
$tbListArea.Location = New-Object System.Drawing.Point(20,40)
$tbListArea.Width = 300
$tbListArea.Height = $form.ClientSize.Height - $tbListArea.Top - 20 # initial height
$tbListArea.Anchor = [System.Windows.Forms.AnchorStyles]::Top `
    -bor [System.Windows.Forms.AnchorStyles]::Bottom `
    -bor [System.Windows.Forms.AnchorStyles]::Left
 
$tbList = showTableList $conn # テーブル一覧を取得
foreach ($t in $tbList) {
    $tbListArea.Items.Add($t.name)
}
 
# DataGridView
$dataGrid = New-Object System.Windows.Forms.DataGridView
$dataGrid.Location = New-Object System.Drawing.Point(350,40)
$dataGrid.Height = $form.ClientSize.Height -$tbListArea.Top - 50
$dataGrid.Width = $form.ClientSize.Width - $tbListArea.Right - 50
$dataGrid.AutoSizeColumnsMode = "Fill"
#$dataGrid.AllowUserToAddRows = $true
#$dataGrid.AllowUserToDeleteRows = $true
$dataGrid.ReadOnly = $true
$dataGrid.Anchor = [System.Windows.Forms.AnchorStyles]::Top `
    -bor [System.Windows.Forms.AnchorStyles]::Bottom `
    -bor [System.Windows.Forms.AnchorStyles]::Left `
    -bor [System.Windows.Forms.AnchorStyles]::Right
 
# レコード表示ボタン
$btnShow = New-Object System.Windows.Forms.Button
$btnShow.Text = "表示"
$btnShow.Location = New-Object System.Drawing.Point(350, 10)
 
# レコード表示ボタンイベント
$btnShow.Add_Click({
    Write-Host "Clicked"
    Write-Host $tbListArea.SelectedItem
    if ($tbListArea.SelectedItem -ne $null) {
        $table = [string]$tbListArea.SelectedItem
        $cmd = $conn.CreateCommand()
        $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
    }
})
 
# コントロールを追加
$form.Controls.Add($tbListLabel)
$form.Controls.Add($tbListArea)
$form.Controls.Add($dataGrid)
$form.Controls.Add($btnShow)
 
# --- フォームを閉じたら DB も閉じる ---
$form.Add_FormClosed({ $conn.Close() })
 
# フォームを表示
[void]$form.ShowDialog()
powershell/form_sqlite_db_client.1759251886.txt.gz · 最終更新: 2025/10/01 02:04 by mikoto