 |
|
รบกวนสอบถามอาจารย์และสมาชิกทุกท่านเรื่องการ Update/Replace Data Access ผ่าน VB.Net |
|
 |
|
|
 |
 |
|
https://www.thaicreate.com/upload/stock/20220706124847.jpg
Code (VB.NET)
Imports System.Data.OleDb
Imports System.Linq
Imports System.Data.SqlClient
Imports Microsoft.Office.Core
Imports Excel = Microsoft.Office.Interop.Excel
Imports ExcelAutoFormat = Microsoft.Office.Interop.Excel.XlRangeAutoFormat
Imports Microsoft.Office.Interop
Imports System.IO
Imports System.Xml.XPath
Imports System.Data
Imports System.Xml
Public Class Form1
Dim Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\MyData.MDB")
Dim CMD As OleDbCommand
Dim dr As OleDbDataReader
Dim da As OleDbDataAdapter
Dim ds As DataSet
Dim SQL As String
Dim DelByid As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CenterToScreen()
'Call LoadInfo()
End Sub
Sub LoadInfo() 'Load Data Show
SQL = "SELECT * FROM Table1"
CMD = New OleDbCommand(SQL, Conn)
Try
If Conn.State = ConnectionState.Open Then Conn.Close()
Conn.Open()
dr = CMD.ExecuteReader
DataGridView1.Rows.Clear()
Dim iD As Integer = 1
While dr.Read
DataGridView1.Rows.Add(iD, dr("XX").ToString, dr("YY").ToString)
iD += 1
End While
Conn.Close()
CMD.Dispose()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call LoadInfo()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim iconn As OleDbConnection
Dim idta As OleDbDataAdapter
Dim idts As DataSet
Dim excel As String
Dim OpenFileDialog As New OpenFileDialog
OpenFileDialog1.FileName = ""
OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
OpenFileDialog1.Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls"
If (OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
DataGridView2.Columns.Clear()
Dim fi As New FileInfo(OpenFileDialog1.FileName)
Dim FileName As String = OpenFileDialog1.FileName
excel = fi.FullName
iconn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel + ";Extended Properties=Excel 12.0;")
idta = New OleDbDataAdapter("Select * From [Sheet1$]", iconn)
idts = New DataSet
idta.Fill(idts, "[Sheet1$]")
DataGridView2.DataSource = idts
DataGridView2.DataMember = "[Sheet1$]"
iconn.Close()
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If DataGridView1.Rows.Count > 0 And DataGridView2.Rows.Count > 0 Then
DataGridView3.Rows.Clear()
Dim row As Integer = DataGridView1.Rows.Count
For i As Integer = 0 To row - 1
DataGridView3.Rows.Add(DataGridView1.Rows(i).Cells(0).Value, DataGridView1.Rows(i).Cells(1).Value + DataGridView2.Rows(i).Cells(1).Value, DataGridView1.Rows(i).Cells(2).Value + DataGridView2.Rows(i).Cells(2).Value)
Next
End If
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If DataGridView3.Rows.Count = 0 Then
Exit Sub
Else
Call SaveToData()
End If
End Sub
Sub SaveToData()
Try
If Conn.State = ConnectionState.Open Then Conn.Close()
Conn.Open()
Dim i As Integer = 0
For Each row As DataGridViewRow In DataGridView3.Rows
If Not row.IsNewRow Then
SQL = "SELECT * FROM Table1"
CMD = New OleDbCommand(SQL, Conn)
'CMD.CommandText = "UPDATE Table1 SET XX='" & DataGridView3.Rows(i).Cells(1).Value & "',YY='" & DataGridView3.Rows(i).Cells(2).Value
'Error Syntax error in string in query expression
CMD.CommandText = "UPDATE Table1 SET XX=" & DataGridView3.Rows(i).Cells(1).Value & ",YY=" & DataGridView3.Rows(i).Cells(2).Value
CMD.ExecuteNonQuery()
End If
Next
Conn.Close()
CMD.Dispose()
MessageBox.Show("Save All Data", "!!!", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show(ex.Message, "!!!", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class
จากภาพ ฐานข้อมูลมี 2 คอลัม 10 แถว ต้องการบันทึกข้อมูล จากตารางที่ 3 ลงฐานข้อมูล หากใช้คำสั่ง UPDATE ตามโค๊ดจะเป็นการเขียนข้อมูลทุกระเบียนเป็น ID ที่ 10 ค่า XX 624 YY 612 เพราะไม่มี Where ID
รบกวนสอบถามอาจารย์และเพื่อนสมาชิกหากต้องการให้ฐานข้อมูลอัพเดทตามตารางที่ 3 ต้อง ใช้คำสั่งอย่างไรในการเขียนโค๊ด UPDATE/Relace ข้อมูล ครับผม ขอคำแนะนำด้วยครับ ปล.ขอเป็นโค๊ดเลยยิ่งดีครับผม
Tag : .NET, Ms Access, Win (Windows App), VB.NET, Windows
|
ประวัติการแก้ไข 2022-07-06 13:03:28
|
 |
 |
 |
 |
Date :
2022-07-06 13:01:58 |
By :
tawitsittanong |
View :
604 |
Reply :
9 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แทนการใช้
Code (VB.NET)
For Each row As DataGridViewRow In DataGridView3.Rows
ที่จะเช็คแค่ DataGridView3 ลองเปลี่ยนไปใช้
Code (VB.NET)
For i As Integer = 0 To DataGridView3.Rows.Count - 1
'จัดการทั้ง 3 DataGridView ในแถวเดียวกัน
'จะ บวก ลบ แล้ว ค่อย ไปบันทึกลง DataGridView3 ก็ได้ ขอแค่อยู่ใน ID เดียวกัน
Next
|
 |
 |
 |
 |
Date :
2022-07-06 21:29:47 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จากรูป ต้องเอา DataGridView1 + DataGridView2 ครับ
|
 |
 |
 |
 |
Date :
2022-07-07 21:21:24 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 4 เขียนโดย : tawitsittanong เมื่อวันที่ 2022-07-07 23:17:32
รายละเอียดของการตอบ ::
งั้นก็เขียนโค้ดตามนั้น ได้เลย ครับ
หากยังงงอยู่ ลองทำ remark หรือ comment ลำดับขั้น
'1. ขั้นตอนที่ 1 ทำอะไรบ้าง
โค้ด......
'2. ขั้นตอนที่ 2 ทำอะไรบ้าง
โค้ด......
'3. ขั้นตอนที่ 3 ทำอะไรบ้าง
โค้ด......
'4. ขั้นตอนที่ 4 ทำอะไรบ้าง
โค้ด......
การเขียนคำอธิบาย จะทำให้เรา รู้ว่า เราเขียนโค้ดครบไปแค่ไหนแล้ว ขาดจุดไหน บ้าง
ยิ่งเขียนละเอียด เราจะยิ่งมองภาพชัดเจนขึ้นในการเขียนโค้ด ครับ
อย่างในโค้ด ถ้าเราเขียนอธิบายชัดเจน
เราจะไม่งง ครับ
Code (VB.NET)
Sub SaveToData()
If Conn.State = ConnectionState.Open Then Conn.Close()
Conn.Open()
For i As Integer = 0 To DataGridView3.Rows.Count - 1
SQL = "SELECT * FROM Table1"
CMD = New OleDbCommand(SQL, Conn)
'XX = DataGridView1.Rows(i).Cells(1).Value + DataGridView2.Rows(i).Cells(1).Value
'YY = DataGridView1.Rows(i).Cells(2).Value + DataGridView2.Rows(i).Cells(2).Value
'โค้ด ...........................................................
Next
Conn.Close()
CMD.Dispose()
MessageBox.Show("Save All Data", "!!!", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
|
 |
 |
 |
 |
Date :
2022-07-08 08:08:09 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 5 เขียนโดย : lamaka.tor เมื่อวันที่ 2022-07-08 08:08:09
รายละเอียดของการตอบ ::
Sub SaveToData()
If Conn.State = ConnectionState.Open Then Conn.Close()
Conn.Open()
DataGridView3.Rows.Clear()
Dim XX As Integer = 0
Dim YY As Integer = 0
For i As Integer = 0 To DataGridView1.Rows.Count - 1
SQL = "SELECT * FROM Table1"
CMD = New OleDbCommand(SQL, Conn)
'ทำการรวมข้อมูล DataGridView1 + DataGridView2
'โดยกำหนดให้ค่า XX คือการคำนวณ ค่าคอลัมที่ 2
'โดยกำหนดให้ค่า YY คือการคำนวณ ค่าคอลัมที่ 3
XX = DataGridView1.Rows(i).Cells(1).Value + DataGridView2.Rows(i).Cells(1).Value
YY = DataGridView1.Rows(i).Cells(2).Value + DataGridView2.Rows(i).Cells(2).Value
'หลังจากคำนวณค่า XX,YY แล้วให้แสดงผลที่ DataGridView 3
'โดยแสดงค่าคอลัมที่ 1 (ID) ตาม DataGridView 1 ตามด้วยค่า XX และ YY
DataGridView3.Rows.Add(DataGridView1.Rows(i).Cells(0).Value, XX.ToString, YY.ToString)
'แล้วทำการบันทึกลงฐานข้อมูล MyData.mdb ด้วยคำสั่ง UPDATE
CMD.CommandText = "UPDATE Table1 SET XX=" & DataGridView3.Rows(i).Cells(1).Value & ",YY=" & DataGridView3.Rows(i).Cells(2).Value
CMD.ExecuteNonQuery()
Next
Conn.Close()
CMD.Dispose()
MessageBox.Show("Save All Data", "!!!", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
หลังจากอัพเดทโค๊ด ยังไม่มาสารถบันทึก ข้อมูลทั้งหมดใน DataGridView 3 ลงฐานข้อมูลได้ครบทั้งหมด น่ะครับผม
|
ประวัติการแก้ไข 2022-07-08 19:08:24
 |
 |
 |
 |
Date :
2022-07-08 17:40:53 |
By :
tawitsittanong |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตัวอย่างและวิธีการที่ใช้งาน มันมาก่อนเทคโนโลยีใหม่ฯ พึ่งจะมา เช่น
- Dart/Flutter
- React Native
- .NET MAUI
- etc...
เทคโนโลยี Single CodeBase เขียนครั้งเดียววิ่งได้ทุกฯอุปกรณ์ เช่น Mobile/Web/Windows/etc..
เล่าให้ฟังเฉยฯ ดาด้าเบส Access มันมาก่อน SQlite (PLC)...
|
 |
 |
 |
 |
Date :
2022-07-08 20:29:28 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โอ๊ววววววววววววววว
ว่าแล้วทำไม่ถึงไม่ไม่ได้ซัก ที ต้องขอโทษ อย่างแรงครับ
ผมบอกผิดเอง ผมคิดแต่ว่าจะนำข้อมูลจาก DataGridView1+DataGridView2 แล้วบันทึก โดยลืมคิดไปว่า
จริงๆแล้ว ข้อมูลมันมีใน DataGridView3 แล้ว
  
งั้นเริ่มใหม่นะครับ
เราสามารถตัดส่วนนี้ออกไปได้เลย ครับ เพราะมีข้อมูลแล้ว
Code (VB.NET)
'ทำการรวมข้อมูล DataGridView1 + DataGridView2
'โดยกำหนดให้ค่า XX คือการคำนวณ ค่าคอลัมที่ 2
'โดยกำหนดให้ค่า YY คือการคำนวณ ค่าคอลัมที่ 3
XX = DataGridView1.Rows(i).Cells(1).Value + DataGridView2.Rows(i).Cells(1).Value
YY = DataGridView1.Rows(i).Cells(2).Value + DataGridView2.Rows(i).Cells(2).Value
'หลังจากคำนวณค่า XX,YY แล้วให้แสดงผลที่ DataGridView 3
'โดยแสดงค่าคอลัมที่ 1 (ID) ตาม DataGridView 1 ตามด้วยค่า XX และ YY
DataGridView3.Rows.Add(DataGridView1.Rows(i).Cells(0).Value, XX.ToString, YY.ToString)
แต่ให้เพิ่มการเช็คข้อมูลก่อนการบันทึก
Code (VB.NET)
Sub SaveToData()
If Conn.State = ConnectionState.Open Then Conn.Close()
Conn.Open()
DataGridView3.Rows.Clear()
Dim XX As Integer = 0
Dim YY As Integer = 0
For i As Integer = 0 To DataGridView1.Rows.Count - 1
SQL = "SELECT * FROM Table1"
CMD = New OleDbCommand(SQL, Conn)
'เช็คข้อมูลก่อนว่ามีไม๊ โดย select มาดู
'ถ้าไม่มี ให้ Insert ข้อมูล ถ้ามี ให้ update
'รัน ExecuteNonQuery
CMD.ExecuteNonQuery()
Next
Conn.Close()
CMD.Dispose()
MessageBox.Show("Save All Data", "!!!", MessageBoxButtons.OK, MessageBoxIcon.Information)
'ในกรณีที่ ข้อมูลใน MyData.mdb มีจำนวนคงที่ ไม่จำเป็นต้องเช็ค แต่หาก สามารถเพิ่มข้อมูลได้ จำเป็ยนต้องเช็ค เพื่อ Insert/Update
End Sub
https://www.thaicreate.com/tutorial/sql-update.html
ต้องขอโทษด้วยครับที่ทำให้เสียเวลาไปปล่าวๆ
จริงๆมีข้อมูลแล้ว ก็สามารถ เช็ค และ Insert/Update ได้เลย ครับ
แต่หากมีข้อมูลคงที่ เช่น มันจะมี 10 ข้อมูลไปตลอด ไม่มีเพิ่ม แบบนั้น ไม่ต้องเช็คเพราะยังไงก็ต้องมีข้อมูลอยู่แล้ว
แต่เขียนให้เช็คดีกว่า โค้ดจะได้ยืดหยุ่น ครับ
หาเหล้ากินต่อดีก่าาาาาาา
|
 |
 |
 |
 |
Date :
2022-07-09 08:09:20 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เป็นผมจะใช้ datawizard ครับ
เราไม่ต้องมานั่งเขียนโค้ด sql นี้เอง
เพียงแค่ดูเรื่อง control ก็เพียงพอ
ลากวางๆๆๆ
จากนั้นก็สามารถใช้ for loop เพื่อ จัดการค่าใน DataGridView3 ได้เลย
โค้ดในส่วนของ sql ต่างๆ datawizard จะจัดการให้เราเอง
|
 |
 |
 |
 |
Date :
2022-07-09 08:38:56 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|