 |
|
ช่วยดูทีค่ะ พรุ่งนี้จะสอบแร้ววว TT_TT จะแก้ไขใบขายอ่ะค่ะ คือจะลบรหัสใบขายจาก TBSaleDetail |
|
 |
|
|
 |
 |
|
บันทึกตรงไหนไม่ได้หรอครับ
|
 |
 |
 |
 |
Date :
2010-05-28 20:34:50 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
บันทึกซ้ำลงตาราง Saledetail ไม่ได้อ่ะค่ะ
|
 |
 |
 |
 |
Date :
2010-05-28 20:53:13 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอดูโค้ดตอนบันทึกหน่อยครับ
|
 |
 |
 |
 |
Date :
2010-05-28 20:55:31 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี่ค่ะ
Code (VB.NET)
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim sb As StringBuilder
If TxtSaleID.Text.Trim = "" Then
MessageBox.Show("กรุณากดปุ่มเพิ่มใบขายก่อน!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
If TxtCusID.Text.Trim = "" Then
MessageBox.Show("กรุณาเลือกลูกค้าก่อน!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
If TxtProID.Text.Trim = "" Then
MessageBox.Show("กรุณาเลือสินค้าที่ต้องการ!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
If MessageBox.Show("คุณต้องการบันทึกข้อมูลใช่หรือไม่", "", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
Exit Sub
End If
'-- บันทึก ลงตาราง sale
Dim SaveSale As String = ""
sb = New StringBuilder()
sb.Remove(0, sb.Length)
sb.Append("INSERT INTO TBSale (SaleId,CusId,SaleDate,NetVat,NetTotal)")
sb.Append(" VALUES (@SaleID,@CusID,@SaleDate,@NetVat,@NetTotal)")
SaveSale = sb.ToString()
With cmm
.Parameters.Clear()
.CommandText = SaveSale
.Connection = cnn
cnn.Open()
.Parameters.AddWithValue("@SaleID", TxtSaleID.Text)
.Parameters.AddWithValue("@CusID", TxtCusID.Text)
.Parameters.Add("@SaleDate", SqlDbType.DateTime).Value = TxtSaleDate.Text
.Parameters.Add("@NetVat", SqlDbType.Float).Value = CSng(lblNetVAT.Text)
.Parameters.Add("@NetTotal", SqlDbType.Float).Value = CSng(Lbltotal.Text)
.ExecuteNonQuery()
End With
'บันทึกลงตาราง saledetail
Dim d As Integer = 0
For d = 0 To lviProduct.Items.Count - 1
sb.Remove(0, sb.Length)
sb.Append("INSERT INTO TBSaleDetail(SaleId,ProId,Amount,SalePrice,Total)")
sb.Append(" Values(@Sid,@Pid,@amount,@SalePrice,@Total)")
SaveSale = sb.ToString()
With cmm
.Parameters.Clear()
.CommandText = SaveSale
.Parameters.AddWithValue("@Sid", TxtSaleID.Text)
.Parameters.AddWithValue("@Pid", lviProduct.Items(d).SubItems(1).Text)
.Parameters.AddWithValue("@amount", CInt(lviProduct.Items(d).SubItems(4).Text))
.Parameters.AddWithValue("@SalePrice", CSng(lviProduct.Items(d).SubItems(3).Text))
.Parameters.Add("@Total", SqlDbType.Float).Value = CSng(lviProduct.Items(d).SubItems(5).Text)
.ExecuteNonQuery()
End With
' ตัดสต๊อก
sb.Remove(0, sb.Length())
sb.Append("UPDATE TBProduct")
sb.Append(" SET UnitInstock = @Unit ")
sb.Append(" WHERE ProId = @Pid ")
Dim sqlun As String
sqlun = sb.ToString
With cmm
.Parameters.Clear()
.CommandText = sqlun
.Parameters.AddWithValue("@Unit", SqlDbType.Int).Value = CInt(lviProduct.Items(d).SubItems(6).Text)
.Parameters.AddWithValue("@Pid", lviProduct.Items(d).SubItems(1).Text)
.ExecuteNonQuery()
End With
Next
MessageBox.Show("บันทึกข้อมูลเรียบร้อบแล้วค่ะ!!!")
BtnClear_Click(sender, e)
cnn.Close()
End Sub
แล้วก้อเขียน sub ขึ้นมาอ่ะค่ะ
Code (VB.NET)
Private Sub EDIT()
With cnn
If .State = ConnectionState.Open Then .Close()
.Open()
End With
Dim sql As String = ""
Select Case FlagAction
Case "ADD"
sql = ("INSERT INTO TBSale (SaleId,CusId,SaleDate,NetVat,NetTotal)")
sql &= (" VALUES (@SID,@CID,@SaleDate,@NetVat,@NetTotal)")
Case "EDIT"
sql = ("UPDATE TBSale ")
sql &= (" SET CusId = @CID, SaleDate = @SaleDate,NetVat = @NetVat,NetTotal = @NetTotal")
sql &= (" WHERE(SaleId = @SID) ")
End Select
With cmm
.CommandType = CommandType.Text
.CommandText = sql
.Connection = cnn
.Parameters.Clear()
.Parameters.Add("@SID", SqlDbType.NVarChar).Value = TxtSaleID.Text.Trim()
.Parameters.Add("@CID", SqlDbType.NVarChar).Value = TxtCusID.Text.Trim()
.Parameters.Add("@SaleDate", SqlDbType.DateTime).Value = TxtSaleDate.Text.Trim()
.Parameters.Add("@NetVat", SqlDbType.Money).Value = CSng(lblNetVAT.Text.Trim())
.Parameters.Add("@NetTotal", SqlDbType.Money).Value = CSng(Lbltotal.Text.Trim())
.ExecuteNonQuery()
End With
End Sub
|
 |
 |
 |
 |
Date :
2010-05-28 21:01:41 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตาลายเลย ขอเวลาหน่อยนะคับ
ถามนิดนึงคับ เวลาบันทึกไป มันเกิดอะไรขึ้นคับ error มั้ย
|
 |
 |
 |
 |
Date :
2010-05-28 21:09:50 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เกิดค่ะ
Violation of PRIMARY KEY constraint 'PK_TBSale'. Cannot insert duplicate key in object 'dbo.TBSale'.
The statement has been terminated.
แล้วก้อตรงคืนสินค้าเข้าสต๊อกอ่ะค่ะ มันเหมือนคำนวณผิด
|
 |
 |
 |
 |
Date :
2010-05-28 21:30:09 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Error แบบนี้มันเกิดจาก primary key มันซ้ำ
ที่ผมเดาคือ ตอนนี้
- ฟิลด์ SaleId เป็น primary key ใช่มั้ยครับ
- TxtSaleID.Text ถูกกำหนดค่าเมื่อกดปุ่ม เพิ่มใบขาย
ถูกมั้ยครับ
ถ้าใช่ ตอนกำหนดค่า TxtSaleID.Text กำหนดยังไงครับ เอาค่ามาจากไหน
|
 |
 |
 |
 |
Date :
2010-05-28 21:36:37 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี่ค่ะ
Code (VB.NET)
Private Sub tsAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsAdd.Click
Dim sqlLastID As String = ""
sqlLastID = "select top 1 SaleId from TBsale Order by SaleId DESC"
With cnn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
With cmm
.CommandText = sqlLastID
.Connection = cnn
dr = .ExecuteReader()
End With
If dr.HasRows Then
Do While dr.Read
Dim n As String = dr.Item("SaleId")
Dim g As String
g = n.Substring(2, 3)
Dim newid As String
newid = "S-" & (CInt(g) + 1).ToString("000")
TxtSaleID.Text = newid
TxtSaleID.ReadOnly = True
Loop
Else
TxtSaleID.Text = "S-001"
End If
TxtSaleDate.Text = Now.Date
dr.Close()
End Sub
|
 |
 |
 |
 |
Date :
2010-05-28 22:01:27 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จริง ๆผมไม่แนะนำให้เก็บ Primary key ใน Format แบบนี้นะครับ "S-001"
ผมแนะนำให้ กำหนด ฟิลด์ SaleId เป็น Int และกำหนด เป็น auto increment (ให้เพิ่มอัตโนมัติ เวลาถูก insert) แล้วถ้าคุณต้องการแสดง ค่อยทำเป็นรูปแบบนี้เอาครับ "S-001"
แต่ตอนนี้ที่ Error ลอง Debug > step Into (F11) ดูครับ ว่า หน้านี้ มันเข้า If หรือ Else เหมือนค่า TxtSaleID.Text มันเป็นค่าซ้ำตลอด
|
 |
 |
 |
 |
Date :
2010-05-28 22:16:25 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งง นิดๆค่ะ
|
 |
 |
 |
 |
Date :
2010-05-28 22:29:26 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
select max(right(SaleId,3))+1 as saleid from TBsale
|
 |
 |
 |
 |
Date :
2010-05-28 22:40:03 |
By :
msorawich |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใส่ตรงไหนอ่าคะ
|
 |
 |
 |
 |
Date :
2010-05-28 22:41:08 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำตามนี้เลยแระกันคับ
- ปรับฟิลด์ SaleId ใน TBsale ให้เป็น INT และตั้งเป็น auto increment
และเปลี่ยนโค้ดเป็น
Code (VB.NET) ตัดตัวแปร g ออก
Private Sub tsAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsAdd.Click
Dim sqlLastID As String = ""
sqlLastID = "select top 1 SaleId from TBsale Order by SaleId DESC"
With cnn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
With cmm
.CommandText = sqlLastID
.Connection = cnn
dr = .ExecuteReader()
End With
If dr.HasRows Then
Do While dr.Read
Dim n As String = dr.Item("SaleId")
Dim newid As String
newid = "S-" & (CInt(n) + 1).ToString("000")
TxtSaleID.Text = newid
TxtSaleID.ReadOnly = True
Loop
Else
TxtSaleID.Text = "S-001"
End If
TxtSaleDate.Text = Now.Date
dr.Close()
End Sub
และ
Code (VB.NET) แก้ที่ บันทึก ลงตาราง sale ตรง Insert
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim sb As StringBuilder
If TxtSaleID.Text.Trim = "" Then
MessageBox.Show("กรุณากดปุ่มเพิ่มใบขายก่อน!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
If TxtCusID.Text.Trim = "" Then
MessageBox.Show("กรุณาเลือกลูกค้าก่อน!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
If TxtProID.Text.Trim = "" Then
MessageBox.Show("กรุณาเลือสินค้าที่ต้องการ!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
If MessageBox.Show("คุณต้องการบันทึกข้อมูลใช่หรือไม่", "", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
Exit Sub
End If
'-- บันทึก ลงตาราง sale
Dim SaveSale As String = ""
sb = New StringBuilder()
sb.Remove(0, sb.Length)
sb.Append("INSERT INTO TBSale (CusId,SaleDate,NetVat,NetTotal)")
sb.Append(" VALUES (@CusID,@SaleDate,@NetVat,@NetTotal)")
SaveSale = sb.ToString()
With cmm
.Parameters.Clear()
.CommandText = SaveSale
.Connection = cnn
cnn.Open()
.Parameters.AddWithValue("@CusID", TxtCusID.Text)
.Parameters.Add("@SaleDate", SqlDbType.DateTime).Value = TxtSaleDate.Text
.Parameters.Add("@NetVat", SqlDbType.Float).Value = CSng(lblNetVAT.Text)
.Parameters.Add("@NetTotal", SqlDbType.Float).Value = CSng(Lbltotal.Text)
.ExecuteNonQuery()
End With
'บันทึกลงตาราง saledetail
Dim d As Integer = 0
For d = 0 To lviProduct.Items.Count - 1
sb.Remove(0, sb.Length)
sb.Append("INSERT INTO TBSaleDetail(SaleId,ProId,Amount,SalePrice,Total)")
sb.Append(" Values(@Sid,@Pid,@amount,@SalePrice,@Total)")
SaveSale = sb.ToString()
With cmm
.Parameters.Clear()
.CommandText = SaveSale
.Parameters.AddWithValue("@Sid", TxtSaleID.Text)
.Parameters.AddWithValue("@Pid", lviProduct.Items(d).SubItems(1).Text)
.Parameters.AddWithValue("@amount", CInt(lviProduct.Items(d).SubItems(4).Text))
.Parameters.AddWithValue("@SalePrice", CSng(lviProduct.Items(d).SubItems(3).Text))
.Parameters.Add("@Total", SqlDbType.Float).Value = CSng(lviProduct.Items(d).SubItems(5).Text)
.ExecuteNonQuery()
End With
' ตัดสต๊อก
sb.Remove(0, sb.Length())
sb.Append("UPDATE TBProduct")
sb.Append(" SET UnitInstock = @Unit ")
sb.Append(" WHERE ProId = @Pid ")
Dim sqlun As String
sqlun = sb.ToString
With cmm
.Parameters.Clear()
.CommandText = sqlun
.Parameters.AddWithValue("@Unit", SqlDbType.Int).Value = CInt(lviProduct.Items(d).SubItems(6).Text)
.Parameters.AddWithValue("@Pid", lviProduct.Items(d).SubItems(1).Text)
.ExecuteNonQuery()
End With
Next
MessageBox.Show("บันทึกข้อมูลเรียบร้อบแล้วค่ะ!!!")
BtnClear_Click(sender, e)
cnn.Close()
End Sub
|
 |
 |
 |
 |
Date :
2010-05-28 22:42:19 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ค่ะ ขอบคุนนะคะ จะลองทำดูค่ะ 
|
 |
 |
 |
 |
Date :
2010-05-28 22:56:23 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
- ปรับฟิลด์ SaleId ใน TBsale ให้เป็น INT และตั้งเป็น auto increment
ปรับตรงไหนอ่าคะ
|
 |
 |
 |
 |
Date :
2010-05-28 23:17:23 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใน database ครับ สร้าง database เองรึป่าวครับ
|
 |
 |
 |
 |
Date :
2010-05-28 23:23:06 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สร้างจ้าาาาาา แล้วตรง ตาราง TBSale ที่แก้ตรง Insert แก้เพื่ออะไรหลอคะ อยากรู้อ่ะค่ะ เพราะไม่เข้าใจ
|
 |
 |
 |
 |
Date :
2010-05-28 23:24:24 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เข้าไป edit ฟิลด์ อ่ะครับ
|
 |
 |
 |
 |
Date :
2010-05-28 23:27:32 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แล้วถ้าเปลี่ยนจาก "S-001" เปน SA001 แทนล่ะคะ มันจะง่ายกว่ารึป่าวคะ
ต้องไปแก้ที่ DB มั้ยคะ
|
 |
 |
 |
 |
Date :
2010-05-28 23:36:01 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือมันควรจะเก็บ เป็น เลข 1 2 3 4 5 แบบนี้ดีกว่าครับ ตอนเรียกมาโชว์ ค่อยปรับเป็น format ตามที่เราต้องการ เพราะมันอาจจะมีปัญหาในการจัดการภายหลัง ถ้าเก็บแบบนั้น ที่แกตรง Insert คือเราไม่จำเป็นต้องระบุ SaleId เพราะว่ามันเพิ่มค่าให้ auto เมื่อเรา Insert ครับ เอาเอ็มพี่ไปเลยมั้ยคับ เห็นบอกพรุ่งนี้สอบ เด๋วจะนอนดึก
|
 |
 |
 |
 |
Date :
2010-05-28 23:46:42 |
By :
kerb |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอาค่ะ      
|
 |
 |
 |
 |
Date :
2010-05-28 23:59:10 |
By :
doraemieee |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|