สมัครสมาชิก

แสดงกระทู้

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 5
1
ตาราง productID ควรตั้งชื่อว่า tblProducts ดีกว่าครับ
ขอดูข้อมูลในตาราง product หน่อย

2



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

ลองดูนะครับ ไม่รู้ได้หรือเปล่า

3
อ้างถึง
กรอกแค่รหัส ที่ textid แล้วให้บันทึก จะใช้ตัวยิงบารโค้ดด้วยคะ

ระบบที่คุณจะทำคือสร้างระบบ แสกนตอกบัตร เวลาเข้าทำงาน และ เวลาออกงาน ของพนักงานหรือเปล่าครับ

เครื่องบาร์โค้ด ปกติจะมีระบบ Enter อัตโนมัติ อยู่แล้ว งั้นเดี่ยวผมลองทำตัวอย่างให้นะครับ

4
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 ถ้าใช้งานบ่อยๆ เราจะค่อยๆเรียนรู้ไปเรื่อยๆ ครับ เพราะมันมีรายละเอียดปลีกย่อยเยอะครับถ้าติดตรงไหน ก็สอบถามได้

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






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


7
ใช้ 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 เชื่อมฟิลล์ในตารางได้ตามปกติ

8
ใส่เป็นแบบนี้ดูครับ


ตัวอย่าง filter
โค๊ด: [Select]
DoCmd.ApplyFilter , "[แผนก] Like '*" & [Forms]![Manpower]![TxtSearch] & "*'"
หรือ
โค๊ด: [Select]
Me.Filter = "[แผนก] Like '*" & [Forms]![Manpower]![TxtSearch] & "*'"
 Me.FilterOn = True


ถ้าไม่เอาแบบ like ค้นหาตรงตัวไปเลย
โค๊ด: [Select]
DoCmd.ApplyFilter , "[แผนก] =" & [Forms]![Manpower]![TxtSearch]
หรือ
โค๊ด: [Select]
Me.Filter = "[แผนก] =" & [Forms]![Manpower]![TxtSearch]
 Me.FilterOn = True

9
ทำไมผมทดสอบแล้วผ่าน มันขึ้น error อะไรครับ

10
ตรง filter ใส่แบบนี้ดูครับว่าได้ไหม

Not [sum_t_debt]= 0

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

หรือ

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

12
อาจารย์ตอบแล้ว

13
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 นี้ได้เลย


14
ใช้การกำหนด 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

15
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



16
รบกวนสอบถาม ค่ะ

 ตัวอย่าง ...   มีตัวเลขอยู่ด้วยกัน 2 ชุด ตือ 115406041 และ 216009004  ต้องการให้ ใส่ตัวเลขลงไป

หากชุดตัวเลขนั้นๆขึ้นต้นด้วยเลข 1 ให้แสดง AC หากขึ้นต้นด้วย เลข 2 ให้เแสดง PC

ีรบกวนขอโค้ดด้วยนะคะ 

ขอบคุณคะ

ในคิวรี่ ใช้ Left Function Check และ ใช้การสร้างเงื่อนไขการแสดงครับเช่น

Status: IIf(Left([Field1],1)="1","AC") & IIf(Left([Field1],1)="2","PC")

Field1 คือชื่อฟิลล์ของตัวเลขนะครับ


แต่ถ้าจะใช้แสดงบนForm โดย textbox ชื่อ status ก็ใส่ว่า

If Left([Text1], 1) = "1" Then
Me.status = "AC"
ElseIf Left([Text1], 1) = "2" Then
Me.status = "PC"
End If

Text1 คือ ระบุตัวเลข

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