การใช้คำสั่ง iifซ้อน iif



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

08 ธ.ค. 61 , 08:59:05
อ่าน 875 ครั้ง

prajak

การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 08 ธ.ค. 61 , 08:59:05 »
ผมรบกวนสอบถามหน่อยนะครับ มีคำสั่งอื่นแทนการใช้ iif ซ้อนไหมครับ ผมใช้ iif ใน expression แต่พอใช้ซ้อนหลายๆชั้นมันเหมือนเกินขีดจำกัด และขึ้น error ครับ พอจะมีคำสั่งอื่นใช้แทนหรือเปล่าครับ


Eff20Auto: IIf(Not IsNull([Eff20]),[Eff20],IIf(Not IsNull([Eff19]),[Eff19],IIf(Not IsNull([Eff18]),[Eff18],IIf(Not IsNull([Eff17]),[Eff17],IIf(Not IsNull([Eff16]),[Eff16],IIf(Not IsNull([Eff15]),[Eff15],IIf(Not IsNull([Eff14]),[Eff14],IIf(Not IsNull([Eff12]),[Eff12],IIf(Not IsNull([Eff11]),[Eff11],IIf(Not IsNull([Eff10]),[Eff10],IIf(Not IsNull([Eff9]),[Eff9],[%Efficiancy])))))))))))

 

08 ธ.ค. 61 , 09:40:27
ตอบกลับ #1

ปิ่นณรงค์

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #1 เมื่อ: 08 ธ.ค. 61 , 09:40:27 »
ผมรบกวนสอบถามหน่อยนะครับ มีคำสั่งอื่นแทนการใช้ iif ซ้อนไหมครับ ผมใช้ iif ใน expression แต่พอใช้ซ้อนหลายๆชั้นมันเหมือนเกินขีดจำกัด และขึ้น error ครับ พอจะมีคำสั่งอื่นใช้แทนหรือเปล่าครับ


Eff20Auto: IIf(Not IsNull([Eff20]),[Eff20],IIf(Not IsNull([Eff19]),[Eff19],IIf(Not IsNull([Eff18]),[Eff18],IIf(Not IsNull([Eff17]),[Eff17],IIf(Not IsNull([Eff16]),[Eff16],IIf(Not IsNull([Eff15]),[Eff15],IIf(Not IsNull([Eff14]),[Eff14],IIf(Not IsNull([Eff12]),[Eff12],IIf(Not IsNull([Eff11]),[Eff11],IIf(Not IsNull([Eff10]),[Eff10],IIf(Not IsNull([Eff9]),[Eff9],[%Efficiancy])))))))))))
ใช้ Switch Function แทนดีไหมคับ
Switch ( expression1, value1, expression2, value2, ... expression_n, value_n )
โค๊ด: [Select]
Eff20Auto: Switch([Eff20]<>"",[Eff20],[Eff19]<>"",[Eff19],[Eff18]<>"",[Eff18],[Eff17]<>"",[Eff17],[Eff16]<>"",[Eff16],[Eff15]<>"",[Eff15],[Eff14]<>"",[Eff14],[Eff13]<>"",[Eff13],[Eff12]<>"",[Eff12],[Eff11]<>"",[Eff11],[Eff10]<>"",[Eff10],[Eff9]<>"",[Eff9],TRUE,[%Efficiancy])
« แก้ไขครั้งสุดท้าย: 08 ธ.ค. 61 , 10:55:16 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

08 ธ.ค. 61 , 19:06:55
ตอบกลับ #2

prajak

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #2 เมื่อ: 08 ธ.ค. 61 , 19:06:55 »
ลองแล้วตามที่คุณปิ่นณรงค์แนะนำ แต่ผลคือค่า error ครับ

 

08 ธ.ค. 61 , 19:23:29
ตอบกลับ #3

