ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 3609|ตอบกลับ: 2

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

[คัดลอกลิงก์]

3

กระทู้

15

โพสต์

179

เครดิต

Member

Rank: 2

เครดิต
179

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

สวัสดีครับผม ผมมีฐานข้อมูลประมาณนี้ครับ  

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583
โพสต์ 2020-10-19 21:47:17 | ดูโพสต์ทั้งหมด

งงกับคำถามพอสมควรครับ ก็พยายามจะหาคำตอบให้ล่ะกัน ในกรณี One To Many สำหรับตาราง Detail เราใช้ Primary Key (ProjectPK) จากตารางหลักได้เลยครับ โดยที่ไม่ต้องไปเสียเวลาหาค่า Foriegn Key ให้เสียเวลา เพราะมันเชื่อมความสัมพันธ์ให้อัตโนมัติ ...
  1.     Dim Conn As New OleDb.OleDbConnection

  2.     Function ConnectDataBase(ByVal DBFile As String) As System.Data.OleDb.OleDbConnection
  3.         Try
  4.             Dim strConn As String = _
  5.                     "Provider = Microsoft.ACE.OLEDB.12.0;"
  6.             strConn += _
  7.                 "Data Source = " & DBFile

  8.             Conn = New OleDb.OleDbConnection(strConn)
  9.             ' Create Connection
  10.             Conn.ConnectionString = strConn
  11.             ' Return
  12.             Return Conn
  13.         Catch ex As Exception
  14.             MessageBox.Show("Error: " & ex.Message, "รายงานความผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  15.             End
  16.         End Try
  17.     End Function

  18.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  19.         '// สร้าง Primary Key ใหม่
  20.         Dim PK As Long = SetupNewPK("SELECT MAX(ProjectPK) AS MaxPK FROM tblMaster")
  21.         Dim sql As String = _
  22.             "INSERT INTO tblMaster(ProjectPK, ProjectName) " & _
  23.             " VALUES(" & _
  24.             "'" & PK & "', " & _
  25.             "'Project Name - " & PK & "'" & _
  26.             ")"
  27.         '// INSERT
  28.         Call DoSQL(sql)
  29.         '//
  30.         For i = 1 To 10
  31.             sql = _
  32.                 "INSERT INTO tblDetail(ProjectPK, DetailCode) " & _
  33.                 " VALUES(" & _
  34.                 "'" & PK & "', " & _
  35.                 "'" & GenID(i) & "'" & _
  36.                 ")"
  37.             Call DoSQL(sql)
  38.         Next
  39.         MessageBox.Show("OK")
  40.     End Sub

  41.     Function GenID(ByVal iCount As Integer) As String
  42.         '// PRO-0001 - 0010
  43.         Return "PRO-" & Microsoft.VisualBasic.Right("0000" & iCount, 4)
  44.     End Function

  45.     '// UPDATE DATA
  46.     Public Function DoSQL(ByVal Sql As String) As Boolean
  47.         DoSQL = False
  48.         Dim Cmd As New OleDb.OleDbCommand
  49.         If Conn.State = ConnectionState.Closed Then Conn.Open()
  50.         Try
  51.             With Cmd
  52.                 .Connection = Conn
  53.                 .CommandType = CommandType.Text
  54.                 .CommandText = Sql
  55.                 .ExecuteNonQuery()
  56.                 .Dispose()
  57.                 DoSQL = True
  58.             End With
  59.         Catch ex As Exception
  60.             MsgBox("Error Update: " & ex.Message)
  61.         End Try
  62.     End Function

  63.     ' / Function to find and create the new Primary Key not to duplicate.
  64.     Public Function SetupNewPK(ByVal Sql As String) As Long
  65.         If Conn.State = ConnectionState.Closed Then Conn.Open()
  66.         Dim Cmd As New OleDb.OleDbCommand(Sql, Conn)
  67.         '/ Check if the information is available. And return it back
  68.         If IsDBNull(Cmd.ExecuteScalar) Then
  69.             '// Start at 1
  70.             SetupNewPK = 1
  71.         Else
  72.             SetupNewPK = Cmd.ExecuteScalar + 1
  73.         End If
  74.     End Function



  75.     Private Sub frmSampleOne2Many_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  76.         Conn = ConnectDataBase("I:\Project VBNET 2020\VB2010\SampleOneToMany.accdb")
  77.     End Sub
  78. End Class
คัดลอกไปที่คลิปบอร์ด


Sample.jpg
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

3

กระทู้

15

โพสต์

179

เครดิต

Member

Rank: 2

เครดิต
179
 เจ้าของ| โพสต์ 2020-10-20 08:44:16 | ดูโพสต์ทั้งหมด

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

ขอบคุณครับอาจารย์ทำได้แล้วครับผม ขนาดงงยังตอบได้ถูกประเด็นเป๊ะๆเบยฮ่าาา
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 22:36 , Processed in 0.288742 second(s), 6 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้