見出し画像

わからないことはcopilotに聞いてVB.NETでディスクトップアプリを作ってみよう NO.10 データベース

アオノおじさんのひとりごと

(本文とは関係ありません、ひとりごとです)
 プログラムをしていると、英語入力と日本語(コメント)の切り替えが頻繁になりませんか。キーボード左上の半角/全角ボタンで切り替えするかと思いますが、押すたびに、英語か日本語か、わからない場合がありませんか。
ワードなどで文章作成なら、ほとんど日本語でOKかと思いますが、プログラムは英語、日本語両方必要です。
 そこで半角/全角キーを使用しないでスペース横の無変換をIMEをON
変換をIMEをOFFに設定しておけば、入力時にこの変換、無変換を押してキー入力すると 英語日本語選択済ですので大変便利ですよ。
 右下のタスクバー あ、Aの表示を右クリックの設定で キーとタッチのカスタマイズをクリック 以下のように設定するとOKです。

データベース

(ここから本文)
サンプルは以下からダウンロードできます。 
  (5~11回まですべてのサンプル)

アクセスデータを使用して DataGridView で表示するものを作成します。ただし、データを表示するSQLを操作するだけのもので データを登録する機能はありません。郵便番号辞書のアクセスデータをダウンロードファイルに含まれますので、動作はすぐに確認できます。

このサンプルの実行には注意が必要です。アクセスのデータベースエンジンがインストールされていないとエラーして動作しません。
なお、このエンジン 32,64bitの2つあり OFFICEがインストールされている場合 事前にインストールされているかもしれません。
 64ビットでコンパイルしてエラーする場合 32ビットのする必要があります。(32bitOFFICEがある場合)

データベースエンジンはマイクロソフトHPからダウンロードできます。
ここをクリック

X64が付く accessdatabaseengine_X64.exeが 64bit用
ないもの  accessdatabaseengine.exeが   32bit用になります。
 
インストールするデータベースエンジンの32,64に合わせて 送りジョーのソフトも32,64bitを
選択してください。
事前にマイクロソフトOFFICEがインストールされている場合、32,64bitを合わせる必要があります。OFFICEの32,64の確認方法は OFFICEを起動しファイル アカウント バージョン情報
をクリックすると 右上に表示されます。
◯ OFFICEをインストールしている場合
  OFFICEの32,64bitを確認し
  32bitなら データベースエンジンは accessdatabaseengine.exe 
  をインストール
  送りジョーのソフトも32bit版を使用します。
  64bitなら データベースエンジンは accessdatabaseengine_X64.exe
  をインストール
  送りジョーのソフトも64bit版を使用します。
 
◯ OFFICEをインストールしていない場合
  データベースエンジンはaccessdatabaseengine_X64.exeをインストール
  送りジョーのソフトも64bit版を使用します。
 
◯ OSが32bitの場合は
  データベースエンジンは accessdatabaseengine.exeをインストール
  送りジョーのソフトも32bit版を使用します。
 
Accessdatabaseengineのインストールでエラーする場合 インストール済か
OFFICEの32,64 と一致していないと思います。
32,64で統一しないと、インストールできません。

アクセスデータベース 郵便番号辞書で 
郵便番号 と 住所 の全国版になります。

新規フォームから作成するのもいいのだが、説明が大変なのでサンプルのダウンロードしたほうが、簡単です

DataGridViewの追加


ツールボックスを開き データからDataGridViewをフォームにドラックします。適当な位置に移動、枠を広げます。

テキストボックス 2つ追加 上 郵便番号 下 住所
この2つは 一致でデータを絞るためのものです。

copilot に聞いてみると以下のような回答になりましたが、これではうまくできません。同じ内容で、質問するか具体的な質問して、いろいろなPGを回答してもらうのがいいかもしれません。

サンプルのDataGridViewのPGは以下にようなものになります。

    '*********************************************************************************
    '*   DataGridView1 表示
    '*********************************************************************************
    Private Sub ShowList()
        Dim YbCStr As String         '郵便番号データベース名
        Dim FileName As String = System.IO.Path.Combine(Application.StartupPath(), "yubin.accdb")
        YbCStr = "Provider=Microsoft.ACE.OLEDB.16.0;" &
                                          "Data Source=" & FileName & ";"

        '******  DataGridView1 の初期設定 ********************************************
        DataGridView1.ReadOnly = True                                                   '編集はしない
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect           '行をすべて選択
        DataGridView1.RowHeadersVisible = False                                         '行セレクタを表示しない
        DataGridView1.AllowUserToAddRows = False                                        '空白を表示しない
        DataGridView1.MultiSelect = False                                               'セル、行、列が複数選択されないようにする

        DataGridView1.AllowUserToResizeColumns = False                                  'ユーザーが列のサイズを変更できない
        DataGridView1.AllowUserToResizeRows = False                                     'ユーザーが行のサイズを変更できない
        DataGridView1.RowTemplate.Height = 30                                           '行の高さの設定
        DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 11)               'フォント設定
        DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("MS ゴシック", 11)  'ヘッタ フォント設定

        DataGridView1.EnableHeadersVisualStyles = False                                         'ビジュアルスタイル無効
        DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(224, 224, 224)   'ヘッターの色指定
        DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
        DataGridView1.ColumnHeadersHeight = 30                                          'ヘッターの高さ

        Using cn As New System.Data.OleDb.OleDbConnection
            Using cm As New System.Data.OleDb.OleDbCommand
                Using da As New System.Data.OleDb.OleDbDataAdapter
                    Dim ds As New DataSet
                    cn.ConnectionString = YbCStr

                    'コネクションの設定
                    cm.Connection = cn

                    'データソースで実行するSQL文の設定
                    If CD.Text = "" And KEY.Text = "" Then                              'CD,KEYとも入力なし
                        cm.CommandText = "SELECT 郵便番号簿.郵便番号, 郵便番号簿.住所 From 郵便番号簿"
                    Else
                        cm.CommandText = "SELECT 郵便番号簿.郵便番号, 郵便番号簿.住所 From 郵便番号簿" _
                            & " Where 郵便番号簿.郵便番号 Like '" & CD.Text & "%" & "' and 郵便番号簿.住所 Like '" & KEY.Text & "%" & "'"
                    End If

                    'データソース内のレコードを選択するためのSQLコマンドの設定
                    da.SelectCommand = cm
                    'データを取得する
                    da.Fill(ds, "郵便番号簿")
                    'データグリッドに表示するデータソースを設定
                    DataGridView1.DataSource = ds
                    'グリッドを表示するための、DataSource 内のリストを設定
                    DataGridView1.DataMember = "郵便番号簿"
                    'データソースへの接続を閉る
                End Using
            End Using
        End Using

        DataGridView1.Columns(0).MinimumWidth = 70                                     '1列の幅の設定
        DataGridView1.Columns(0).HeaderText = "郵便番号"
        DataGridView1.Columns(1).MinimumWidth = 400                                     '2列の幅の設定
        DataGridView1.Columns(1).HeaderText = "住所"

    End Sub

