สอบถามการตรวจสอบค่าที่ซ้ำกันในตาราง เมื่อมีการ Insert ข้อมูล ASP.NET vb.net
Code (VB.NET)
Sub btnSave_Click(sender As Object, e As EventArgs)
Dim intNumRows As Integer
strSQL = "SELECT COUNT(*) FROM customer WHERE CustomerID = '"& Me.txtCustomerID.Text &"' "
objCmd = New SqlCommand(strSQL, objConn)
intNumRows = objCmd.ExecuteScalar()
IF intNumRows > 0 Then
Me.pnlAdd.Visible = False
Me.lblStatus.Visible = True
Me.lblStatus.Text = "CustomerID already exist."
Else
strSQL = "INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " & _
" VALUES " & _
" ('" & Me.txtCustomerID.Text & "','" & Me.txtName.Text & "','" & Me.txtEmail.Text & "', " & _
" '" & Me.txtCountryCode.Text & "','" & Me.txtBudget.Text & "','" & Me.txtUsed.Text & "')"
objCmd = New SqlCommand
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
End With
Me.pnlAdd.Visible = False
Try
objCmd.ExecuteNonQuery()
Me.lblStatus.Text = "Record Inserted"
Me.lblStatus.Visible = True
Catch ex As Exception
Me.lblStatus.Visible = True
Me.lblStatus.Text = "Record can not insert Error ("& ex.Message &")"
End Try
End IF
End Sub
Date :
2015-12-09 14:39:15
By :
mr.win
ตรงไหนก็ได้ครับ
***ขอแค่ให้เรียกใช้ได้ทั้ง class
Date :
2015-12-09 16:34:20
By :
lamaka.tor
โอ๊ะได้ละ ประกาศถูกแล้ว แต่ลืมลบนั่นลบนี่เล็กน้อยครับ ^_^
แต่ ที่ไม่ได้คือ การเชควันที่ครับ คือ คนนึงเข้าร่วมหลายงาน ในวันที่เดียวกันไม่ได้
เพราะ Button ที่ใส่ Event พวกนี้เข้าไปเป็นการบันทึกเข้า ตารางที่เก็บเฉพาะ FK ของตารางอื่นๆ แล้วจัดการผ่านวิวไม่มีวันที่ให้เช็คเลย
อย่างเช็คชื่อ หรือ โครงการ ยังใส่ WHERE Per_ID = '" & Me.ddlPersonnel_Entrance.SelectedValue & "' ได้ (เพื่อเช็คค่าที่รับเข้าไป)
ว่ามีอยู่แล้วหรือไม่ แต่วันที่มันเก็บอยู่ในอีกตารางนึง ที่เอาไว้เก็บ รายละเอียดงานนั้นๆ มันจึ่งเช็คจากพวก Textbox หรือ Dropdown ไม่ได้
ผมต้องทำยังไงดีครับ
Date :
2015-12-09 16:51:40
By :
bogey020
ลองศึกษาเรื่อง join ดูครับ
ส่วนที่ WHERE ใช้ and เชื่อม
Date :
2015-12-09 17:06:15
By :
lamaka.tor
ถามที่บอกเลยครับ
ลองศึกษาเรื่อง join ดูครับ
ส่วนที่ WHERE ใช้ and เชื่อม
แต่หากยังงงอยู่ลองเอารูปแบบที่คิดอยู่ตอนนี้มาเขียนเป็นโค้ดก้ได้นิครับ
if WHERE Per_ID = '" & Me.ddlPersonnel_Entrance.SelectedValue & "' = true
if Where Datestart <> datetime.now '' หรือไม่ก็ดึง วันที่มาจากซักที่
insert........
else
no insert ....
บ้านๆแบบสุดๆๆ 5555
Date :
2015-12-10 08:43:18
By :
lamaka.tor
ตอบความคิดเห็นที่ : 7 เขียนโดย : lamaka.tor เมื่อวันที่ 2015-12-10 08:43:18
รายละเอียดของการตอบ ::
ผมยังไม่ค่อยเก็ทสิ่งที่คุณ TOR_CREMISTRY บอกมาเท่าไหร่ครับ 555 ช่วยดูอีกทีนะครับ -/\-
คือผมมี ตารางที่เกี่ยวข้องกับการบันทึกตรงนี้อยู่
3 ตาราง กับอีก 1 view
1.tbl_person (เก็บรายละเอียดของบุคคน) 2.tbl_project (เก็บรายละเอียดโครงการ
"วันที่เก็บอยู่ในนี้" )
3.tbl_devlist (เก็บรายการเข้าร่วม โดยจะเก็บเฉพาะ PK ของสองตาราง person และ project เท่านั้น(Fk))
4. vw_AllData (view ที่เอาไว้เรียกข้อมูลทั้งหมด โดยมัน Inner join อยู่
และมีวันที่ของโครงการอยู่ในนี้ จาก tbl_project)
และเวลาเช็ค ผมก็เชคจาก View ใน
กรณีที่ 1 (คนเดิมเข้าร่วมโครงการเดิมไม่ได้) โค้ดปุ่มดังนี้ครับ
**แบบฟอร์มการบันทึก โดยเลือกจาก DDL ที่ดึงข้อมูลของ tbl_Person และ tbl_Project บันทึกเข้า tbl_devlist
Code (VB.NET)
Protected Sub btnSaveDevList_Click(sender As Object, e As EventArgs) Handles btnSaveDevList.Click
Dim strSQL As String = ""
If ddlPersonnel_Entrance.SelectedValue = "0" Then
Response.Write("<script language=javascript> alert ('กรุณาเลือกผู้เข้าร่วมโครงการ'); </script>")
Return
ElseIf ddlProject_Entrance.SelectedValue = "0" Then
Response.Write("<script language=javascript> alert ('กรุณาเลือกชื่อโครงการที่เข้าร่วม'); </script>")
Return
Else
Response.Write("<script language=javascript> alert ('ข้อมูลครบถ้วน'); </script>")
'----------------------------------
Dim intNumRows As Integer
strSQL = "SELECT COUNT(*) FROM vw_AllData WHERE Per_ID = '" & Me.ddlPersonnel_Entrance.SelectedValue & "'"
strSQL &= "AND Project_ID = '" & Me.ddlProject_Entrance.SelectedValue & "' "
'ตรงนี้เช็ค (คนเดิมห้ามเข้าร่วมโครงการเดิม โดย WHERE จาก SelectedValue ของ Dropdownlist) >> ทำงานได้ปกติ
Dim Cmd = New SqlCommand(strSQL, Conn)
Conn.Open()
intNumRows = CInt(Cmd.ExecuteScalar())
If intNumRows > 0 Then
Me.lblStatus.Visible = True
Me.lblStatus.Text = "บุคคนนี้ได้เข้าร่วมโครงการนี้แล้ว กรุณาตรวจสอบ !"
Else
strSQL = "INSERT INTO tbl_DevList (Dev_ID,Per_ID,Project_ID)"
strSQL &= "VALUES ( dbo.NextDevelopNumber() ,'" & ddlPersonnel_Entrance.SelectedValue & "','" & ddlProject_Entrance.SelectedValue & "')"
Cmd = New SqlCommand
With Cmd
.Connection = Conn
.CommandText = strSQL
.CommandType = CommandType.Text
End With
Try
Cmd.ExecuteNonQuery()
Me.lblStatus.Text = "บันทึกข้อมูลเรียบร้อยแล้ว"
Me.lblStatus.Visible = True
Catch ex As Exception
Me.lblStatus.Visible = True
Me.lblStatus.Text = "ไม่สามารถบันทึกข้อมูลได้ กรุณาตรวจสอบข้อผิดพลาด!! (" & ex.Message & ")"
End Try
End If
End If
End Sub
ตรงนี้ ถ้าผมต้องการจะเชคข้อมูลใน View AllData
(กรณี2 คือ นาย A จะเข้าร่วมโครงการใดๆที่นายAเคยเข้าร่วมในวันที่นั้นๆไปแล้วไม่ได้) คือเชคเฉพาะ Per_ID ของนาย A (มันเชคจาก Dropdown ได้) แต่จะเชค คอลัมน์ DateStart ที่ Innerjoin มาจากตาราง tbl_Project ใน View AllData ผมไม่รู้จะเขียนโค้ดยังไงอ่ะครับ มันจะเชคยังไงดีครับ เช่น ว่านาย A เนี่ย วันที่ 5ธันวา ร่วมโครงการวันพ่อไปละ พอจะไปปลูกป่าในวันที่ 5 อีก ก็จะเตือน
ผมต้องเขียนยังไงอ่ะครับน่ะ ดูจากโค้ดที่ผมใช้อยู่ ผมไม่รู้จะ Where Datestart = อะไร ?
เพราะ หน้า From การบันทึก มี Input แค่ Per_ID และ Project_ID เท่านั้นครับ
ขอบคุณมากๆครับ ^^
ประวัติการแก้ไข 2015-12-11 11:43:23 2015-12-11 11:44:17 2015-12-11 12:49:52
Date :
2015-12-11 11:18:53
By :
bogey020
1. ลองเอาที่ 3 ตาราง มา join กันเล่นให้คล่องก่อนครับ
2. ถ้าทำเป็นแล้ว ลอง where แบบบ้านๆ ซัก ตารางจาก join ดูครับ
3. ถ้าคล่องแล้ว where แบบหลายๆตารางดูครับ
หลักการบ้านๆมีแค่นั้นครับ
หากที่ว่ามาทั้งหมดทำแล้วขอดู SQL ที่ iner join ตามที่ว่าหน่อยครับ(View AllData ก็ได้ครับ)
แค่จะดูหน้าตาที่ join แล้วครับ
แต่ความจริงถ้าทำได้ครบทั้ง 3 ข้อที่ว่า น่าจะ ได้แล้วนะครับ
Date :
2015-12-11 14:10:59
By :
lamaka.tor
ถ้าเอา tbl_DevList มาให้ดูตั้งแต่แรกนิหวานเลยครับ 5555
Code (SQL)
strSQL = "SELECT COUNT(*) FROM vw_AllData WHERE Per_ID = '" & Me.ddlPersonnel_Entrance.SelectedValue & "'"
strSQL &= "AND Project_ID = '" & Me.ddlProject_Entrance.SelectedValue & "'"
strSQL &= "AND date_Input = '" & date?????? & "'"
แต่ที่ยังงอยู่คือ strSQL = "INSERT INTO tbl_DevList (Dev_ID,Per_ID,Project_ID)"
แล้ว date_input ละครับ
Date :
2015-12-11 16:18:56
By :
lamaka.tor
งั้นก็กลับไปจุดเดิมครับ
join แล้วดึงมันออกมา
แนะนำให้ลองใช้ wizard ในการตรวจสอบ SQL ง่ายดี
https://www.thaicreate.com/community/csharp-add-datatable-in-wizard-ban-ban.html
แต่หากยังงงอยู่ลองเอารูปแบบที่คิดอยู่ตอนนี้มาเขียนเป็นโค้ดก้ได้นิครับ
if WHERE Per_ID = '" & Me.ddlPersonnel_Entrance.SelectedValue & "' = true
if Where tbl_Project.Datestart <> datetime.now '' หรือไม่ก็ดึง วันที่มาจากซักที่
insert........
else
no insert ....
บ้านๆแบบสุดๆๆ 5555
Date :
2015-12-11 16:55:17
By :
lamaka.tor
ว่าแล้วก็ขอดู SQL ของ View_AllData ที่ join ไว้หน่อยครับ
สามารถเพิ่ม where ได้จากตรงนั้นได้เลย
Date :
2015-12-11 17:02:49
By :
lamaka.tor
ที่ตอบไปเพราะเข้าใจครับถามกลับเข้าใจไม๊
ถ้าไม่ join กันมันจะดึงมาwhere กันได้รึ
อย่างที่บอก. ไม่ join. เพื่อ มาwhere. ก้ใช้แบบบ้านๆครับ
Date :
2015-12-11 18:48:04
By :
lamaka.tor
ตัวอย่างก้ตามที่ให้เลยครับ if. ซ้อน if. แค่นั้นครับ
Date :
2015-12-11 18:49:24
By :
lamaka.tor
แบบนี้แหล่มเลยครับ ตรงช่อง filter. ครับลองใส่ค่าเล่นๆดูครับ
Date :
2015-12-11 19:39:32
By :
lamaka.tor
Load balance : Server 02