 |
|
อยากเคลียร์ข้อมูลจาก Datagridview แล้วเพิ่มข้อมูลใหม่โดยไม่มีข้อมูลเก่ามาแสดง [ระบบร้านค้า] |
|
 |
|
|
 |
 |
|
Code (VB.NET)
Imports System.Data.OleDb
Public Class Mainmenu
Public constring As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" _
& Application.StartupPath & "\JarernDB.accdb"
Public con As New OleDbConnection
Public sqlCommand As New OleDbCommand
Public Sub formatGrid()
With DataGridView1
.Columns(0).HeaderText = "รหัสสินค้า"
.Columns(1).HeaderText = "ชื่อสินค้า"
.Columns(2).HeaderText = "หน่วยสินค้า"
.Columns(3).HeaderText = "จำนวนสินค้าในคลัง"
.Columns(4).HeaderText = "ราคาสินค้า"
.Columns(0).Width = 50
.Columns(1).Width = 150
.Columns(2).Width = 110
.Columns(3).Width = 80
.Columns(4).Width = 80
End With
End Sub
Public Sub formatGrid2()
With DataGridView2
.Columns(0).HeaderText() = "รหัสรายการ"
.Columns(1).HeaderText() = "รหัสสินค้า"
.Columns(2).HeaderText() = "ชื่อ"
.Columns(3).HeaderText() = "หน่วย"
.Columns(4).HeaderText() = "ราคา"
.Columns(5).HeaderText() = "จำนวน"
.Columns(6).HeaderText() = "รวม"
.Columns(0).Width = 120
.Columns(1).Width = 105
.Columns(2).Width = 155
.Columns(3).Width = 50
.Columns(4).Width = 100
.Columns(5).Width = 80
.Columns(6).Width = 135
End With
End Sub
Private Sub Mainmenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
con.ConnectionString = constring
If con.State = ConnectionState.Closed Then
con.Open()
End If
SetGrid()
formatGrid()
SelectPayType()
formatGrid2()
DataGridView2.DataSource.clear()
End Sub
Public Sub SetGrid()
Dim sqlQuery As String
Dim adapter As New OleDb.OleDbDataAdapter
Dim ds As DataSet = New DataSet
sqlQuery = "SELECT * FROM Tb_Product order by p_code "
DataGridView1.Font = New Font("Arial", 13, FontStyle.Bold)
adapter.SelectCommand = New OleDb.OleDbCommand(sqlQuery, con)
adapter.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
End Sub
Public Sub SelectPayType()
Dim sqlQuery As String
Dim adapter As New OleDb.OleDbDataAdapter
Dim ds As DataSet = New DataSet
Dim x As Integer
Dim sumamount As Double
sqlQuery = "SELECT * FROM Tb_pay "
DataGridView2.Font = New Font("Arial", 13, FontStyle.Bold)
adapter.SelectCommand = New OleDb.OleDbCommand(sqlQuery, con)
adapter.Fill(ds)
DataGridView2.DataSource = ds.Tables(0)
For x = 0 To DataGridView2.Rows.Count - 1 'คำนวณราคาทั้งหมด
sumamount = DataGridView2.Rows(x).Cells(6).Value + sumamount
Next
TextBox1.Text = sumamount
End Sub
Private Sub Add_product()
Dim sqlQuery As String
Try
sqlQuery = "Insert Into Tb_pay(pa_id,pa_code,pa_name,pa_unit,pa_price,pa_amount,pa_pay)Values('" & Tb_order.Text & "','" & Tb_id.Text & "','" & Tb_name.Text & "','" & Tb_unit.Text & "','" & Tb_price.Text & "','" & num_amount.Value & "','" & Tb_sum.Text & "')"
With sqlCommand
.CommandText = sqlQuery 'บันทึกข้อมูลใหม่
.Connection = con
.ExecuteNonQuery()
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub Del_product()
Dim dtAdapter As OleDb.OleDbDataAdapter
Dim sqlQuery As String
Dim ds As New DataTable
sqlQuery = "DELETE * FROM Tb_pay WHERE pa_code='" & Tb_id.Text & "'"
dtAdapter = New OleDb.OleDbDataAdapter(sqlQuery, con)
dtAdapter.Fill(ds)
End Sub
Private Sub Runnumber()
End Sub
Private Sub B_Exit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Exit.Click
If MsgBox("ต้องการออกจากระบบใช่หรือไม่", vbQuestion + vbYesNo) = vbYes Then
Me.Close()
End If
End Sub
Private Sub B_Storage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Storage.Click
warehouse.Show()
End Sub
Private Sub B_Search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Search.Click
Dim sqlQuery As String
Dim adapter As New OleDb.OleDbDataAdapter
Dim ds As DataSet = New DataSet
sqlQuery = "SELECT * FROM Tb_Product Where p_name LIKE '%" & TextBox2.Text & "%'order by p_code"
adapter.SelectCommand = New OleDb.OleDbCommand(sqlQuery, con)
adapter.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim i As Integer
i = DataGridView1.CurrentRow.Index
Dim amount As Integer = DataGridView1.Item(3, i).Value.ToString
num_amount.Maximum = amount
Tb_id.Text = DataGridView1.Item(0, i).Value.ToString
Tb_name.Text = DataGridView1.Item(1, i).Value.ToString
Tb_unit.Text = DataGridView1.Item(2, i).Value.ToString
Tb_price.Text = DataGridView1.Item(4, i).Value.ToString
Tb_sum.Text = Tb_price.Text * num_amount.Value
End Sub
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
Buyproduct.Show()
End Sub
Private Sub B_submit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_submit.Click
Dim sqlQuery As String
Dim ds As New DataTable
Dim dtAdapter As OleDb.OleDbDataAdapter
sqlQuery = "SELECT * FROM Tb_Product WHERE p_code='" & Tb_id.Text & "'"
dtAdapter = New OleDb.OleDbDataAdapter(sqlQuery, con)
dtAdapter.Fill(ds)
If Len(num_amount.Value) = 0 Or Len(Tb_id.Text) = 0 Then
MsgBox("กรุณาใส่จำนวน หรือ เลือกสินค้า", vbInformation)
Exit Sub
End If
Try
sqlQuery = "Update Tb_Product Set p_amount = p_amount- '" & num_amount.Value & "' Where p_code='" & Tb_id.Text & "'"
With sqlCommand
.CommandText = sqlQuery 'แก้ไขข้อมูล
.Connection = con
.ExecuteNonQuery()
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Add_product()
SelectPayType()
SetGrid()
End Sub
Private Sub B_cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_cancel.Click
Dim sqlQuery As String
Dim ds As New DataTable
Dim dtAdapter As OleDb.OleDbDataAdapter
sqlQuery = "SELECT * FROM Tb_pay WHERE pa_code='" & Tb_id.Text & "'"
dtAdapter = New OleDb.OleDbDataAdapter(sqlQuery, con)
dtAdapter.Fill(ds)
Try
sqlQuery = "Update Tb_Product Set p_amount = p_amount+ '" & num_amount.Value & "' Where p_code='" & Tb_id.Text & "'"
With sqlCommand
.CommandText = sqlQuery 'แก้ไขข้อมูล
.Connection = con
.ExecuteNonQuery()
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
num_amount.Value = 0
Del_product()
SelectPayType()
SetGrid()
End Sub
Private Sub DataGridView2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView2.CellClick
Dim i As Integer
i = DataGridView2.CurrentRow.Index
If i = DataGridView2.RowCount - 1 Then Exit Sub
Tb_id.Text = DataGridView2.Item(1, i).Value.ToString
Tb_name.Text = DataGridView2.Item(2, i).Value.ToString
Tb_unit.Text = DataGridView2.Item(3, i).Value.ToString
Tb_price.Text = DataGridView2.Item(4, i).Value.ToString
num_amount.Value = DataGridView2.Item(5, i).Value.ToString
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
End Class
Tag : .NET, Ms Access, VB.NET
|
|
 |
 |
 |
 |
