สมัครสมาชิก

แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - PNR

หน้า: [1] 2 3 4
1



ผมได้ลองสร้างระบบ ตอกบัตรของพนักงานในการเข้างาน มาให้ดูเป็นแนวทางคับ
1.ก่อนใช้งานให้ ใส่ รหัส Barcode ของพนักงานแต่ละคน ในตาราง tblEmployee ก่อนนะครับ ผมใส่ไว้ให้ 2 ไอดีคือ 01 และ 02
2.เมื่อเราแสกน Barcode โปรแกรมจะทำการ Enter อัตโนมัติ
3.ระบบจะบันทึกข้อมูลเข้าสู่ตารางทันทีถ้า Barcode นั้นมีอยู่จริง ถ้าไม่มีอยู่จะมีการแจ้งเตือนให้ครับ
4.รายละเอียดชื่อพนักงานและเวลาในการตอกบัตรนั้นจะแสดงขึ้นมาเมื่อแสกน Barcode ครับ และจะหายไปเองเมื่อครบ 5 วินาที
5.ผมได้สร้างนาฬิกา และ แสดงวันที่ เรียลไทม์ ไว้บนฟอร์มด้วย
6.โดยปกติ พนักงานอาจจะเผลอไปแสกน วันนึงหลายๆ ครั้ง แต่ผมได้สร้างคิวรี่ตรวจเช็คเวลาที่แสกนอันแรกสุดของวันมาแสดงให้ครับ
7.มีระบบสถานะแสดงไว้ให้ด้วยกรณีที่ผิดพลาดก็จะมีข้อความแสดงแจ้งเตือนใหักับพนักงานได้ทราบครับ

ลองดูนะครับ ไม่รู้ได้หรือเปล่า
โพสต์นี้ได้รับคำขอบคุณจาก: MAKI

2
Dlookup Function คือ ใช้ในการส่งกลับ แสดงค่าที่อ้างอิงจาก ฟิลล์ ใน ตารางหรือ โดเมน Access ที่ระบุครับ
อากิวเมนต์ ของ Dlookup คือ

DLookup(expr, domain [,criteria] )

Expr คือ Expression หรือ ระบุฟิลล์เดี่ยว ที่ต้องการนำมาแสดง หรือ นำมาอ้างอิงตามแต่ความต้องการ
domain คือ ชื่อของ ตาราง หรือ คิวรี่ที่จะนำมาอ้างอิงครับ
criteria คือ การสร้างเงื่อนไขที่ใช้คัดเลือกช่วงของข้อมูลที่ที่เราต้องการนำมาแสดง หรืออ้างอิง คล้าย ๆ WHERE clause  ของ SQL ครับ
เช่น
โค๊ด: [Select]
Text1 = DLookup("[UnitPrice]", "Order Details", "OrderID = 7788")text1 ก็จะ แสดง UnitPrice ที่มีรหัสออเดอร์ = 7788 ครับ

ถ้าในแบบของ Sql ก็ ประมาณนี้
โค๊ด: [Select]
SELECT UnitPrice AS ShowUnitPrice
FROM [Order Details]
WHERE ((([Order Details].OrderID)=7788));

รูปแบบโค้ดที่เรามักจะนำไปใช้
ถ้าเป็นแบบอ้างอิงฟิลล์ที่ชนิดข้อมูลเป็นตัวเลข
โค๊ด: [Select]
Text1 = DLookup("ชื่อนามสกุล" , "ตารางลูกค้า" , "รหัสลูกค้า = 99")text1 ก็จะ แสดง ชื่อนามสกุล จากตารางลูกค้า ที่มีรหัสลูกค้า = 99 ครับ

ถ้าเป็นแบบอ้างอิงฟิลล์ที่ชนิดข้อมูลเป็นวันที่
โค๊ด: [Select]
text 1 = DLookup("ชื่อนามสกุล" , "ตารางลูกค้า" , "วันที่= #1/1/2562#")text1 ก็จะแสดงชื่อนามสกุลลูกค้าที่มีวันที่ตรงกับวันที่ 1/1/2562 ที่ระบุ

การใช้การอ้างอิงเงื่อนไขจาก ตัว Control บนฟอร์ม เช่น textbox , Combobox อื่นๆ
text1  =DLookup("[ProductName]", "Products", "[ProductID] =" & Forms![Order Details]!ProductID)
text1 จะแสดง ProductName จากตาราง Product โดย ProductID = Control ที่ชื่อ ProductID บนฟอร์ม  Order Details เป็นต้นคับ

