แยกค่าใน DLookup
กระทู้เก่าบอร์ด อ.Yeadram

 1,723   7
URL.หัวข้อ / URL
แยกค่าใน DLookup

จาก
DLookup("[fld1] & ' ' & [fld2]", "tbl1", "inx = " & Me.txtInx)

ทำยังไงจะแยกค่า fld1 กับ fld2 ออกมาได้คะ เช่น ให้
ตัวแปร i = fld1 และ j = fld2 โดย DLookup("[fld1] & ' ' & [fld2]", "tbl1", "inx = " & Me.txtInx) แค่ครั้งเดียว


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

1 @R02069
DLookup( ) ให้ค่าคืนได้จากแค่ฟิลด์เดียวครับ ถ้าต้องการหลายฟิลด์ต้องไปใช้ OpenRecordset method ของ DAO (หรือ ADO) Recordset แทนครับ
2 @R02070
ถ้าได้มาแค่สองฟิลด์ ใช้การหาตำแหน่งตัวคั่น แล้วใช้ mid() กับ left() แยกเอาก็ได้ครับ
dim sq
sq = DLookup("[fld1] & ' ' & [fld2]", "tbl1", "inx = " & Me.txtInx)
x = instr(1,sq," ")
i= left(sq,x-1)
j = mid(sq,x+1)

แต่ถ้าได้ มาหลายฟิลด์ ควรใช้ split() เข้าอาเรย์ดีกว่าครับ (นี่เป็นวิธีของคนที่ไม่ค่อยขยันเขียน แบบดึง ชุดเรคคอร์ดนะเนี่ย อิอิ)

3 @R02073
ขอบคุณค่ะ

ถามต่ออีกนิดว่า ทำไม DLookup ถ้าไม่เจอข้อมูลแล้วมันขึ้น error '94' คะ
4 @R02074
อิอิ จะบอกว่า "ถามกวน ??รือเปล่านี่" ก็กระไรอยู่
คือเมื่อเราสั่งให้มันไปหาข้อมูล มันไม่เจอ มันก็ต้องแจ้งกลับมาซักอย่างนั่นแหละครับ โดยกรณี นี้ มันแจ้งกลับมาในรูป error หมายเลข 94

เราไม่ควรสงสัยว่า "ทำไม" แต่เราควรถามต่อว่า "เราจะทำอย่างไรต่อไป"
ด้วยการที่มัน แจ้งกลับมาอย่างถูกต้องตามหน้าที่ของมันนี่เอง เราก็สามารถนำไปประยุกต์ต่อได้ครับ เช่น
on error resume next
sq = dlookup(.........)
if err=94 then
sq =""
msgbox "ไม่มีข้อมูลตามที่ต้องการ"
end if

หรือเราจะดักมันก่อนที่จะเกิด error ก็ได้เช่น
if dlookup(........)<>Null then

เพราะไม่ว่าจะรัดกุมเพียงใดก็ตาม การเขียนโปรแกรมมันคือการกำหนดล่วงหน้าทั้งนั้น เราไม่รู้หรอกว่าเมื่อใช้งานจริงๆ หรือเมื่อโปรแกรมของเราไปประสบกับข้อมูลจริงๆ มันจะไปเจอข้อยกเว้น ข้อห้าม หรือข้อจำกัดอื่นใดอีกหรือเปล่า อย่างที่ทั่วโลกเขาประสบล่ะครับ ที่บอกกันว่า เจอ Bug ในโปรแกรม นั่นส่วนหนึ่งก็เกิดจากการที่โปรแกรมเมอร์คาดไม่ถึงว่าจะเกิดเหตุการณ์อย่างนั้น หรือจะเจอกับข้อมูลแบบนั้นเข้า
ดังนั้นเมื่อเราเรียนรู้การเขียนโปรแกรม เราก็ต้องเรียนรู้การ Debug ไปด้วยครับ
5 @R02076
ขอบคุณอีกครั้งค่ะ
6 @R02079
Error 94 มันคือ Invalid use of Null นี่ครับ ไม่ใช่หาข้อมูลไม่พบ แต่เป็นเพราะ Me.txtInx หรือค่าของ fld1 หรือ fld2 เป็น Null มากกว่านะครับ
7 @R02080
อ้อ ขอบคุณครับ อาจารย์
ที่อาจารย์เขาบอกมา อย่างง นะครับ คุณ ลี่
ตามหลักการของ database แล้ว
ค่าของ "" จะไม่เท่ากับ Null นะครับ มันคนละค่ากัน
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3567s