0

システムの一部であるデータの更新やデータベースへの挿入を行っています。コンボボックスと10個のテキストボックスを含むフォームがあります。ここで、私のデータベースの診断テーブルからの病気でいっぱいの場合、コンボボックス。

診断テーブルの構造は次のとおりです。f_id、病気、症状。したがって、病気には多くの症状があります。

コンボボックスからアイテムを選択すると、症状がテキストボックスに表示されます。私はすでにこれを機能させました。私の問題は、テーブルの行を挿入または更新できるようにする必要があることです。私は本当にこれを行う方法がわかりません。これまでのところ、これが私のコードです:

Call Connect()
        If Duplicate() = False Then

            STRSQL = "insert into diagnose values ('', @ill, @sym0), ('', @ill, @sym1), ('', @ill, @sym2), ('', @ill, @sym3), ('', @ill, @sym4), ('', @ill, @sym5), ('', @ill, @sym6), ('', @ill, @sym7), ('', @ill, @sym8), ('', @ill, @sym9)"
            Using myCmd = New MySqlCommand(STRSQL, myConn)
                myConn.Open()
                myCmd.Parameters.AddWithValue("ill", cmbRecord.Text)
                myCmd.Parameters.AddWithValue("sym0", symp0.Text)
                myCmd.Parameters.AddWithValue("sym1", symp1.Text)
                myCmd.Parameters.AddWithValue("sym2", symp2.Text)
                myCmd.Parameters.AddWithValue("sym3", symp3.Text)
                myCmd.Parameters.AddWithValue("sym4", symp4.Text)
                myCmd.Parameters.AddWithValue("sym5", symp5.Text)
                myCmd.Parameters.AddWithValue("sym6", symp6.Text)
                myCmd.Parameters.AddWithValue("sym7", symp7.Text)
                myCmd.Parameters.AddWithValue("sym8", symp8.Text)
                myCmd.Parameters.AddWithValue("sym9", symp9.Text)
                myCmd.ExecuteNonQuery()
            End Using
            MsgBox("Record Added")
            myConn.Close()
        Else
            STRSQL = "Update diagnose set first_aid = @ill, sname = @symp where first_aid = @ill"
            Using myCmd = New MySqlCommand(STRSQL, myConn)
                myConn.Open()
                myCmd.Parameters.AddWithValue("ill", cmbRecord.Text)
                myCmd.Parameters.AddWithValue("sym", symp0.Text)
                myCmd.Parameters.AddWithValue("sym", symp1.Text)
                myCmd.Parameters.AddWithValue("sym", symp2.Text)
                myCmd.Parameters.AddWithValue("sym", symp3.Text)
                myCmd.Parameters.AddWithValue("sym", symp4.Text)
                myCmd.Parameters.AddWithValue("sym", symp5.Text)
                myCmd.Parameters.AddWithValue("sym", symp6.Text)
                myCmd.Parameters.AddWithValue("sym", symp7.Text)
                myCmd.Parameters.AddWithValue("sym", symp8.Text)
                myCmd.Parameters.AddWithValue("sym", symp9.Text)
                myCmd.ExecuteNonQuery()
            End Using
            MsgBox("Record Updated")
            myConn.Close()
        End If

プロジェクトをmysqldb(myConn)に接続するモジュールがすでにあります。私ができないことは、診断テーブルのどの行も更新できないことです。行を追加することもできません。診断テーブルは次のようになります(例):

f_id | illness |  symptom
1   |  fever   |  fever
2   |  fever   |  hot temperature
3   |  fever   |  dizziness
4   |  fever   |  headache

その場合、コンボボックスで発熱を選択したとすると、4つのテキストボックスに症状が表示されます。ユーザーが変更を加えた場合、Duplicate()関数はコンボボックスの値にすでにレコードがあるかどうかを確認します。trueの場合、更新されます。ユーザーが別の症状を追加したとすると、保存ボタンをクリックすると、発熱によって症状が追加された別の行が追加されます。

falseの場合、新しいレコードが追加されます。つまり、テキストボックスに入力された症状の数に応じて、新しい行がテーブルに追加されます。したがって、「cold」を新しいレコードとして追加し、2つの症状を入力したとします。これは、フォームの10個のテキストボックスのうち2個を使用したことを意味し、テーブルに2行が追加されます。

4

1 に答える 1

0

同じクエリに複数の行を挿入しようとしていますが、これは不可能です。挿入された行ごとに個別のクエリが必要です。(前の質問から)テキストボックスの配列をループして挿入します:

Dim arrayOfTextboxes() As TextBox = {symp0, ... put all textboxes here..., symp9}
myConn.Open()

If Duplicate() = False Then

    STRSQL = "insert into diagnose values (@ill, @sym)"

    For i = 0 To arrayOfTextboxes.Count - 1

       If String.IsNullOrEmpty(arrayOfTextboxes(i).Text) Then Continue For

       Using myCmd = New MySqlCommand(STRSQL, myConn)
            myCmd.Parameters.AddWithValue("@ill", cmbRecord.Text)
            myCmd.Parameters.AddWithValue("@sym", arrayOfTextboxes(i).Text)              
            myCmd.ExecuteNonQuery()
        End Using

    Next          

        MsgBox("Record Added")

Else

      // I don't get what you want to do in the update part yet.

End If

myConn.Close()
于 2013-02-16T17:18:36.753 に答える