Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > รบกวนสอบถามอาจารย์และสมาชิกทุกท่านเรื่องการ Update/Replace Data Access ผ่าน VB.Net



 

รบกวนสอบถามอาจารย์และสมาชิกทุกท่านเรื่องการ Update/Replace Data Access ผ่าน VB.Net

 



Topic : 136735



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์




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
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2022-07-06 13:01:58 By : tawitsittanong View : 558 Reply : 9
 

 

No. 1



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

แทนการใช้

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
 


 

No. 2



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : lamaka.tor เมื่อวันที่ 2022-07-06 21:29:47
รายละเอียดของการตอบ ::
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)

            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



ลองเปลี่ยนโค๊ดแล้วครับ ผลลัพธ์ หากใช้คำสั่ง UPDATE ตามโค๊ดจะเป็นการเขียนข้อมูลทุกระเบียนเป็น ID ที่ 10 ค่า XX 624 YY 612 เพราะไม่มี Where ID ครับผม ผลลัพธ์ยังเหมือนเดิมนะครับผม
https://www.thaicreate.com/upload/stock/20220706124847.jpg


ประวัติการแก้ไข
2022-07-07 19:49:59
2022-07-07 19:50:47
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-07-07 19:48:32 By : tawitsittanong
 

 

No. 3



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

จากรูป ต้องเอา DataGridView1 + DataGridView2 ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-07-07 21:21:24 By : lamaka.tor
 


 

No. 4



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : lamaka.tor เมื่อวันที่ 2022-07-07 21:21:24
รายละเอียดของการตอบ ::
ใช่ครับผม ดาต้ากิต 1 ดึงข้อมูลจาก Access ดาต้ากิต 2 อิมพอร์ตข้อมูลจาก Excel นำมาบวกกัน แล้วแสดงข้อมูลใน ดาต้ากิต 3 แล้วกดบันทึกข้อมูลลง ฐานข้อมูล Access ครับผม

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-07-07 23:17:32 By : tawitsittanong
 


 

No. 5



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 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
 


 

No. 6



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 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 : ผ่านมา
 


 

No. 8



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

โอ๊ววววววววววววววว

ว่าแล้วทำไม่ถึงไม่ไม่ได้ซัก ที ต้องขอโทษ อย่างแรงครับ
ผมบอกผิดเอง ผมคิดแต่ว่าจะนำข้อมูลจาก 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
 


 

No. 9



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

เป็นผมจะใช้ datawizard ครับ
เราไม่ต้องมานั่งเขียนโค้ด sql นี้เอง
เพียงแค่ดูเรื่อง control ก็เพียงพอ

ลากวางๆๆๆ
จากนั้นก็สามารถใช้ for loop เพื่อ จัดการค่าใน DataGridView3 ได้เลย

โค้ดในส่วนของ sql ต่างๆ datawizard จะจัดการให้เราเอง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-07-09 08:38:56 By : lamaka.tor
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนสอบถามอาจารย์และสมาชิกทุกท่านเรื่องการ Update/Replace Data Access ผ่าน VB.Net
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่