สอบถามวิธีการนำค่าสุดท้ายของField ของแต่ละ NationalID มาโชว์ครับ



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

14 ม.ค. 63 , 10:29:58
อ่าน 189 ครั้ง

Tatchawin

สวัสดีครับทุกท่าน มีผมมีคำถามจะปรึกาษาเกี่ยวกับการเขียน Expression ครับ



จากภาพ ผมต้องการให้ SubForm ของผม นำค่าสุดท้ายของ Field ที่ชื่อ ContractorStatus ในแต่ละ NationalID มาโชว์บน Subform ครับ โดยที่เมื่อเลื่อน Subform ไปยัง NationalID ใหม่ก็ให้นำค่าสุดท้ายของ Field ContractorStatus มาแสดงเช่นเดิม เช่น NationalID = 1111 ก็ให้นำคำว่า "Activated" มาโชว์บน txtContractorStatus ถ้าเลื่อนไป NationalID = 2222 ก็ให้นำคำว่า "Terminated" มาแสดง

ผมควรจะเขียน Expression อย่างไรครับ? หรือมีวิธีการอื่นที่ดีกว่าการเขียน Expression ครับ?

ปล. ที่ txtContractorStatus(ที่วงในภาพ ด้านล่าง) ผมเขียน Expression ตามนี้ครับ ซึ่งไม่ได้ผลเลย เมื่อใส่ข้อมูลคนลงไปเยอะๆ ผมควรเขียนยังไงดีครับ ขอบคุณมากครับ
=DLast("ContractorStatus","qryWork","[txtNationalID]=[Forms]![frmEditWork]![txtNationalID]")


« แก้ไขครั้งสุดท้าย: 14 ม.ค. 63 , 10:49:49 โดย Tatchawin »

 

14 ม.ค. 63 , 11:33:41
ตอบกลับ #1

PNR

ท่านมาถูกทางแล้ว แต่ผิดนิดเดียวตรงอ้างชื่อฟิลล์นะครับ

หรือจะใช้ Expression แบบเดิมก็ได้เหมือนกัน แก้ตรง อ้างถึงฟิลล์ใหม่ก็ใช้ได้เลย
น่าจะแบบนี้ DLast("ContractorStatus", "qryWork", "[NationalID]=[Forms]![frmEditWork]![txtNationalID]")

หรือ Event Form Current

Private Sub Form_Current()
Me.txtContractorStatus = DLast("ContractorStatus", "qryWork", "[NationalID]=[Forms]![frmEditWork]![txtNationalID]")
End Sub

ตรงสีแดงต้องอ้างถึงชื่อฟิลล์ ไม่ใช่ชื่อ textbox โดยผมคิดว่าฟิลล์น่าจะชื่อ  NationalID หรือเปล่า
:meaw: :grin: :shout:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

14 ม.ค. 63 , 12:04:02
ตอบกลับ #2

Tatchawin

ท่านมาถูกทางแล้ว แต่ผิดนิดเดียวตรงอ้างชื่อฟิลล์นะครับ

หรือจะใช้ Expression แบบเดิมก็ได้เหมือนกัน แก้ตรง อ้างถึงฟิลล์ใหม่ก็ใช้ได้เลย
น่าจะแบบนี้ DLast("ContractorStatus", "qryWork", "[NationalID]=[Forms]![frmEditWork]![txtNationalID]")

หรือ Event Form Current

Private Sub Form_Current()
Me.txtContractorStatus = DLast("ContractorStatus", "qryWork", "[NationalID]=[Forms]![frmEditWork]![txtNationalID]")
End Sub

ตรงสีแดงต้องอ้างถึงชื่อฟิลล์ ไม่ใช่ชื่อ textbox โดยผมคิดว่าฟิลล์น่าจะชื่อ  NationalID หรือเปล่า

Field ชื่อ NationalID ถูกต้องครับ

ผมลองทั้งสองวิธีแล้ว ถ้า NationalID = 1111 ใช้งานได้ครับ แต่ถ้าเลื่อน NationalID ไปเป็น 2222 มันจะไม่ขึ้นตามที่ต้องการครับ เช่น สมมติที่ NationalID=2222 Field ContractorStatus สุดท้ายเป็น "Activated" แต่มันดันขึ้นเป็น "Terminated"

จะแก้ไงดีครับ ถ้าผมส่งไฟล์ให้ท่านดู ท่านจะสะดวกไหมครับ?

 

14 ม.ค. 63 , 12:08:15
ตอบกลับ #3

PNR

ลองดูตัวอย่างนี้ครับ
sub form ชื่อ frmsub

หรือส่งไฟล์มาทางกล่องข้อความครับเดียวผมดูให้
« แก้ไขครั้งสุดท้าย: 14 ม.ค. 63 , 12:12:23 โดย PNR »
:meaw: :grin: :shout:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

14 ม.ค. 63 , 14:05:06
ตอบกลับ #4

Tatchawin

ลองดูตัวอย่างนี้ครับ
sub form ชื่อ frmsub

หรือส่งไฟล์มาทางกล่องข้อความครับเดียวผมดูให้

ผมส่งให้แล้วทางข้อความครับ ไม่แน่ใจได้รับหรือยังครับ

ขอบคุณครับ

 

14 ม.ค. 63 , 14:58:39
ตอบกลับ #5

PNR

ลองปรับให้แล้วครับ ให้ดูโค้ดล่าสุดที่ข้อความนะครับ ผมใช้การ ซ่อนสถานนะที่เป็น Label ไว้ด้วย

ถ้าอยากจะให้โค้ดทำงานตอนกดบันทึก แทนสถานะ หลังการปรับปรุง ก็ใส่ว่า

โค๊ด: [Select]
Private Sub cmdSave_Click()
    Dim strStatus as string
    Me.Dirty = False
    DoCmd.SetWarnings False
    DoCmd.RunSQL "UPDATE qryWork SET qryWork.TerminatedDate = [txtTerminatedDate] WHERE (((qryWork.ContractorID)=[txtContractorID]));", dbFailOnError
    strStatus = Nz(DLast("[ContractorStatus]", "[qryWork]", "[NationalID]=[Forms]![frmEditWork]![txtNationalID]"))
    Me.[txtContractorStatus2] = strStatus
    If strStatus = "ยังปฏิบัติงานอยู่" Then
    [Forms]![frmEditWork]!Label41.Visible = True
    Else
    [Forms]![frmEditWork]!Label41.Visible = False
    End If
    DoCmd.SetWarnings True
End Sub
« แก้ไขครั้งสุดท้าย: 14 ม.ค. 63 , 15:05:50 โดย PNR »
:meaw: :grin: :shout:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

16 ม.ค. 63 , 11:17:27
ตอบกลับ #6

Tatchawin

ขอบคุณมากครับ ผมทำได้แล้วครับ เดี๋ยวมีเรื่องปรึกษาอีกนะครับ เกี่ยวกับการออกแบบฐานข้อมูล แต่ผมจะตั้งเป็นกระทู้ใหม่ เผื่อมีผู้รู้มาตอบเพิ่มอีก
ยังไงรบกวนหน่อยนะครับ

ขอบคุณอีกครั้งนึง มากๆเลยครับ  :love: :smile:

 


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