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

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

Visual Basic เอา ComboBox ลง Access ยังไงครับ

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

2

กระทู้

4

โพสต์

18

เครดิต

Newbie

Rank: 1

เครดิต
18

555.png

รบกวนขอสอบถามการเขียนโค้ดนะครับ

1.ถ้าผมป้อนหมายเลขไปที่ช่องหมาเลข 1 จากนั้นก็เลือกข้อมูลตามหมายเลข 2 3 4 จากนั้นกดบันทึก
  อยากจะไม่ให้หมายเลข 2 3 4 หายไปได้อย่างไรครับ ให้แต่หมายเลข 1 นั้นหายไป รอการป้อนข้อมูลต่อไป

2.ตรง DataGrid เมื่อกดเพิ่มข้อมูลแล้วมันติดลบครับ ตรงสีฟ้าๆ

3.ถ้าหากผมอยากป้อนข้อมูลลงหมายเลข 1 ไปเรื่อยๆ แล้วกดบันทึกทีเดียว และข้อมูลบนหมายเลข 2 3 4 ตามมาด้วย
   เขียนโค้ดประมาณไหนครับ

###ขอขอบคุณล่วงหน้านะครับ หากเป็นการรบกวนจนเกินไป แนะนำแนวทางให้ผมก็ได้ครับ ขอบคุณครับ

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583
โพสต์ 2019-5-25 12:49:05 | ดูโพสต์ทั้งหมด

ควรจะอธิบายรายละเอียดให้มากกว่านี้ จะให้โปรแกรมทำอะไร ออกแบบตารางข้อมูลยังไงครับ
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

2

กระทู้

4

โพสต์

18

เครดิต

Newbie

Rank: 1

เครดิต
18
 เจ้าของ| โพสต์ 2019-5-26 23:50:11 | ดูโพสต์ทั้งหมด

thongkorn ตอบกลับเมื่อ 2019-5-25 12:49
ควรจะอธิบายรายละเอียดให้มากกว่านี้ จะให้โปรแกรมทำอะไร ออกแบบตารางข้อมูลยังไงครับ

รูปภาพ https://uppic.cc/d/KERF

ผมออกแบบตารางโดยการนำฐานข้อมูลมาจากโปรแกรม Access โดยนำข้อมูลที่มีอยู่แล้วประมาณ 100 รายการ ทำการ Add New Data Source จากไฟล์ Access จากนั้นก็ทำฟอร์มรับข้อมูล โดยผมสร้างปุ่ม รับ ลบ ค้นหา แก้ไขข้อมูล ตามตัวอย่างใน Youtube ทีนี้ผมติดปัญหาตรงที่ว่า กด New เพื่อเพิ่มข้อมูลลงไปในตาราง ลำดับมันติดลบ -1 เมื่อผมกดปุ่ม Delete ออก โปรแกรมแจ้ง error https://uppic.cc/d/KES4 ตามภาพเลยครับ