プロパティはプロパティ画面から登録できるのだが
DataGridViewの場合、プログラム内に記入しておくほうが、修正時などは分かりやすいと思います。この場合 新規フォームを作成するたびにプロパティを入力しておく必要があるます。プロパティの画面で登録しておくと新規フォームや新プロジェックトでコピー&ペーストで移行できるメリットもありますので、内容によって、PG内に入れるか、プロパティ画面で登録するかを、考えてください

==================================================
※Application.StartupPath() は起動時のパス "yubin.accdb"はデータ
==================================================
Dim FileName As String = System.IO.Path.Combine(Application.StartupPath(), "yubin.accdb")
==================================================
※Microsoft.ACE.OLEDB.16.0で接続するデータソース
==================================================
YbCStr = "Provider=Microsoft.ACE.OLEDB.16.0;" &"Data Source=" & FileName & ";"
==================================================
※編集はしない==================================================
DataGridView1.ReadOnly = True
==================================================
※行をすべて選択
==================================================
DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
==================================================
※行セレクタを表示しない
==================================================
DataGridView1.RowHeadersVisible = False
==================================================
※空白を表示しない
==================================================
DataGridView1.AllowUserToAddRows = False
==================================================
※セル、行、列が複数選択されないようにする
==================================================
DataGridView1.MultiSelect = False
==================================================
※ユーザーが列のサイズを変更できない
==================================================
DataGridView1.AllowUserToResizeColumns = False
==================================================
※ユーザーが行のサイズを変更できない
==================================================
DataGridView1.AllowUserToResizeRows = False
==================================================
※行の高さの設定
==================================================
DataGridView1.RowTemplate.Height = 30
==================================================
※フォント設定
==================================================
DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 11)
==================================================
※ヘッタ フォント設定
==================================================
DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("MS ゴシック", 11)
==================================================
※ビジュアルスタイル無効
==================================================
DataGridView1.EnableHeadersVisualStyles = False
==================================================※ヘッターの色指定
==================================================
DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(224, 224, 224)
==================================================※ヘッターの高さ
==================================================
DataGridView1.ColumnHeadersHeight = 30
==================================================


'データソースで実行するSQL文の設定
If CD.Text = "" And KEY.Text = "" Then      'CD,KEYとも入力なし
  cm.CommandText = "SELECT 郵便番号簿.郵便番号, 郵便番号簿.住所
  From  郵便番号簿"
Else
  cm.CommandText = "SELECT 郵便番号簿.郵便番号, 郵便番号簿.住所
  From   郵便番号簿 Where 郵便番号簿.郵便番号 Like '" &
  CD.Text & "%" & "' and 郵便番号簿.住所 Like '" & KEY.Text & "%" & "'"
End If

SQLの説明だけで1冊の本になりますので、説明は省きますが
DataGridViewに表示する注意点として SELECT の順に注意してください。
ここでは
郵便番号簿.郵便番号, 郵便番号簿.住所 
左から 郵便番号 住所と表示されます。

郵便番号簿.住所 , 郵便番号簿.郵便番号  とすると

郵便番号や住所を頭から入力すると それに一致したものが表示できるようにしています。これは SQL に=を Likeにして 入力値に%を追加するとあいまいで抽出できます。
郵便番号簿.住所 Like '" & KEY.Text & "%"

==================================================※1列の幅の設定
==================================================
DataGridView1.Columns(0).MinimumWidth = 70
==================================================※1列 ヘッタのタイトル
==================================================
DataGridView1.Columns(0).HeaderText = "郵便番号"
=================================================

10 データベースはこれで終了です。
   今回はDataGridViewの表示のみでしたが、データ登録は別の機会で

← 前の記事に戻る                次の記事に行く →

また、私のホームページには、住所データも登録できるソフトも公開しています。こちらをクリック

以下は、今回の作成予定の実行ファイル OkuriJyo100.zip(無料)です。
01で入手していないかたは、こちらからダウンロードできます。


いいなと思ったら応援しよう!