วิธีการเพิ่มรายการขายสินค้าใหม่โดย ดึงราคาล่าสุด แต่แก้ไขราคาได้


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

09 ก.ค. 63 , 08:25:49
อ่าน 1717 ครั้ง

kunlek

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

 

09 ก.ค. 63 , 11:06:08
ตอบกลับ #1

PNR

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

ดึงราคาล่าสุดมาแสดงบน textbox ลองดูโค้ดนี้ครับ

Private Sub good_id_AfterUpdate()
Dim MaxDate As String 'กำหนดตัวแปรไว้เก็บวันที่มากที่สุดของแต่ละ good_id ก่อนใช้ Dlookup ดึงข้อมูลมาแสดงบน textbox S_Price
If Not IsNull(Me.date_sale) And Not IsNull(Me.good_id) Then
MaxDate = Nz(DMax("date_sale", "t_sale", "goods_id = '" & good_id & "'"), 0)
Me.s_price = Nz(DLookup("[s_price]", "[t_sale]", "cstr([date_sale]) ='" & MaxDate & "' And [goods_id] ='" & good_id & "'"), 0)
End if
End Sub

วิธีนี้จะได้ราคาล่าสุดมาแสดงที่ textbox S_Price แต่ก็สามารถลบออกเพื่อแก้ไขราคาได้เองครับ
Time to stop for me  :dizzy:
 

10 ก.ค. 63 , 22:24:50
ตอบกลับ #2

kunlek

ถ้าราคาเคยขายดังนี้
01/02/63    ขาย  22.00
08/02/63           23.00
02/03/63           20.00
04/04/63           18.00
05/05/63            27.00
ถ้ามาออกบิล ขายสินค้า แทรก 31/03/63  จะได้ราคา 20.00 หรือไม่ครับ  หรือได้ราคา 27.00 ครับ 
ผมต้องการให้เป็นราคา ที่ 20.00 ต้องใช้ code? อย่างไรครับ

 

11 ก.ค. 63 , 02:09:07
ตอบกลับ #3

PNR

เปลี่ยนจาก Dmax เป็น Dlast ครับ
MaxDate = Nz(DLast("date_sale", "t_sale", "goods_id = '" & good_id & "'"), 0)
Time to stop for me  :dizzy:
 

11 ก.ค. 63 , 21:10:56
ตอบกลับ #4

kunlek

ขออภัยครับ อจ. อีกนิดครับ ถ้าจะเจาะจงถึงลูกค้าคนนั้น เคยซื้อสินค้านี้ ให้ s_price ดึงราคาครั้งล่าสุด   ลักษณะฟอร์มจะมี Mainform(ชื่่อฟอร์ม voucher_s )+SubForm(ชื่อฟอร์ม fsale)  ที่ MainForm จะมีฟิลด์ cust_id

 

13 ก.ค. 63 , 09:02:26
ตอบกลับ #5

PNR

ขออภัยครับ อจ. อีกนิดครับ ถ้าจะเจาะจงถึงลูกค้าคนนั้น เคยซื้อสินค้านี้ ให้ s_price ดึงราคาครั้งล่าสุด   ลักษณะฟอร์มจะมี Mainform(ชื่่อฟอร์ม voucher_s )+SubForm(ชื่อฟอร์ม fsale)  ที่ MainForm จะมีฟิลด์ cust_id

น่าจะแบบนี้นะครับ
โค้ดยังไม่ได้ทดสอบ ลองดูนะครับ
MainForm จะมีฟิลด์ cust_id มี textbox หรือ combobox txtcust_id ครับ
การตรวจสอบคือเมื่อระบุ good_id ในซัฟฟอร์ม โปรแกรมจะเช็คให้ว่า มีรหัสลูกค้า txtcust_id ที่ซื้อสินค้ารหัส good_idหรือเปล่าถ้ามี ให้ดึงรหัส cust_id ที่ทำการซื้อล่าสุด (ใช้ Dlast ครับ)

โค๊ด: [Select]
Private Sub good_id_AfterUpdate()
Call CheckS_Price
End Sub
Sub CheckS_Price()
Dim LastDate As String
Dim strPurchase_history As String
If Not IsNull(Me.date_sale) And Not IsNull(Me.good_id) And Not IsNull(Forms!voucher_s!Txtcust_id) Then
strPurchase_history = Nz(DLookup("[cust_id]", "[tblF_sale]", "[goods_id] = '" & good_id & "' And [cust_id] =" & Forms!voucher_s!Txtcust_id & ""), 0)

