デスクトップ版血糖値管理アプリの移行

その他

Windows10搭載パソコンで開発をしたデスクトップ版の血糖値管理アプリをWindows11搭載パソコンに移行しましたので、その手順を記載します。

このアプリは、次の環境で開発しました。

  • OS:Windows10
  • 統合開発環境(IDE):Visual Studio 2022
  • フレームワーク:.NET Framework(.NET 6)の「Windows フォーム アプリケーション」クラスライブラリ
  • 言語:Visual Basic
  • データベース:Access(Microsoft 365 Personal)
  • データベースアクセスライブラリ:System.Data.OleDb バージョン6.0.0
  • プロジェクト名:BloodSuger

次の順番で移行作業を行いました。

  1. デスクトップ版血糖値アプリのプロジェクトフォルダのコピー
  2. System.Data.OleDb6.0.0OLEのインストール
  3. ソースコードの変更(DB接続、Excel連携箇所)
  4. サーバーエクスプローラーにAccessデータベースを接続設定

1.デスクトップ版血糖値アプリのプロジェクトフォルダのコピー

プロジェクトの実態は「BloodSuger」フォルダにあります。
プロジェクトが保存されている「BloodSuger」フォルダはデフォルトでは
「c:\users\ユーザー名\source\respons\」内に作成されます。
Windows10搭載パソコンの「BloodSuger」フォルダをコピーしてWindows11搭載パソコンに貼り付けます。

今回は次のようにOneDrive上に貼り付けました。

C:\Users\ユーザー名\OneDrive\source\repos\BloodSuger

OneDriveにしたのは、パソコンがクラッシュすることによるデータ損失を防止したいことと、将来、別のパソコンにデータ移行することになった時にOneDriveであれば面倒な移行作業をしなくて済むからです。
ただし、OneDriveの同期の問題や複数パソコンで同一ファイルを同時使用しない、などOneDriveの特性を理解して利用することを念頭に置いておく必要があります。

なお、データベースはAccessデータベースを使用していますが、データベースは既にOneDrive上に置いているので、データベースの移行は行いませんでした。

2.System.Data.OleDb6.0.0OLEのインストール

「System.Data.OleDb」は、.NETアプリケーションがOLE DBを使ってデータベースにアクセスするためのライブラリです。
デスクトップ版血糖値管理アプリはAccessデータベースを使用しているので、Accessデータベースにアクセスするために必要となります。

「System.Data.OleDb」はバージョン6.0.0をインストールします。
インストールは次の手順で行います。

ツール > NuGetパッケージマネジャー > ソリューションのNuGetパッケージマネジャーの管理 の順番に進み、表示された画面で次のように操作します。

  • [参照]を選択し、検索キーワードに「system.data.oledb」と入力して検索します。
  • 検索結果に「System.Data.Oledb」と表示されたら、そこをクリックして選択します。
  • プロジェクトにチェックを入れます。
  • バージョンは「6.0.0」を選択します。
  • [インストール]ボタンをクリックし、「System.Data.Oledb」をインストールします。
フレームワーク .NET と System.Data.OleDb のバージョンについて

補足ですが、「System.Data.OleDb」の最新バージョン「9.0.3」を指定してインストールしたら、インストール完了時に下記のメッセージが表示されました。

「System.Data.OleDb 9.0.3 doesn’t support net6.0-windows and has not been tested with it. Consider upgrading your TargetFramework to net8.0 or later.You may also set <SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings> in the project file to ignore this warning and attempt to run in this unsupported configuration at your own risk.」

これは、.NET 6(Windows 専用の net6.0-windows プロジェクト)では System.Data.OleDb 9.0.3 は公式にはサポートされていない という意味です。
System.Data.OleDb バージョン 9.0.3 は net6.0-windows をサポートしておらず、互換性テストも行われていないそうです。

念のために.Net Frameworkのバージョンを確認しました。
「C:\Users\ユーザー名\OneDrive\source\repos\BloodSuger\BloodSuger\」内にある
「BloodSuger.vbproj」ファイル(プロジェクトファイル)を開いて確認します。
5行目に「net9.0-windows10.0.26100.0」と記載されているので .NET 9 がインストールされています。
Windows10搭載パソコンは「.NET 6」でした。
.NET 9 はプレビュー版なので、.NET 8 もしくは .NET 6 に変更しようかとも思いましたが、.NET 9 で動作確認したところ問題なさそうだったので、今回は .NET 9 で移行しました。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net9.0-windows10.0.26100.0</TargetFramework>
    <StartupObject>Sub Main</StartupObject>
    <UseWindowsForms>true</UseWindowsForms>
    <MyType>WindowsForms</MyType>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="Microsoft.Office.Interop.Excel">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>9</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>00020813-0000-0000-c000-000000000046</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
  </ItemGroup>

  <ItemGroup>
    <Import Include="System.Data" />
    <Import Include="System.Drawing" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="System.Data.OleDb" Version="6.0.0" />
  </ItemGroup>

  <ItemGroup>
    <Compile Update="My Project\Application.Designer.vb">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>Application.myapp</DependentUpon>
    </Compile>
  </ItemGroup>

  <ItemGroup>
    <None Update="My Project\Application.myapp">
      <Generator>MyApplicationCodeGenerator</Generator>
      <LastGenOutput>Application.Designer.vb</LastGenOutput>
    </None>
  </ItemGroup>

</Project>

