| 
 | 
งงกับคำถามพอสมควรครับ ก็พยายามจะหาคำตอบให้ล่ะกัน ในกรณี 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
 
  คัดลอกไปที่คลิปบอร์ด 
 
 |   
- 
 
 
 
 
 
 
 
 |