LastDate = Nz(DLast("date_sale", "[tblF_sale]", "[goods_id] = '" & good_id & "' And [cust_id] =" & Forms!voucher_s!Txtcust_id & ""), 0)
Me.s_price = Nz(DLookup("[s_price]", "[tblF_sale]", "cstr([date_sale]) ='" & LastDate & "' And [goods_id] ='" & good_id & "' And [cust_id] =" & Forms!voucher_s!Txtcust_id & ""), 0)
End If
End Sub
Time to stop for me  :dizzy:
 

13 ก.ค. 63 , 16:51:52
ตอบกลับ #6

kunlek

มี error ครับ
debug บรรทัดที่ 7(If Not IsNull...........)

Private Sub Combo18_AfterUpdate()
Call CheckS_Price
End Sub
Sub CheckS_Price()
Dim LastDate As String
Dim strPurchase_history As String
If Not IsNull(Me.date_sale) And Not IsNull(Me.goods_id) And Not IsNull(Forms!voucher_s!txtcust_id) Then
strPurchase_history = Nz(DLookup("[cust_id]", "[fsale]", "[goods_id] = '" & goods_id & "' And [cust_id] =" & Forms!voucher_s!txtcust_id & ""), 0)

LastDate = Nz(DLast("date_sale", "[fsale]", "[goods_id] = '" & goods_id & "' And [cust_id] =" & Forms!voucher_s!txtcust_id & ""), 0)
Me.s_price = Nz(DLookup("[s_price]", "[fsale]", "cstr([date_sale]) ='" & LastDate & "' And [goods_id] ='" & goods_id & "' And [cust_id] =" & Forms!voucher_s!txtcust_id & ""), 0)
End If
Call CheckS_Price
End Sub



 

13 ก.ค. 63 , 20:35:43
ตอบกลับ #7

kunlek

error อีกที่


 

13 ก.ค. 63 , 21:24:54
ตอบกลับ #8

kunlek

คงเป็นเพราะใน [fsale] ไม่มี ฟิลด์ cus_id ใช่ไหมครับ เพราะเชื่อมโยง Mainforms และ sub form ด้วย  voucher_s_id และ date_sale

 

13 ก.ค. 63 , 22:08:10
ตอบกลับ #9

kunlek


Private Sub Combo18_AfterUpdate()
Call CheckS_Price
End Sub
....................................................
Sub CheckS_Price()
Dim LastDate As String
Dim strPurchase_history As String
If Not IsNull(Me.date_sale) And Not IsNull(Me.goods_id) And Not IsNull(Forms!ACC_บันทึกขายสินค้า!txtcust_id) Then
strPurchase_history = Nz(DLookup("[cust_id]", "[fsale]", "[goods_id] = '" & goods_id & "' And [cust_id] =" & Forms!ACC_บันทึกขายสินค้า!txtcust_id & ""), 0)

LastDate = Nz(DLast("date_sale", "[fsale]", "[goods_id] = '" & goods_id & "' And [cust_id] =" & Forms!ACC_บันทึกขายสินค้า!txtcust_id & ""), 0)
Me.s_price = Nz(DLookup("[s_price]", "[fsale]", "cstr([date_sale]) ='" & LastDate & "' And [goods_id] ='" & goods_id & "' And [cust_id] =" & Forms!ACC_บันทึกขายสินค้า!txtcust_id & ""), 0)
End If
...........................
ตอนนี้ได้แก้ไขไปตามนี้ ยังไม่ได้ครับ ไม่แสดง errorอะไร เลยด้วย ( forms ชื่อ ACC_บันทึกขายสินค้า  subforms ชื่อ fsale)

 

14 ก.ค. 63 , 08:04:39
ตอบกลับ #10

PNR

ส่งตัวอย่างฟอร์มที่สร้างอยู่ มาให้ผมแก้ไขดูได้ไหมครับ ถ้าไม่เห็นการออกแบบครับ และโครงสร้างคิดไม่ออกครับ
Time to stop for me  :dizzy:
 