Date :
2019-02-21 15:26:00 |
By :
2535466999857732 |
View :
986 |
Reply :
9 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แค่
Code (VB.NET)
DataGridView1.DataSource = ds.Tables(0)
ข้อมูลเก่าก็ไม่มีแล้วครับ
แนะว่า ลอง ลำดับขั้นตอนการทำงานต่างๆดูก่อนแล้วค่อยมามองว่า ขั้นตอนไหน ควรเพิ่มโค้ดอะไร หรือ ขาดอะไรบ้าง
แบบนั้นจะเห็น การทำงานที่ชัดเจนมากขึ้น และ ช่วยให้แก้โค้ดได้อย่างมีระเบียบมากขึ้น
ปล. ลองสร้างคลาส มาใช้สำหรับจัดการ sql ดู ก็ดีครับ โค้ดในหน้านี้จะสั้นลง
|
 |
 |
 |
 |
Date :
2019-02-21 15:36:42 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือผมลองแล้วครับแต่มันก็ยังเอาข้อมูล เก่ามาแสดงตอนเพิ่มสินค้าอ่ะครับ
พอกดเคลียมันเคลียให้แต่พอกดเพิ่มสินค้าเข้าไป มันไปเอาข้อมูลสินค้าก่อนหน้ามาอ่ะครับ
|
 |
 |
 |
 |