คร่าวๆ ประมาณนี้ครับโดยคำสั่ง Dlookup ถ้าใช้งานบ่อยๆ เราจะค่อยๆเรียนรู้ไปเรื่อยๆ ครับ เพราะมันมีรายละเอียดปลีกย่อยเยอะครับถ้าติดตรงไหน ก็สอบถามได้
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy, Mercury

3
1.เปิดฟอร์ม OUT ในมุมมองออกแบบ 
2.กดไปที่ tab ออกแบบ กดที่แสดงโค้ด
หรือกด Alt + F11





โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

4
รู้สึกว่า ชื่อสินค้า ชื่อลูกค้า และ Gcas จะนำข้อมูลจากตาราง Finishgoods มาแสดงทั้งหมด
ผมเลยกำหนดให้ หลังจากระบุ รหัสสินค้าภายใน หรือ Inhouse แล้ว ให้แสดง ข้อมูลขึ้นมานะครับ

โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

5
ใช้ Event FormCurrent เพื่อใช้กำหนด Dlookup ให้กับ Control ที่ต้องการ
ผมยกตัวอย่างจาก ที่ถามครั้งก่อน ใส่โค้ดแบบนี้

โค๊ด: [Select]
Private Sub Form_Current()
Me.Name_of_Product = DLookup("[Name of Product]", "[INtb]", "Inhouse_number='" & [Inhouse_number] & "'")
End Sub

และที่ RecordSource ใส่ Field ที่ต้องการ Bound ตามปกติคับ

ตัวอย่าง
ใส่โค้ดแบบนี้


ที่ textbox เชื่อมฟิลล์ในตารางได้ตามปกติ
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

6
ทำไมผมทดสอบแล้วผ่าน มันขึ้น error อะไรครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

7
=DLookUp("[Name of Product]","[INtb]","Inhouse_number='" & [Inhouse_number] & "'")

หรือ

=DLookUp("[name of product]","[Intb]","[inhouse_number]= [inhouse_number]")
 
ได้เหมือนกันคับ
จุดที่ผิดคือ อ้างอิงชื่อตารางผิด จาก IN ต้องเป็น INtb
จุดที่ txtcode ที่อ้างอิงนั้นดูตอนนี้น่าจะเป็น textbox ที่ชื่อ inhouse_number นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

8
ProductID ของสินค้าดูจากตาราง Product ของคุณนะครับ
เช่น If IsNull(Me.ProductID) Then
Me.ProductID = "1KA1"
Me.Product_name = Me.ProductID.Column(1)
Me.UnitPriceD = Me.ProductID.Column(2)


 "1KA1" คือรหัสของ กพ. / หมูสับ / 35 บาท เป็นต้นครับ
PrimaryKey ของคุณคือช่อง Barcode ครับ เวลาจะอ้าง ProductID ก็เอามาจาก Field นี้ได้เลย

โพสต์นี้ได้รับคำขอบคุณจาก: Rotchasit Kraiwong

9
ใช้การกำหนด Events ช่วยด้วยก็ได้คับ
สมมุติ textbox สุดท้ายที่กรอกข้อมูลชื่อ Text4 เสร็จ Cursor จะ Focus ที่ ปุ่ม Cmb_Save ทันทีครับ
และ พอครบ 5 วินาที มันจำเรียกใช้ คำสั่งบันทึกจาก  Cmb_Save_Click() ครับ ซึ่งปุ่มเซฟถ้ากดเองก็เซฟได้เหมือนกัน
หรือจะตั้ง 5 วินาทีแล้วบันทึกได้เหมือนกันคับ ตัวอย่างโค้ดด้านล่าง

Private Sub Cmb_Save_Click() 'คำสั่งจากปุ่มบันทึกที่มีอยู่แล้วถ้าเรากดบันทึกก็ได้เหมือนกัน
DoCmd.RunCommand acCmdSaveRecord
End Sub

