สอบถามกรณีรับค่าจากฟอร์มแล้วเพิ่มในตารางใหม่ตามจำนวนที่รับมา
แก้ไขครั้งสุดท้ายโดย maisurin เมื่อ 2020-10-19 11:47สวัสดีครับผม ผมมีฐานข้อมูลประมาณนี้ครับhttps://i.ibb.co/LSWyXqB/Diagram-1.jpg
เวลายูเซอร์เพิ่มข้อมูลมาตรง ProjectTotalBore ในฟอร์มมาจำนวนตัวเลข 10 ให้ไปสร้างข้อมูลในตาราง ProjectDetail 10 แถวตามตัวเลขที่รับมา และตรง DetailCode ให้รันตามจำนวนเช่น PRO-0001-0010 ตามตัวเลขที่รับมาเช่นกัน รบกวนขอแนวทางหน่อยครับ
งงกับคำถามพอสมควรครับ ก็พยายามจะหาคำตอบให้ล่ะกัน ในกรณี One To Many สำหรับตาราง Detail เราใช้ Primary Key (ProjectPK) จากตารางหลักได้เลยครับ โดยที่ไม่ต้องไปเสียเวลาหาค่า Foriegn Key ให้เสียเวลา เพราะมันเชื่อมความสัมพันธ์ให้อัตโนมัติ ...
Dim Conn As New OleDb.OleDbConnection
Function ConnectDataBase(ByVal DBFile As String) As System.Data.OleDb.OleDbConnection
Try
Dim strConn As String = _
"Provider = Microsoft.ACE.OLEDB.12.0;"
strConn += _
"Data Source = " & DBFile
Conn = New OleDb.OleDbConnection(strConn)
' Create Connection
Conn.ConnectionString = strConn
' Return
Return Conn
Catch ex As Exception
MessageBox.Show("Error: " & ex.Message, "รายงานความผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End
End Try
End Function
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
'// สร้าง Primary Key ใหม่
Dim PK As Long = SetupNewPK("SELECT MAX(ProjectPK) AS MaxPK FROM tblMaster")
Dim sql As String = _
"INSERT INTO tblMaster(ProjectPK, ProjectName) " & _
" VALUES(" & _
"'" & PK & "', " & _
"'Project Name - " & PK & "'" & _
")"
'// INSERT
Call DoSQL(sql)
'//
For i = 1 To 10
sql = _
"INSERT INTO tblDetail(ProjectPK, DetailCode) " & _
" VALUES(" & _
"'" & PK & "', " & _
"'" & GenID(i) & "'" & _
")"
Call DoSQL(sql)
Next
MessageBox.Show("OK")
End Sub
Function GenID(ByVal iCount As Integer) As String
'// PRO-0001 - 0010
Return "PRO-" & Microsoft.VisualBasic.Right("0000" & iCount, 4)
End Function
'// UPDATE DATA
Public Function DoSQL(ByVal Sql As String) As Boolean
DoSQL = False
Dim Cmd As New OleDb.OleDbCommand
If Conn.State = ConnectionState.Closed Then Conn.Open()
Try
With Cmd
.Connection = Conn
.CommandType = CommandType.Text
.CommandText = Sql
.ExecuteNonQuery()
.Dispose()
DoSQL = True
End With
Catch ex As Exception
MsgBox("Error Update: " & ex.Message)
End Try
End Function
' / Function to find and create the new Primary Key not to duplicate.
Public Function SetupNewPK(ByVal Sql As String) As Long
If Conn.State = ConnectionState.Closed Then Conn.Open()
Dim Cmd As New OleDb.OleDbCommand(Sql, Conn)
'/ Check if the information is available. And return it back
If IsDBNull(Cmd.ExecuteScalar) Then
'// Start at 1
SetupNewPK = 1
Else
SetupNewPK = Cmd.ExecuteScalar + 1
End If
End Function
Private Sub frmSampleOne2Many_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Conn = ConnectDataBase("I:\Project VBNET 2020\VB2010\SampleOneToMany.accdb")
End Sub
End Class
thongkorn ตอบกลับเมื่อ 2020-10-19 21:47
งงกับคำถามพอสมควรครับ ก็พยายามจะหาคำตอบให้ล่ะกัน ใน ...
ขอบคุณครับอาจารย์ทำได้แล้วครับผม ขนาดงงยังตอบได้ถูกประเด็นเป๊ะๆเบยฮ่าาา
หน้า:
[1]