ปิ่นณรงค์

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #3 เมื่อ: 08 ธ.ค. 61 , 19:23:29 »
ต้องขอความรู้ อาจารย์ สันติสุข ,TTT , OddyWriter และ ท่านอื่นๆ แล้วละครับ  :cool: :cool:
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

09 ธ.ค. 61 , 13:21:46
ตอบกลับ #4

UnKnown

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #4 เมื่อ: 09 ธ.ค. 61 , 13:21:46 »
ต้องใส่ลูกน้ำคั่นวงเล็บปิดด้วยใหมครับนั้น ตย.ที่ผมใช้ =IIf([do_T15]=True,IIf([15_ราคา2]<>"",[15_ราคา2]+[15_ราคา],"0"),"0")
ปล.ถ้าใช้ ),),),),),),),),),),) คือมันไม่มีอะไรอยู่ข้างในมันจะแปลงร่างให้เป็น ))))))))))) ตามเดิมอยู่ดี ลองเป็น ,[%Efficiancy]),[%Efficiancy]),... แทนดูได้ใหมครับ :sweat:

โค๊ด: [Select]
Eff20Auto:
IIf(Not IsNull([Eff20]),[Eff20],
IIf(Not IsNull([Eff19]),[Eff19],
IIf(Not IsNull([Eff18]),[Eff18],
IIf(Not IsNull([Eff17]),[Eff17],
IIf(Not IsNull([Eff16]),[Eff16],
IIf(Not IsNull([Eff15]),[Eff15],
IIf(Not IsNull([Eff14]),[Eff14],
IIf(Not IsNull([Eff12]),[Eff12],
IIf(Not IsNull([Eff11]),[Eff11],
IIf(Not IsNull([Eff10]),[Eff10],
IIf(Not IsNull([Eff9]),[Eff9],[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
« แก้ไขครั้งสุดท้าย: 09 ธ.ค. 61 , 15:41:53 โดย UnKnown »

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

10 ธ.ค. 61 , 13:39:46
ตอบกลับ #5

prajak

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #5 เมื่อ: 10 ธ.ค. 61 , 13:39:46 »
ยังงงอยู่เลยครับ

 

10 ธ.ค. 61 , 14:25:36
ตอบกลับ #6

TTT

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #6 เมื่อ: 10 ธ.ค. 61 , 14:25:36 »
ที่บอกว่า "มันเหมือนเกินขีดจำกัด และขึ้น error" มันมีปัญหายังไงหรือครับ เท่าที่ดูทั้งการใช้ IIF() หรือใช้ฟังก์ชั่น Switch() มันก็ใช้ได้นะครับ ผมเคยเขียนซ้อนกันเยอะกว่านี้อีก

@UnKnown ทำให้ผมนึกถึงรูปที่เค้าล้อคนที่ชอบเขียน If ซ้อน If กันเยอะๆ รูปนี้เลยครับ

ฐานข้อมูลเป็นเรื่องใกล้ตัว ใครๆก็ทำฐานข้อมูลเองได้นะครับhttp://www.youtube.com/c/AccessCreator link
 
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

10 ธ.ค. 61 , 14:50:07
ตอบกลับ #7

prajak

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #7 เมื่อ: 10 ธ.ค. 61 , 14:50:07 »
ใช้ iif หรือ switch ได้สูงสุดเท่านี้ครับอาจารย์ TTT
Expr2: Switch(Not IsNull([Emp22:30]),[Emp22:30],Not IsNull([Emp22:00]),[Emp22:00],Not IsNull([Emp21:30]),[Emp21:30],Not IsNull([Emp21:00]),[Emp21:00],Not IsNull([Emp20:30]),[Emp20:30],Not IsNull([Emp20:00]),[Emp20:00],Not IsNull([Emp19:30]),[Emp19:30],Not IsNull([Emp19:00]),[Emp19:00],Not IsNull([Emp18:30]),[Emp18:30],Not IsNull([Emp18:00]),[Emp18:00],Not IsNull([Emp17:00]),[Emp17:00],Not IsNull([Emp16:00]),[Emp16:00],Not IsNull([Emp15:00]),[Emp15:00],True,[EmpWork])

ถ้ามากกว่านี้ขึ้นerrorตามรูปครับ

 

10 ธ.ค. 61 , 17:06:21
ตอบกลับ #8

TTT

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #8 เมื่อ: 10 ธ.ค. 61 , 17:06:21 »
ใช้ MS Access เวอร์ชั่นอะไรอะครับ ทำไมเหมือนใส่ได้น้อยจัง เหมือนกับมันใส่อักษรเกินที่ Textbox มันรับได้ป่าวครับ ถ้าใช่ให้แก้โดยแบ่งครึ่งเงื่อนไขครับ เช่น
a: IIf(Not IsNull([Eff20]),[Eff20],IIf(Not IsNull([Eff19]),[Eff19],Null)) ไปเรื่อยๆ จนสุดที่ใช้ได้
สร้างอีกฟิลด์
b: IIf(IsNull([a]),IIf(Not IsNull([Eff18]),[Eff18],Null),[a]) ไปเรื่อยๆ อีก ถ้ายังไม่หมดก็ต่ออีกฟิลด์ แล้วเราก็เอาฟิลด์สุดท้ายไปใช้งานครับ พอนึกภาพออกไม๊ครับ
ฐานข้อมูลเป็นเรื่องใกล้ตัว ใครๆก็ทำฐานข้อมูลเองได้นะครับhttp://www.youtube.com/c/AccessCreator link
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak, ปิ่นณรงค์

10 ธ.ค. 61 , 17:14:46
ตอบกลับ #9

prajak

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #9 เมื่อ: 10 ธ.ค. 61 , 17:14:46 »
นึกภาพออกครับอาจารย์ TTT เดี๋ยวผมจะลองทำตามที่อ.แนะนำนะครับ
ปล.ใช้ access 2010 ครับ

 

11 ธ.ค. 61 , 08:48:20
ตอบกลับ #10

nonc31

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #10 เมื่อ: 11 ธ.ค. 61 , 08:48:20 »
น่าจะเกิดจาก ความยาว หรือจำนวนอักขระ มากเกินไปครับ เวอร์ชั่นเก่า ยิ่งจำกัดแค่ 255 ตัวอักษร
แนะนำให้เขียนฟังชั่นใช้เองดีกว่าครับ

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

11 ธ.ค. 61 , 11:50:48
ตอบกลับ #11

TTT

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #11 เมื่อ: 11 ธ.ค. 61 , 11:50:48 »
ปัญหาการใช้ Expression จะมี 2 อย่างครับ คือ 1. พิมพ์ตัวอักษรมากเกินไป จำไม่ได้แล้วเท่าไหร่แต่ก็มากอยู่ 2. ใช้นิพจน์ซ้อนกันเกินประมาณ 13 ตัวมั้ง จำตัวเลขไม่ได้
ปัญหาของกระทู้นี้คือใช้นิพจน์ซ้อนกันเยอะเกินไป ไม่ว่าจะเป็น IIf ซ้อน IIf หรือใช้ฟังก์ชั่น Switch() ก็ไม่สามารถซ้อนกันเกินได้ จึงต้องใช้การแยกฟิลด์ไม่ให้เกินครับ
ฐานข้อมูลเป็นเรื่องใกล้ตัว ใครๆก็ทำฐานข้อมูลเองได้นะครับhttp://www.youtube.com/c/AccessCreator link
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

11 ธ.ค. 61 , 12:32:20
ตอบกลับ #12

prajak

: การใช้คำสั่ง iifซ้อน iif
« ตอบกลับ #12 เมื่อ: 11 ธ.ค. 61 , 12:32:20 »
เข้าใจแล้วครับอาจารย์ ขอบคุณมากๆครับ

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


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