ちなみに、「.NET 9.0」 と 「System.Data.OleDb バージョン 9.0.3」 の組み合わせで実行したところ、下記の実行時エラーとなり動作しませんでした。
「System.PlatformNotSupportedException:’System.Data.OleDb is not supported on this platform.’」
System.Data.OleDb バージョン 9.0.3は、.NET 9.0 でも動かないようです。
試してみなかったのですが、プレビュー版でない .NET 8.0 なら動くかもしれません。

3.ソースコードの変更(DB接続、Excel連携箇所)

ソースコードの変更箇所は次の3点です。

  • データベース「血糖管理.accdb」ファイルのパス情報
  • CSVファイル「blood.csv」のパス情報
  • Excelマクロファイル「血糖値統計値マクロ.xltm」のパス情報

なお、Windows11搭載パソコンのWindowsユーザー名をWindows10と同じにしておけば、ソースコードの変更をしなくてもよかったのですが、今回、Windowsユーザー名を変更したため、パスの記載箇所を変更する必要がありました。

データベース「血糖管理.accdb」ファイルのパス情報

データベースコネクション確立のコードは、次のクラス・メソッド内で定義しています。

  • DataInsertクラスのButtonInsert_Clickメソッド
  • SearchCriteriaクラスのButtonSearch_Clickメソッド
  • SearchResultsFormクラスのSearchResultsFormメソッドとDataWriteメソッド

それぞれのメソッド内の「血糖管理.accdb」へのパス情報を次のように変更します。

5行目の「connection.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;” + “Data Source=C:\Users\****\OneDrive\Documents\糖尿病\血糖管理.accdb;”」赤字の「****」をWindows11搭載パソコンのユーザー名に変更します。

        '/*
        '/* コネクションの確立
        '/*
        Dim connection = New OleDbConnection()
        connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=C:\Users\****\OneDrive\Documents\糖尿病\血糖管理.accdb;"

        Try
            connection.Open()                               'コネクション開始

        Catch ex As Exception
            MessageBox.Show(ex.Message, "DBコネクションエラー")
            connection.Close()
            Exit Sub
        End Try

CSVファイル「blood.csv」のパス情報

「blood.csv」ファイルはExcelで分析するためのデータです。
このファイルの出力先のパスを変更します。

SearchResultsFormクラスのButtonCsv_Clickメソッド内でパスを定義しています。

2行目の「Dim filePath As String : filePath = “C:\Users¥****\Downloads\blood.csv”」赤字の「****」をWindows11搭載パソコンのユーザー名に変更します。

Private Sub ButtonCsv_Click(sender As Object, e As EventArgs) Handles ButtonCsv.Click
    Dim filePath As String : filePath = "C:\Users\****\Downloads\blood.csv"
    Dim message As String : message = "既にファイルが存在します。追加しますか?"
    Dim Caption As String : Caption = "追加確認" 

Excelマクロファイル「血糖値統計値マクロ.xltm」のパス情報

「血糖値統計値マクロ.xltm」は、「blood.csv」ファイルのデータをもとに、統計的にデータを表示するExcelマクロファイルです。

デスクトップ版血糖値管理アプリからExcelマクロファイル「血糖値統計値マクロ.xltm」を開いている箇所のパス情報を変更します。

Form1クラスのExcelButton_Clickメソッド内でExcelマクロを開いています。

4行目の「Dim excelFilePath As String = “C:\Users\****\OneDrive\Documents\糖尿病\血糖値統計値マクロ.xltm”」赤字の「****」をWindows11搭載パソコンのユーザー名に変更します。

    Private Sub ExcelButton_Click(sender As Object, e As EventArgs) Handles ExcelButton.Click

        Dim officeFileProc As New Process
        Dim excelFilePath As String = "C:\Users\****\OneDrive\Documents\糖尿病\血糖値統計値マクロ.xltm"
        Dim execPath As String = "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
        '/*
        '/*ProcessクラスのStartメソッドで
        '/*別プロセスでExcelを起動して糖尿病\血糖値統計値マクロ.xltmを開く
        '/*
        Process.Start(execPath, excelFilePath)
    End Sub

4.サーバーエクスプローラーにAccessデータベースを接続設定

サーバーエクスプローラーの「データ接続」で「血糖管理.accdb」を設定しておくと、プロジェクト内で次のことができるので、データベースの扱いが便利になります。

  • データベースの構造(テーブル・ビュー・ストアドプロシージャ)の閲覧
  • データの参照・編集(INSERT・UPDATE・DELETE)
  • SQL クエリの作成・実行
  • データベースの接続設定・管理
  • ストアドプロシージャや関数の実行・デバッグ

データベースの接続手順
①[表示] > ②[データベースへの接続] > ③[参照]ボタンをクリックして「血糖管理.accdb」を選択します。
④[テスト接続]ボタンをクリックして、接続OKになっていることを確認し、
⑤[OK]ボタンで確定します。

[表示] > [サーバーエクスプローラー]でサーバーエクスプローラーを表示して、「血糖管理.accdb」が接続されたことを確認します。

すでにサーバーエクスプローラーに「血糖管理.accdb」の接続が設定されていた場合、「血糖管理.accdb」のところで右クリック > [削除]ボタンクリックで、一旦設定を削除して、上記の設定を行います。

最後にビルドしてエラーのないことを確認したら、プロジェクトを実行しました。
問題なく動作することを確認しました。

タイトルとURLをコピーしました