/***********************************************************
ส่วนโปรแกรมที่ออกแบบไว้คืออยากทำฟอร์ม บันทึก แก้ไข ลบ การเบิกของประจำวันครับ สามารถเพิ่มข้อมูลทีละมากๆ ได้ โดยกดที่ LNB โปรแกรมจะเปิดหน้าฟอร์มขึ้นมาใหม่ จากนั้นผมก็จะเลือกข้อมูลก่อนเช่น วันที่ หมายเลขทะเบียน สถานะ
>> หลังจากนั้นกด New ผมก็จะยิงบาร์โค้ดไปเรื่อยๆ หลังจากที่ครบแล้วผมก็จะกดบันทึก
>> ข้อมูลที่บันทึกจะไปอยู่ที่ตารางหลักครับ ประมาณนี้ครับ

หากอธิบายไม่เข้าใจผมขออภัยจริงๆครับ ผมพึ่งจับ Visual ได้ 2 วันครับ ต้องขอโทษด้วยนะครับ

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583
โพสต์ 2019-5-27 20:23:32 | ดูโพสต์ทั้งหมด

ผมว่าต้องออกแบบตารางข้อมูลใหม่ก่อนดีกว่าครับ เพราะจากรูปมันเป็นมุมมองมาจากการใช้ Excel ซึ่งต่างไปจากการเก็บข้อมูลลง DataBase ผมขอยกตัวอย่างโปรแกรมในลักษณะเดียวกันให้ดู เป็นโปรแกรมเบิกจ่ายวัสดุ โดยที่ใบเบิก 1 ใบ จะมีพนักงาน/เจ้าหน้าทีทำเรื่องเบิกเพียง 1 คน แต่สามารถเบิกวัสดุพร้อมกันได้หลายชนิด ซึ่งการออกแบบนี้จะลดความซ้ำซ้อนของการจัดเก็บข้อมูลครับผม  ...
StoreKeeper.png
StoreKeeperData.png
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583
โพสต์ 2019-5-28 11:10:33 | ดูโพสต์ทั้งหมด

การเขียนโปรแกรมด้วย Visual Basic ไม่ได้ง่ายๆเหมือนที่หลายๆคนคิด อันดับแรกต้องเรียนรู้การใช้งาน Control ต่างๆและสามารถควบคุมมันให้ได้ก่อนครับ ผมก็เลยเขียนโค้ดบางส่วนให้ได้นำไปศึกษาดูครับ ซึ่งเราจะเรียกว่า Run Time หรือโปรแกรมจะทำงานตามคำสั่งในขณะที่รันโปรแกรม ซึ่งจะมีประสิทธิภาพและมีความยืดหยุ่นสูงมาก จะทำให้เราสามารถควบคุมการทำงานของโปรแกรมได้ดีกว่า ...
  1. Public Class frmBorrowMaterial

  2.     Private Sub frmBorrowMaterial_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         '// Initialized DataGridView
  4.         Call InitGridView()
  5.         '// จำลองข้อมูลจาก DataTable มาแสดงผลใน ComboBox
  6.         Call PopulateComboBox(cmbPlate, "PlatePK", "PlateName", GetTablePlate)
  7.         Call PopulateComboBox(cmbStatus, "StatusPK", "StatusName", GetTableStatus)
  8.     End Sub

  9.     ' / --------------------------------------------------------------------------------
  10.     ' / Load table detail into ComboBox
  11.     Public Sub PopulateComboBox(ByRef cmbCtrl As ComboBox, strFieldPK As String, strFieldName As String, ByRef DT As DataTable)
  12.         Try
  13.             '/ Primary Key (ValueMember)
  14.             cmbCtrl.ValueMember = strFieldPK
  15.             '/ Display the name
  16.             cmbCtrl.DisplayMember = strFieldName
  17.             cmbCtrl.DataSource = DT
  18.             '// Autocomplete
  19.             With cmbCtrl
  20.                 '.DropDownStyle = ComboBoxStyle.DropDownList
  21.                 '.AutoCompleteMode = AutoCompleteMode.None
  22.                 '// สามารถคีย์ค่าลงได้
  23.                 .DropDownStyle = ComboBoxStyle.DropDown
  24.                 .AutoCompleteMode = AutoCompleteMode.SuggestAppend
  25.                 .AutoCompleteSource = AutoCompleteSource.ListItems
  26.             End With
  27.         Catch ex As Exception
  28.             MessageBox.Show(ex.Message)
  29.         End Try
  30.     End Sub

  31.     Private Sub InitGridView()
  32.         With dgvData
  33.             ' Columns Specified
  34.             .Columns.Add("BorrowPK", "BorrowPK")
  35.             .Columns.Add("MemberID", "หมายเลขสมาชิก")
  36.             .Columns.Add("LnbID", "หมายเลข LNB")
  37.             .Columns.Add("DateBorrow", "วันที่เบิก")
  38.             .Columns.Add("Status", "สถานะ")
  39.             .Columns.Add("Plate", "ทะเบียน")
  40.         End With
  41.         '//
  42.         With dgvData
  43.             .RowHeadersVisible = False
  44.             .AllowUserToAddRows = False
  45.             .AllowUserToDeleteRows = False
  46.             .AllowUserToResizeRows = False
  47.             .MultiSelect = False
  48.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  49.             .ReadOnly = True
  50.             '//
  51.             .Font = New Font("Tahoma", 9)
  52.             .RowTemplate.Height = 26
  53.             .RowTemplate.MinimumHeight = 26
  54.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  55.             '// Even-Odd Color
  56.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  57.             ' Adjust Header Styles
  58.             With .ColumnHeadersDefaultCellStyle
  59.                 .BackColor = Color.Navy
  60.                 .ForeColor = Color.Black
  61.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  62.                 .WrapMode = DataGridViewTriState.False
  63.             End With
  64.         End With
  65.     End Sub

  66.     '// ทำข้อมูลตัวอย่างเก็บไว้ใน DataTable
  67.     Function GetTablePlate() As DataTable
  68.         Dim DT = New DataTable
  69.         '/ Add columns.
  70.         DT.Columns.Add("PlatePK", GetType(Integer))
  71.         DT.Columns.Add("PlateName", GetType(String))
  72.         '//
  73.         DT.Rows.Add(1, "กข ขอนแก่น 1234")
  74.         DT.Rows.Add(2, "ออ หนองคาย 5555")
  75.         DT.Rows.Add(3, "ขข อุดรธานี 7890")
  76.         DT.Rows.Add(4, "บบ นครราชสีมา 1111")
  77.         DT.Rows.Add(5, "ดด เชียงใหม่ 5050")
  78.         '//
  79.         Return DT
  80.     End Function

  81.     Function GetTableStatus() As DataTable
  82.         Dim DT = New DataTable
  83.         '/ Add columns.
  84.         DT.Columns.Add("StatusPK", GetType(Integer))
  85.         DT.Columns.Add("StatusName", GetType(String))
  86.         '//
  87.         DT.Rows.Add(1, "พร้อมใช้งาน")
  88.         DT.Rows.Add(2, "ซ่อมบำรุง")
  89.         DT.Rows.Add(3, "จำหน่าย")
  90.         '//
  91.         Return DT
  92.     End Function

  93.     Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
  94.         '// เช็คค่าว่าง
  95.         If txtMemberID.Text = "" Or txtLNB.Text = "" Then Exit Sub
  96.         '// เพิ่มแถวใหม่ และคำนวณหาค่าสูงสุดในหลักแรก (Index = 0)
  97.         Dim MaxRow As Integer = 0
  98.         For i As Integer = 0 To dgvData.Rows.Count() - 1 Step 1
  99.             If i = 0 Then
  100.                 MaxRow = dgvData.Rows(i).Cells(0).Value
  101.                 Exit For
  102.             End If
  103.             If MaxRow < dgvData.Rows(i).Cells(0).Value Then
  104.                 MaxRow = dgvData.Rows(i).Cells(0).Value
  105.             End If
  106.         Next
  107.         MaxRow += 1
  108.         '//
  109.         Dim row As String() = New String() {MaxRow, txtMemberID.Text, txtLNB.Text, Format(dtpBorrow.Value, "dd/MM/yyyy"), cmbStatus.Text, cmbPlate.Text}
  110.         dgvData.Rows.Add(row)
  111.         '// Clear value
  112.         txtMemberID.Clear()
  113.         txtLNB.Clear()
  114.         txtMemberID.Focus()
  115.     End Sub

  116.     Private Sub btnRemove_Click(sender As System.Object, e As System.EventArgs) Handles btnRemove.Click
  117.         '// ลบรายการแถวที่เลือกออกไป
  118.         If dgvData.RowCount = 0 Then Exit Sub
  119.         dgvData.Rows.Remove(dgvData.CurrentRow)
  120.         txtMemberID.Focus()
  121.     End Sub
  122. End Class
คัดลอกไปที่คลิปบอร์ด



Borrow.png

BorrowMaterial.zip

16.72 KB, ดาวน์โหลดแล้ว: 11939

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583
โพสต์ 2019-5-28 12:26:36 | ดูโพสต์ทั้งหมด

สำหรับคำถามที่ถามว่าจะอ่านค่า Primary Key ของทะเบียนรถ (หรือสถานะ) ใน ComboBox ได้อย่างไร ... มีหลายวิธีครับ หากเอาวิธีที่ง่ายสุดๆ ก็คือการเอาค่า Primary Key ของแต่ละตัวไปซ่อนเอาไว้ในตารางกริด

เริ่มต้นสร้างหลักมาเพิ่ม และซ่อนมันเอาไว้ด้วยการกำหนด Visible = False
  1.     Private Sub InitGridView()
  2.         With dgvData
  3.             ' Columns Specified
  4.             .Columns.Add("BorrowPK", "BorrowPK")
  5.             .Columns.Add("MemberID", "หมายเลขสมาชิก")
  6.             .Columns.Add("LnbID", "หมายเลข LNB")
  7.             .Columns.Add("DateBorrow", "วันที่เบิก")
  8.             .Columns.Add("Status", "สถานะ")
  9.             .Columns.Add("Plate", "ทะเบียน")
  10.             .Columns.Add("PlatePK", "PlatePK")  '// ซ่อนค่านี้ไว้
  11.         End With
  12.         dgvData.Columns("PlatePK").Visible = False
  13.         '//
  14.         With dgvData
  15.             .RowHeadersVisible = False
  16.             .AllowUserToAddRows = False
  17.             .AllowUserToDeleteRows = False
  18.             .AllowUserToResizeRows = False
  19.             .MultiSelect = False
  20.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  21.             .ReadOnly = True
  22.             '//
  23.             .Font = New Font("Tahoma", 9)
  24.             .RowTemplate.Height = 26
  25.             .RowTemplate.MinimumHeight = 26
  26.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  27.             '// Even-Odd Color
  28.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  29.             ' Adjust Header Styles
  30.             With .ColumnHeadersDefaultCellStyle
  31.                 .BackColor = Color.Navy
  32.                 .ForeColor = Color.Black
  33.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  34.                 .WrapMode = DataGridViewTriState.False
  35.             End With
  36.         End With
  37.     End Sub
คัดลอกไปที่คลิปบอร์ด

เวลาที่นำข้อมูลไปเพิ่มในตารางกริด ก็ใส่ค่า ValueMember ลงไปต่อท้าย (SelectedValue) แล้วนำค่าในหลักนี้ไปเก็บลงฐานข้อมูล ...
  1.     Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
  2.         '// เช็คค่าว่าง
  3.         If txtMemberID.Text = "" Or txtLNB.Text = "" Then Exit Sub
  4.         '// เพิ่มแถวใหม่ และคำนวณหาค่าสูงสุดในหลักแรก (Index = 0)
  5.         Dim MaxRow As Integer = 0
  6.         For i As Integer = 0 To dgvData.Rows.Count() - 1 Step 1
  7.             If i = 0 Then
  8.                 MaxRow = dgvData.Rows(i).Cells(0).Value
  9.                 Exit For
  10.             End If
  11.             If MaxRow < dgvData.Rows(i).Cells(0).Value Then
  12.                 MaxRow = dgvData.Rows(i).Cells(0).Value
  13.             End If
  14.         Next
  15.         MaxRow += 1
  16.         '//
  17.         Dim row As String() = New String() {MaxRow, txtMemberID.Text, txtLNB.Text, Format(dtpBorrow.Value, "dd/MM/yyyy"), cmbStatus.Text, cmbPlate.Text, cmbPlate.SelectedValue}
  18.         dgvData.Rows.Add(row)
  19.         '// Clear value
  20.         txtMemberID.Clear()
  21.         txtLNB.Clear()
  22.         txtMemberID.Focus()
  23.     End Sub
คัดลอกไปที่คลิปบอร์ด




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

3

กระทู้

17

โพสต์

265

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
265
โพสต์ 2019-5-29 16:19:16 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-11-27 23:32 , Processed in 0.397128 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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