Date :
2019-02-21 18:11:39 |
By :
2535466999857732 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|




|
 |
 |
 |
 |
Date :
2019-02-21 20:40:31 |
By :
2535466999857732 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขั้นตอนการทำงาน
1.เลือกสินค้า
2.คำนวณราคาสินค้า
3.แสดงใบเสร็จ แล้วเคลียร์ข้อมูลรอขึ้นบิลใหม่
ผมอธิบายไม่ถูกจริงๆครับ
|
 |
 |
 |
 |
Date :
2019-02-21 20:42:10 |
By :
2535466999857732 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขั้นตอน หรือ โฟลชาร์ต ของการกดปุ่มเพิ่ม แค่นั้นก็พอ เพราะเราจะเจาะจงว่า เวลาเพิ่มข้อมูลจะต้องมีขั้นตอน หรือ ให้เกิด อะไรขึ้นบ้าง
เขียนเป็น บรรทัด ต่อ บรรทัด เหตุการณ์ ต่อ เหตุการณ์
ลองทำดูครับ
การฝึกมองรายละเอียดปลีกย่อยพวกนี้จะช่วยให้ การเขียนโค้ดง่ายขึ้นเยอะ มาก
เพราะ มือใหม่ส่วนมาก ที่เขียนโค้ดไม่ได้ทั้งๆที่ มีความรู้เรื่องการเขียนโค้ดอยู่แล้ว แต่กลับเขียนโค้ดออกมาไม่ได้
เพราะว่า ส่วนใหญ่ไม่ค่อยเขียนโฟลชาร์ต หรือ ขั้นตอน ของเหตุการณ์ ที่มันจะเกิดขึ้น
ในทางกลับกัน ต่อให้ ไม่ค่อยมีความรู้เรื่องโค้ด แต่ สามารถเขียน
ขั้นตอนต่างๆขึ้นมาได้ เราจะสามารถ หาโค้ดมาใส่ได้ง่ายขึ้นครับ
|
 |
 |
 |
 |