Private Sub Text4_Exit(Cancel As Integer) เมื่อเสร็จการกรอกการทำงานบน textbox สุดท้าย
IF not isnull(Me.text1) And not isnull(Me.text2) And  not isnull(Me.text3) And  not isnull(Me.text4) Then 'เช็คว่ากรอกครบทุก textbox แล้วหรือไม่
Me.Cmb_Save.SetFocus
Dim OnTime As Date
OnTime = Now()
While DateDiff("s", OnTime, Now) < 6 'น้อยกว่า 6 อันสุดท้ายสุดคือ 5 วินั้นเอง
Wend

Call Cmb_Save_Click 'พอครบเงื่อนไขด้านบนจะเรียกคำสั่งบันทึกมาใช้งานคับ
End if
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: MAKI

10
Error นี้เกิดจาก datatype ของคุณกำหนดเป็น Text ครับ แต่โค้ดที่ผมให้ไปนั้นเป็น Number

เพิ่ม เครื่องหมาย ' อีกนิด Error นี้จะหายไปครับเช่น CusID ของคุณ คือ C01 เป็นสตริง ไม่ใช่ตัวเลข
แก้เป็นแบบนี้
If IsNull(DLookup("deal_price", "tblDeal", "[cus_id]= '" & CusID & "' And [pord_id]= " & [ProD] & "")) Then

Me.Price = DLookup("pord_price", "tblProduct", "product_id= " & ProD)
Else
Me.Price = DLookup("deal_price", "tblDeal", "[cus_id]= '" & CusID & "' And [pord_id]= " & [ProD] & "")
End If


โพสต์นี้ได้รับคำขอบคุณจาก: Tongo

11
มันประมาณนี้ครับ
โค๊ด: [Select]
Dim ProD As String
Dim CusID As String
If Not IsNull(Me.Prod_ID) Then
ProD = Me.Prod_ID
CusID = Forms!frmpos.Form.cus_id
If IsNull(DLookup("deal_price", "tblDeal", "[cus_id]= " & CusID & " And [pord_id]= " & [ProD] & "")) Then
Me.Price = DLookup("pord_price", "tblProduct", "product_id= " & ProD)
Else
Me.Price = DLookup("deal_price", "tblDeal", "[cus_id]= " & CusID & " And [pord_id]= " & [ProD] & "")
End If
End If
ตัวอย่าง คร่าวๆ ครับเผื่อเห็นแนวทาง
โพสต์นี้ได้รับคำขอบคุณจาก: Tongo

12
สร้าง Sub เพื่อไว้เรียกใช้หลายๆ ที่ครับ

สังเกตุว่า Event FormLoad ผมใช้
Call ShowAllRecord เลยเพื่อให้ Record ทั้งหมดแสดง


มันแยกกันถูกแล้วคับ
โพสต์นี้ได้รับคำขอบคุณจาก: PooPae

13
ที่ Event FormLoad ของฟอร์มหลัก ลองเพิ่มแบบนี้เข้าไปคับ

Private Sub Form_Load()
Dim myCustomer As String
myCustomer = "SELECT Asset_all.* FROM Asset_all;"
Forms![Customer search by combobox]![tbl_Customer_Subform1].[Form].RecordSource = myCustomer

End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: PooPae

14
ใช่ครับ     ผมแนบ ภาพที่เป็น ไฟล์ pdf ไว้ด้วยนะครับ (พอดีมือใหม่หัดเขียน ไว้ใช้งานที่ร้านนะครับ)
ลองดูตัวอย่างนี้คับ
โพสต์นี้ได้รับคำขอบคุณจาก: Rotchasit Kraiwong

15
ไม่รู้ผมเข้าใจถูกต้องหรือเปล่านะครับ
ความต้องการของคุณคือ อยากสร้างปุ่มชื่ออาหารที่ต้องการเลือกแบบด่วน
โดยเวลากดปุ่มนี้จะแสดงรายการอาหารใน Combobox ของอาหารชื่อนั้นขึ้นมาทันทีใช่หรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: Rotchasit Kraiwong

16
หัดเขียนครับ ช่วยให้โคชที่จะไม่แสดงค่าจำนวนติดลบให้หน่อยครับ
ทำงานบนฟอร์ม หรือ คิวรี่ ครับ

ที่จริงการไม่แสดงจำนวนติดลบ ง่ายๆ เลยคือการสั่ง Criteria  Not <0
เท่านี้ค่าที่น้อยกว่า 0 คือค่าที่ติดลบจะไม่แสดงครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Joyelephant Doorcloser

หน้า: [1] 2 3 4