ช่วยลบกวนดู IIF หน่อยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,202   6
URL.หัวข้อ / URL
ช่วยลบกวนดู IIF หน่อยครับ

ผมเขียน IIF ให้หาค่าใน Query ครับ

SCO5:IIF([SCO3]="1",IIF([A_ResultsOK] = True,"1", IIF([A_ResultsOK] = False And [A_ResultsNG] = False,"4","3"), IIF([SCO3]="2",iif([A_ResultsOK]=True,"1", IIF([A_ResultsOK]=False And [A_ResultsNG]=False,"2","3")))

มีใจความว่า

ถ้า SCO3 = 1 ถ้าใช่
      A_ResultsOK=True (ให้ค่าเท่ากับ1)
      A_ResultsOK และA_ResultsNG =False (คือ2ค่าไม่ได้ติกถูกให้เท่ากับ4)

ถ้า SCO3 = 2 ถ้าใช่
      A_ResultsOK=True (ให้ค่าเท่ากับ1)
      A_ResultsOK และA_ResultsNG =False (คือ2ค่าไม่ได้ติกถูกให้เท่ากับ2)

ถ้านอกเหนือจากนั้นให้ = 3 ทั้งหมด
มัน Error ครับ
the expression you entered is missing a closing parenthesis

ช่วยดูหน่อยครับ หรือมีวิธีเขียนย่อๆกว่านี้หรือไม่ครับ
ขอบคุณครับ




6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R21013
ได้ใกล้เคียงสุดครับ มันไม่มี Error แต่มันไม่ขึ้นอะไรเลยครับ

SCO5:IIf([SCO3]="1",IIf([A_ResultsOK]=True,"1",IIF([A_ResultsOK]=False And [A_ResultsNG]=False,"4","3")), IIf([SCO3]="2",IIf([A_ResultsOK]=True,"1", IIf([A_ResultsOK]=False And [A_ResultsNG]=False,"2","3"))))
2 @R21014
ผมเทศกับทุกเงื่อนไขแล้วครับ ปรากฎว่า

เงื่อนไขสุดท้ายครับไม่ขึ้น

คือนอกเหนือจากนั้นให้ = 3 ทั้งหมด ผมต้องใส่ตรงช่วงไหนครับ

[A_ResultsNG]=False,"2","3"))))
[A_ResultsNG]=False,"2"),"3")))
[A_ResultsNG]=False,"2")),"3"))
[A_ResultsNG]=False,"2"))),"3")

มันก็ยังไม่ได้ครับ
3 @R21015
โอเค เลยครับ

SCO5:IIf([SCO3]="1",IIf([A_ResultsOK]=True,"1",IIF([A_ResultsOK]=False And [A_ResultsNG]=False,"4","3")), IIf([SCO3]="2",IIf([A_ResultsOK]=True,"1", IIf([A_ResultsOK]=False And [A_ResultsNG]=False,"2")),"3"))

ผมว่าการเขียนโปรแกรม บางครั้งก็อยากจะถามในส่วนที่ติดกับใครซักคน
แค่ถามครับ พอได้นั่งเขียนคำถาม มันก็ทำให้คิดออกได้เหมือนกัน

ขอบคุณครับ
4 @R21022
ขอสอบถามเพิ่มครับอาจารย์ที่เคารพ

หากเงื่อนไขที่ผมเขียนขึ้นมานี้ ผมต้องการเพิ่มในส่วนของ
เงื่อนไขตรงหากกดเลือก A_ResultsOK ,A_ResultsNG แล้ว
ให้เงื่อนไขหยุดและเป็นคำตอบสุดท้าย

แต่ตอนนี้ SCO3 มันเป็นการคำนวณเวลามาครับ คือถ้าเวลาถอยมาก็จะได้ค่า
1 ,2 ,3 ตามลำดับครับ สุดท้ายแล้วก็จะหยุดที่ 3 ครับ

แต่ Code ที่ผมเขียนมันยังคำนวนต่อครับ เช่นหาก SCO3 = 1 และผมเลือก
A_ResultsOK แล้ว ได้คำตอบคือ 1 แต่ถ้าม SCO3 เปลี่ยนเป็น2 หรือ3 มันก็จะเปลี่ยนไปเป็นอีกคำตอบครับ ผมอยากจะให้มันหยุดคำนวณหากผม
กดเลือก A_ResultsOK ,A_ResultsNG แล้วผมจะเขียนยังไงครับ

ขอบคุณครับ
5 @R21023
ผมคิดว่าในกรณีที่มีเงื่อนไขเยอะๆ ให้แยกออกมาทำเป็น function เลยดีกว่า โดยสร้างไว้ใน Module ที่แยกออกมาต่างหาก ออกมาก็จะเป็นลักษณะนี้

public function GetSCO5(SCO3 as string, OK as boolean, NG as boolean) as string
   if ...
       GetSCO5 = ...
   else
       GetSCO5 = ...
   end if
end function

ส่วนคำสั่ง SQL ของคุณ ก็จะเป็น

select ..., GetSCO5(SCO3, [A_ResultsOK], [A_ResultsNG]), ... from .... where ...
6 @R21035
ขอบคุณอาจารย์ครับ
ผมกำลังทดลองทำตามอาจารย์อยู่ครับ ที่ไม่เข้ามาแจ้งผลผมยังไม่ได้ครับ
รอผมเขียนอีกแปบครับ ยังไงเดี๋ยวกลัมมาแจ้งครับ

ขอบคุณอาจารย์ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3412s