maisurin โพสต์ 2020-10-19 11:45:57

สอบถามกรณีรับค่าจากฟอร์มแล้วเพิ่มในตารางใหม่ตามจำนวนที่รับมา

แก้ไขครั้งสุดท้ายโดย maisurin เมื่อ 2020-10-19 11:47

สวัสดีครับผม ผมมีฐานข้อมูลประมาณนี้ครับhttps://i.ibb.co/LSWyXqB/Diagram-1.jpg

เวลายูเซอร์เพิ่มข้อมูลมาตรง ProjectTotalBore ในฟอร์มมาจำนวนตัวเลข 10 ให้ไปสร้างข้อมูลในตาราง ProjectDetail 10 แถวตามตัวเลขที่รับมา และตรง DetailCode ให้รันตามจำนวนเช่น PRO-0001-0010 ตามตัวเลขที่รับมาเช่นกัน รบกวนขอแนวทางหน่อยครับ

thongkorn โพสต์ 2020-10-19 21:47:17

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

maisurin โพสต์ 2020-10-20 08:44:16

thongkorn ตอบกลับเมื่อ 2020-10-19 21:47
งงกับคำถามพอสมควรครับ ก็พยายามจะหาคำตอบให้ล่ะกัน ใน ...

ขอบคุณครับอาจารย์ทำได้แล้วครับผม ขนาดงงยังตอบได้ถูกประเด็นเป๊ะๆเบยฮ่าาา
หน้า: [1]
ดูในรูปแบบกติ: สอบถามกรณีรับค่าจากฟอร์มแล้วเพิ่มในตารางใหม่ตามจำนวนที่รับมา