14 ก.ค. 63 , 12:37:08
ตอบกลับ #11

kunlek

ส่งตัวอย่างครับ

 

14 ก.ค. 63 , 12:42:38
ตอบกลับ #12

PNR

ชื่อคอมโบบ๊อก Combo18 แก้เป็น goods_id
Time to stop for me  :dizzy:
 

14 ก.ค. 63 , 14:42:41
ตอบกลับ #13

kunlek

แก้ไขชื่อฟิลด์ goods_id ใน fsale จาก combo18 เป็น goods_id แล้วก็ยังไม่ได้ครับ

 

15 ก.ค. 63 , 08:08:05
ตอบกลับ #14

PNR

ผมไม่แน่ใจเรื่อง datatype ของฐานข้อมูลของคุณว่าเหมือนกันหรือไม่
ลองดูตัวอยางที่ผมทำคร่าวๆ นะครับ

ถ้าสะดวก Anydesk ไปเช็คน่าจะชัวสุด
« แก้ไขครั้งสุดท้าย: 15 ก.ค. 63 , 11:16:34 โดย PNR »
Time to stop for me  :dizzy:
 

15 ก.ค. 63 , 11:16:09
ตอบกลับ #15

PNR

จบเคสครับ โค้ดปกติดี
ผิดตรงกำหนดชื่อให้กับ textbox ผิด ดันไปตั้งชื่อให้ Label แทน :cool: :cool:
Time to stop for me  :dizzy:
 

15 ก.ค. 63 , 11:22:20
ตอบกลับ #16

kunlek

ขอบพระคุณครับท่าน  ถ้าไม่ได้การช่วยรีโมท สงสัยฟอร์มจะเละไปใหญ่ ตอนนี้ก็ยังไม่เข้าใจ textbox กับ label ต่างกัน?
Code ที่ถูกต้องแล้ว

Private Sub goods_id_AfterUpdate()
Call CheckS_Price
End Sub
--------------------
Sub CheckS_Price()
Dim LastDate As String
Dim strPurchase_history As String
If Not IsNull(Me.date_sale) And Not IsNull(Me.goods_id) And Not IsNull(Forms!ACC_ºÑ¹·Ö¡¢ÒÂÊÔ¹¤éÒ!txtcust_id) Then
strPurchase_history = Nz(DLookup("[cust_id]", "[fsale]", "[goods_id] = '" & goods_id & "' And [cust_id] ='" & Forms!ACC_ºÑ¹·Ö¡¢ÒÂÊÔ¹¤éÒ!txtcust_id & "'"), 0)

LastDate = Nz(DLast("date_sale", "[fsale]", "[goods_id] = '" & goods_id & "' And [cust_id] ='" & Forms!ACC_ºÑ¹·Ö¡¢ÒÂÊÔ¹¤éÒ!txtcust_id & "'"), 0)
Me.s_price = Nz(DLookup("[s_price]", "[fsale]", "cstr([date_sale]) ='" & LastDate & "' And [goods_id] ='" & goods_id & "' And [cust_id] ='" & Forms!ACC_ºÑ¹·Ö¡¢ÒÂÊÔ¹¤éÒ!txtcust_id & "'"), 0)
End If
 End Sub

 

15 ก.ค. 63 , 11:35:17
ตอบกลับ #17

PNR

อ้างถึง
ตอนนี้ก็ยังไม่เข้าใจ textbox กับ label ต่างกัน?


Label ก็คือ ป้าย,ชื่อ หรือข้อความ  ไว้แสดงบนฟอร์มครับ หรือรายงาน
เวลาเราสร้าง Control ก็จะได้ตัวนี้มาด้วยไว้ตั้งชื่่อ มันสามารถตั้งชื่อได้เหมือนกับ textbox หรือ อื่นๆ (ลองกดที่ Label แล้วไปที่ตั้งค่า)

จากโค้ด เราต้องกำหนดชื่อ txtcust_id ให้ combobox แต่เมื่อไปเช็คดู Label กลับชื่อtxtcust_id และ combobox ชื่อ combo18 มันเลยดึงข้อมูลเงื่อนไขผิดที่นั้นเอง

Time to stop for me  :dizzy:
 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5