【发布时间】:2018-01-19 08:49:08
【问题描述】:
我有这样的编码:
Private Sub txtNip_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNip.KeyPress
If Not (Asc(e.KeyChar) >= Asc("0") And Asc(e.KeyChar) <= Asc("9") Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13) Then
e.KeyChar = Chr(0)
MessageBox.Show("Silahkan Masukan Data NIP Dengan Angka...!!")
ElseIf Asc(e.KeyChar) = 13 Then
End If
End Sub
Private Sub txtNip_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNip.Enter
cp.P_NIP = Me.txtNip.Text
If cp.KeypressID() = True Then
Me.txtNip.Enabled = False
Me.Fill_Data()
Else
MessageBox.Show("Data Tidak Ditemukan, Nomor Induk Pegawai Yang Anda Masukan Salah..!!")
Me.Bersih()
End If
End Sub
和这样的课程:
Public Function KeypressID() As Boolean
Dim cnn As New SqlConnection(StrConn)
Dim cmmd As New SqlCommand
Dim dreader As SqlDataReader
Dim SQL As String
SQL = "SP_SELECT_PEGAWAI"
cnn.Open()
cmmd = New SqlCommand(SQL, cnn)
cmmd.CommandType = CommandType.StoredProcedure
cmmd.Parameters.Clear()
cmmd.CommandText = SQL
cmmd.Parameters.Add(New SqlParameter("@P1", NIP))
dreader = cmmd.ExecuteReader
If dreader.Read = True Then
Dim ImgByte() As Byte = dreader("Foto")
Dim ImgStr As New System.IO.MemoryStream(ImgByte)
Me.Foto = Image.FromStream(ImgStr)
Me.Nama = dreader("Nama")
Me.Jabatan = dreader("Jabatan")
Me.Daerah = dreader("Daerah")
Me.Tsk = dreader("Tsk_Jab")
Me.PktPns = dreader("Pnk_Pns")
Me.GolPns = dreader("Gol_Pns")
Me.TmtPns = dreader("Tmt_Pns")
Me.Pensiun = dreader("Pensiun")
Return True
Else
Me.Foto = Nothing
Me.Nama = ""
Me.Jabatan = ""
Me.Daerah = ""
Me.Tsk = Date.Now
Me.PktPns = ""
Me.GolPns = ""
Me.TmtPns = Date.Now
Me.Pensiun = Date.Now
Return False
End If
cnn.Close()
End Function
我的问题是,我的表单与消息框“data tidak ditemukan..”同时加载。当在数据库中未找到 txtnip 时,我希望该消息框消失,并且当消息框单击表单中的按钮确定时,将通过调用方法 bersih() 自行清理。怎么弄好?
【问题讨论】:
-
If dreader.Read = True=> 我觉得应该是If dreader.HasRows = True,那么你可以使用While dreader.Read() ... End While来迭代阅读器并返回True。出现问题是因为KeypressID方法返回false,表示dreader.Read有False值。 -
不工作的哲也先生...
-
@TetsuyaYamamoto 如果 OP 只期待一条记录,那么
If dreader.Read Then就可以了。您也不需要 HasRows 来执行 While-Loop。如果没有任何记录,则将跳过循环。 -
txtNIP 是第一个关注表单的控件吗?这将触发 Enter 事件。如果您不希望这样,则将第一个焦点控件设置为其他内容,或删除 Enter 处理程序并将其添加到表单的 Shown 事件中,这样它就不会过早触发。不清楚你的 NIP 值是从哪里来的。
-
是的,我把注意力集中在 txtnip 上。你能解释更多吗? larstech?
标签: sql sql-server vb.net class