0

良い一日、

Visual Basic 2010 と MySql を使用するプロジェクトを開発しています。このプロジェクトの機能は、スポーツ タイミング サービスを実行することです。私は上記の環境でのプログラミングについてある程度の知識があり、苦労したときは Google で答えを探し、99% の確率で役に立ちます。

私の問題は次のとおりです。各スポーツイベントのテーブルを含むデータベースがあります。すべてのデータがキャプチャされ、すべての機能が意図したとおりに機能しています。4 つの GridView を使用して、このレースの結果をフォームに表示したいと思います (4 は許容される最大のレース距離です)。これらの結果は、レース距離 (最大 4 つ) ごとに (異なるクエリを使用して) 個別に表示する必要があります。

結果を表示するコードがありますが、これにより 4 つのグリッドビューすべてに同じデータが入力されます。これが私のコードです:

Private Sub ListResults()

    Dim query As String = "SELECT RaceNo, FirstName, LastName, RaceDistance, RaceTime FROM " & frmMain.EventCode & _
            " WHERE NOT ISNULL(RaceTime) AND RaceDistance = '" & frmMain.RaceDistance1 & "' ORDER BY RaceDistance ASC, RaceTime ASC;"

    Dim connection As New MySqlConnection(frmMain.connStr)
    Dim da As New MySqlDataAdapter(query, connection)
    Dim ds As New DataSet

    Try
        If da.Fill(ds) Then
            dgvLoadResultsA.DataSource = ds.Tables(0)
            dgvLoadResultsB.DataSource = ds.Tables(0)
            dgvLoadResultsC.DataSource = ds.Tables(0)
            dgvLoadResultsD.DataSource = ds.Tables(0)

        End If
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    Finally

        da = Nothing
        connection.Close()
        connection = Nothing
    End Try
End Sub

4 つの異なるクエリを作成する必要があることは理解していますが (これは可能です)、これらのクエリの結果を異なるグリッドビューに送信する方法がわかりません。クエリの結果をデータセット内の別のテーブルに送信する方法を完全には理解していないようです。さまざまなパラメーターと変数を使用してサブルーチンを実行するだけでコードを作成できますが、これを行うより良い方法があると考えました。

この件に関するご支援をいただければ幸いです。

前もって感謝します。

4

1 に答える 1

0

必要なことは、クエリごとに異なる DataSet を使用することです。

個人的には、クエリ コードを別の関数に分割して、イベントと距離をパラメーターとして受け取り、DataTable を返します。

Private Function GetResults(ByVal EventCode As Integer, ByVal RaceDistance As Integer) As DataTable

    Dim query As String = "SELECT RaceNo, FirstName, LastName, 
                           RaceDistance, RaceTime 
                           FROM " & EventCode & _
                         " WHERE NOT ISNULL(RaceTime) 
                           AND RaceDistance = '" & RaceDistance & "' 
                           ORDER BY RaceDistance ASC, RaceTime ASC;"

    Dim connection As New MySqlConnection(frmMain.connStr)
    Dim da As New MySqlDataAdapter(query, connection)
    Dim ds As New DataSet

    Try
        If da.Fill(ds) Then
            Return ds.Tables(0)
        End If
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    Finally

        da = Nothing
        connection.Close()
        connection = Nothing
    End Try
End Sub

ここではデータ型を想定しています。もちろん、正しいデータ型を使用するには、これを変更する必要があります。

次に、次を使用して DataSource をアタッチできます。

dgvLoadResultsA.DataSource = GetResults(EventCodeA, RaceDistanceA)
dgvLoadResultsB.DataSource = GetResults(EventCodeB, RaceDistanceB)
dgvLoadResultsC.DataSource = GetResults(EventCodeC, RaceDistanceC)
dgvLoadResultsD.DataSource = GetResults(EventCodeD, RaceDistanceD)

理想的には、接続文字列も GetResults 関数に渡します。そうすれば、関数は単体テスト可能になりますが、その決定はあなたに任せます。

もちろん、アタッチする前に、関数が有効な DataTable を返すことを理想的に確認する必要があります。しかし、ソリューションを複雑にしすぎたくはありませんでした。

于 2013-02-06T21:38:21.807 に答える