これは簡単な修正のようですが、これを把握することはできません。サブフォーム(NewTournament)でボタンクリックイベントを発生させ、データベースにレコードを追加してから、同じデータベースのレコードを自動的にリストするデータグリッドに通知します(グリッドはHomeFormにリストされています)。データグリッドビューを更新する
私はデータベースを更新して新しいウィンドウを呼び出すことができます。しかし、私は何かのためにそのデータグリッドをリフレッシュすることはできません。私は、DataGridをクリアし、変更を加え、グリッドを補充することになっていることを知っています。しかし、私がこれを行うたびに、コードは更新されません。さらに、私はレコードが追加されていることをよく知ることができます。
Private Sub CreateTournament_Click(sender As System.Object, e As System.EventArgs) Handles CreateTournament.Click
' Check the form for errors, if none exist.
' Create the tournament in the database, add the values where needed. Close the form when done.
Dim cn As OleDbConnection
Dim cmd, cmd1 As OleDbCommand
Dim icount As Integer
Dim str, str1 As String
Try
cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\Paul Williams III\Documents\Visual Studio 2010\Projects\Everything OP Client\Everything OP Client\Master.mdb'")
cn.Open()
str = "insert into Tournaments (SanctioningID,TournamentName,TournamentVenue,TournamentDateTime,TournamentFirstTable,Game,Format,OrganizerID) values(" _
& CInt(SanctioningIDTxt.Text) & ",'" & Trim(TournamentNameTxt.Text) & "','" & _
"1" & "','" & EventDateTimePck.Value & "','" & TableFirstNumberNo.Value & "','" & GameList.SelectedIndex & "','" & FormatList.SelectedIndex & "','" & Convert.ToInt32(ToIDTxt.Text) & "')"
'string stores the command and CInt is used to convert number to string
cmd = New OleDbCommand(str, cn)
str1 = "select @@Identity"
icount = cmd.ExecuteNonQuery
cmd1 = New OleDbCommand(str1, cn)
Counter = CInt(cmd1.ExecuteScalar)
MessageBox.Show(Counter & " was the last inserted id")
'displays number of records inserted
HomeForm.MasterDataSet.Clear()
HomeForm.MasterDataSet.GetChanges()
HomeForm.TournamentsTableAdapter.Fill(HomeForm.MasterDataSet.Tournaments)
HomeForm.DataGridView1.Refresh()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Me.Close()
Dim n As New TournamentWindow
n.TournID = Counter
n.Show(HomeForm)
End Sub
パラメータ化されたクエリは、どういう意味ですか? –
あなたの値を連結するのではなく、プレースホルダーとして '?'を入れてから、パラメーター値を設定します。あなたのトーナメント名が「O'Brien's Cup」であり、潜在的な[SQLインジェクション](http://xkcd.com/327/)攻撃を取り除いているような問題は修正されています。ここには、Accessへのc#の[example](http://stackoverflow.com/questions/9401888/parameterized-query-for-inserting-values)があります。申し訳ありませんが、私はアクセスするためにVB.NETを見つけることができませんでしたが、実際には異なるものではありません。 –
私が提供したコードを使用すると、次のようなエラーが表示されます: "アクセス不可能な 'AddTournamentsRow'がこの数の引数を受け入れることができないため、オーバーロードの解決に失敗します。 –