0

私は少し奇妙なものを持っています。私はオンラインで探してきましたが、私の問題に固有のものを見つけることができません. うまくいけば、誰かが私を助けてくれます。

MySQL から情報を読み取る VB.Net 2012 アプリケーションがあります。読み取りは問題なく、正しく入力されますが、変更を保存する方法がわかりません。

情報は、DataTable から DataGridView に表示されます。アプリケーションは MDI アプリケーションであり、任意の時点で複数の TableEditor フォームが子として開かれている可能性があります。

これは私の情報読み込み関数です:

    Public Function get_SQL(ByVal SQLquery As String) As DataTable
    Try
        Dim myCommand As New MySqlCommand
        Dim myAdapter As New MySqlDataAdapter
        Dim myData As New DataTable
        Dim MysqlConn As New MySqlConnection

        MysqlConn.ConnectionString = "server=" & sqlServer & ";" _
            & "user id=" & sqlUsername & ";" _
            & "password=" & sqlPassword & ";" _
            & "database=" & sqlDatabase

        MysqlConn.Open()
        myCommand.Connection = MysqlConn
        myCommand.CommandText = SQLquery
        myAdapter.SelectCommand = myCommand
        myAdapter.Fill(myData)
        MysqlConn.Close()
        MysqlConn.Dispose()
        Return (myData)
    Catch ex As Exception
        Main.lblStatus.Text = "SQL Connection Error"
        errMsg = ex.ToString
        errForm = "SQL Connection"
        errWrite()
    End Try
End Function

そして、情報は次のようにロード時に子フォームにロードされます。

    Private Sub SQLeditor_Load(sender As Object, e As EventArgs) Handles Me.Load
    ToolStrip1.Visible = False
    Select Case sqlclick
        Case Is = "Office Details"
            SQLdata = get_SQL(qryOffice)
        Case Is = "School Details"
            SQLdata = get_SQL(qrySchools)
        Case Is = "ICT Staff"
            SQLdata = get_SQL(qryITstaff)
        Case Else
            ToolStrip1.Visible = True
    End Select
    dgvEditor.DataSource = SQLdata
End Sub

SQLdata はグローバル変数「Public SQLdata As DataTable」です。

そこで、変更を SQL データベースに保存する新しい関数を作成したいと思います。同じグローバル変数を使用して、同時に存在できる複数のインスタンスを単一のフォームに入力しているため、DataGridView またはそれらの行に沿って何かから情報を渡す方法を考える必要があり、立ち往生しています。

どんな助けでも大歓迎です。

4

1 に答える 1

0

最終的に解決策を見つけることができたので、他の誰かが同じ問題に遭遇した場合に備えて投稿すると思いました.

最終的に、次のようなコードを使用して、編集可能なウィンドウを一度に 1 つだけ開くことにしました。

Public sqlEditForm As SQLeditor
If issql = True Then
            If sqlEditForm Is Nothing OrElse sqlEditForm.IsDisposed Then
                sqlEditForm = New SQLeditor
                sqlEditForm.MdiParent = Main
                sqlEditForm.Show()
            Else
                Dim reply As DialogResult
                reply = MsgBox("An existing edit window is already active, do you want to close the existing instance and create a new one?" & vbCrLf & "Any unsaved changes will be lost?", MsgBoxStyle.YesNoCancel, "Existing Window Detected")
                Select Case reply
                    Case Is = vbYes
                        sqlEditForm.Close()
                        sqlEditForm = New SQLeditor
                        sqlEditForm.MdiParent = Main
                        sqlEditForm.Show()
                    Case Is = vbNo
                        sqlEditForm.Show()
                    Case Is = vbCancel

                End Select
            End If

そして、データ アダプターからデータの 1 つのインスタンスを保存するだけです。

    Public Sub save_SQL()
    Try
        Dim myAdapter As New MySqlDataAdapter
        Dim MysqlConn As New MySqlConnection
        Dim cmdb = New MySqlCommandBuilder(myAdapter)

        MysqlConn.ConnectionString = "server=" & sqlServer & ";" _
            & "user id=" & sqlUsername & ";" _
            & "password=" & sqlPassword & ";" _
            & "database=" & sqlDatabase

        MysqlConn.Open()

        Select Case sqlclick
            Case Is = "Office Details"
                myAdapter.SelectCommand = New MySqlCommand(qryOffice, MysqlConn)
            Case Is = "School Details"
                myAdapter.SelectCommand = New MySqlCommand(qrySchools, MysqlConn)
            Case Is = "ICT Staff"
                myAdapter.SelectCommand = New MySqlCommand(qryITstaff, MysqlConn)
            Case Is = "SQL Editor"
                myAdapter.SelectCommand = New MySqlCommand(qrycustom, MysqlConn)
            Case Else
        End Select
        myAdapter.Update(SQLdata)

        MysqlConn.Close()
        MysqlConn.Dispose()
    Catch ex As Exception
        Main.lblStatus.Text = "SQL Connection Error"
        errMsg = ex.ToString
        errForm = "SQL Connection"
        errWrite()
    End Try
End Sub

同じシステムをマルチ MDI モデルに適応させるのはそれほど難しくないはずですが、その必要はないと思います。

于 2013-02-06T13:41:03.493 に答える