Date :
2019-02-21 22:28:24 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มายกตัวอย่าง ง่ายๆกันซักหน่อย
เช่น เราจะ เพิ่มข้อมูลในฐานข้อมูล ก็ใช้ ExecuteNonQuery ของ Command ได้เช่นกัน
ถ้าลองเขียนขั้นตอนๆคร่าวๆ ก็จะได้ประมาณนี้
1. open connection หรือเช็คว่า connection อยู่ใน สถานะ Open ไว้หรือยัง
พอเราเขียนออกมาแบบนี้ แน่นอน เราต้องมาการเช็ค Connection
อาจจะแค่ ใช้ if เพื่อ เช็ค หรือ ใช้ using สำหรับการ เปิด ปิด ง่ายๆ แล้วแต่ความถนัด
2. เช็คก่อนว่ามี ข้อมูล ที่จะเพิ่ม ในฐานข้อมูลหรือปล่าว ถ้ามี อาจจะเปลี่ยนเป็น Update แทน ไม่มีก็ Insert ไป
แล้วก็จะได้ sql ที่เป็น string มาตัวหนึ่ง จากการเช็คในข้อนี้
พอเราเขียนออกมาแบบนี้ แน่นอน เราต้องมาการเช็ค sql และ สร้าง sql เพื่อส่งค่าไปให้ Command.ExecuteNonQuery
เช่น
Code (VB.NET)
Dim count As Int32
query = "SELECT * FROM table WHERE ID = " & txtID.text
Dim cmd As New SqlCommand(sql, cnn)
cmd.Connection.Open()
count = cmd.ExecuteNonQuery
if count >=1 then
sql = "update table SET name = " & txtName.text & " WHERE ID = " & txtID.text
else
sql = "Insert into table values(" & txtID.text &"," & txtName.text & ")"
end if
3. เรียกใช้ ExecuteNonQuery จาก sql ที่ได้
Code (VB.NET)
cmd As New SqlCommand(sql, cnn)
cmd.Connection.Open()
cmd.ExecuteNonQuery()
4. ปิดหน้าฟอร์มไปเลย
Code (VB.NET)
Me.Close()
คร่าวๆ ก็ประมาณนี้ จะเห็นได้ว่า เพียงแค่ผมเกี่นหัวข้อไป ก็สามารถ ดึงเอา โค้ด จากความรู้พื้นฐานออกมาใช้ได้อย่างง่ายดาย
ไม่ว่าจะเป็น IF SqlCommand(query, con).ExecuteNonQuery Me.Close()
มันจะมา แบบบรรทัดต่อบรรทัด กันเลยทีเดียว
ยิ่งคนที่เขียนขั้นตอนได้ละเอียกมากเท่าไหร่ยิ่งมองโค้ดไปไกลมากขึ้นเท่านั้น และยังมององค์รวมทั้งหน้า หรือทั้งโปรเจคได้อีกด้วย
ยกตัวอย่างเช่น เราต้องใช้งาน sql และ Connection บ่อยๆ แถมใช้หลายๆฟอร์ม ก็ลองสร้าง คลาสโมดูล ขึ้นมา เพื่อมาจัดการกับมัน เช่น
Code (VB.NET)
Module Module1
Public Sub SQLExecuteNonQuery(ByVal sql As String, Optional ByVal strConn As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" _
& Application.StartupPath & "\JarernDB.accdb")
Using cnn As New SqlConnection(strConn)
Dim cmd As New SqlCommand(sql, cnn)
cmd.Connection.Open()
cmd.ExecuteNonQuery()
End Using
End Sub
End Module
เพียงแค่นี้เราก็เปิดจากฟอร์มไหน ก็ได้
เช่น
Code (VB.NET)
Module1.SQLExecuteNonQuery("Insert into table values(" & txtID.text &"," & txtName.text & ")")
เราก็ไม่ต้องเขียนโค้ดยาวๆ ทุกครั้งที่เราเรียกใช้นั่นเอง
สุดท้าย สำคัญคือ การที่เราเข้าใจขั้นตอนการทำงานทุกขั้นตอนของโปรแกรม
หากเข้าใจ โค้ดมันจะมาเอง
|
 |
 |
 |
 |
Date :
2019-02-22 00:49:05 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
where จากรหัสรายการ ก็น่าจะได้นะครับ
|
 |
 |
 |
 |
Date :
2019-02-22 10:27:56 |
By :
sent |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
TOR_CHEMISTRY
ขอบคุณมากนะครับเดี๋ยวผมลองก่อนนะครับ
|
 |
 |
 |
 |
Date :
2019-02-22 22:17:59 |
By :
2535466999857732 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|