หา Record รองสุดท้าย
กระทู้เก่าบอร์ด อ.Yeadram

 2,919   8
URL.หัวข้อ / URL
หา Record รองสุดท้าย


ถ้าเราต้องการหา Record แรกกับRecord สุดท้าย เราใข้

First()และ Last () หาได้

แต่ถ้าเราต้องการหา record รองสุดท้ายล่ะครับ ใช้คำสั่งอะไร?

ขอบคุณครับ

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

1 @R04165
หาเรคคอร์ดสุดท้ายก่อน
เก็บ primary ไว้ในตัวแปร
หาเรคคอร์ดสุดท้ายอีกครั้ง โดยใส่เงื่อนไขการหา ว่า ไม่เท่ากับ ตัวแปรของเรา

dim a
a=dlast()
a = dlast(,,[primary]<>a)
2 @R04167
สูตรนี้ใส่ตรงใหนครับ พอดีเป็นมือใหม่ครับ รบกวนอธิบายเพิ่มหน่อยครับ

ขอบคุณครับ
3 @R04169
ที่ผมตอบสั้นๆ ห้วนๆ ก็เพราะผมไม่รู้ว่า คุณจะนำไปใช้ที่ไหน เมื่อไหร่ นั่นแหละครับ

คุณซิครับ ที่ต้องบอกผม ว่าคุณจะหามันเมื่อไหร่ หาผ่านอะไร ฟอร์ม คิวรี่ รายงาน ฟังก์ชั่น?

คำสั่ง last() , first() ที่คุณพูดถึง มันเป็น keyword ของ SQL เพื่อหา "สุดท้าย" หรือหา "แรก" ตามลำดับ
keyword เหล่านี้มีมาให้แล้วโดยระบบ เพราะความต้องการทั่วไปของคนทั่วไปมักจะใช้เป็นประจำ

แต่ความต้องการของคุณนั้น แตกต่างออกไป ดังนั้นจึงต้องประยุกต์ใช้ครับ จะหาคำสั่งหรือ keyword ที่เป็นแบบเป๊ะๆ ตายตัวอย่าง last() หรือ first() นั้น โดยระบบแล้ว ไม่มีให้ครับ

ที่นี้มาว่ากันถึงการประยุกต์
มันก็ต้องแล้วแต่ว่า จะนำไปใช้อย่างไร ตรงไหน และเมื่อไหร่ เพราะว่า วิธี, แนวทาง และความเหมาะสม ของแต่ละการประยุกต์จะไม่เหมือนกันครับ

ตัวอย่างที่ผมให้ไป สามารถนำไปประยุกต์ต่อได้ทั้ง แบบฝั้งในเหตุการของฟอร์ม , ฝั้งในเหตุการณ์ของรายงาน หรือการสร้างฟังก์ชั่นขึ้นมาใช้เอง ซึ่งจะสามารถนำฟังก์ชั่นที่สร้างเองนี้ ไปใช้ได้ทั้งใน คิวรี่ และทุกๆ ที่ ที่สามารถใช้ "นิพจน์" ได้ครับ
4 @R04170
ขอบคุณครับที่อธิบายเพิ่มเติม คือความต้องการผมต้องการเอาไปสร้างเป็นฟังค์ชั่นสำหรับใช้ในคิวรี่ครับผม แต่เผอิญผมยังไม่เข้าใจเท่าไหร่ รบกวบอาจารย์ช่วยอธิบายเพิ่มเติมด้วยครับ

สมมุติว่าผมมี table ชื่อ DATA ในนั้นมี ฟิลด์ชื่อ No ซึ่งมีค่า 1 2 3

ถ้าใช้ last ([No]) จะได้ 3

กรณีนี้จะเอาคำสั่งที่อาจารย์มาแนะนำยังไง ถ้าผมต้องการเอามาใช้เป็นฟังค์ชั่นสมมุติว่าชือ Secondlast ครับ
5 @R04171
นำฟังก์ชั่นนี้ไปไว้ในโมดูล (ชือโมดูลอะไรก็ได้)

public function sndLast(tbN as string, fld As string)
dim x
x = nz(dlast(fld,tbN),Null)
if x=Null then
sndLast=Null
exit function
end fi
sndLast=dlast(fld,tbn,fld & " <> " & x)
End Function


เวลานำไปใช้
ก็เขียนในคิวรี่ได้เลยครับว่า

Epr1:sndLast("DATA","NO")

6 @R04172
อาจารย์
บรรทัด x = nz(dlast(fld,tbN),Null)
ฟังก์ชั่น nz() คืออะไรครับ
ขอความรู้

7 @R04173
ขอบคุณอาจารย์มากครับ
8 @R04175
nz()
คือฟังก์ชั่นของระบบที่มีมาให้ เป็นฟังก์ชั่นช่วย debug
ส่วนใหญ่ ใช้คู่กับฟังก์ชั่นในกลุ่มโดเมนอะกรีเกต (จริงๆ ใช้กับงานอื่นๆ ก็ได้)
เพื่อช่วยแก้ปัญหา กรณีค้นหาข้อมูลไม่เจอ
เช่น dLast() คือคำสั่งให้หาค่าสุดท้ายที่ถูกบันทึกลงใน ฐานข้อมูล
ปกติถ้าแหล่งข้อมูลของเรามีข้อมูลอยู่ เราก็จะได้ค่าสุดท้ายตามต้องการเสมอ
แต่ถ้ากรณีที่แหล่งข้อมูล ถูกล้างข้อมูลหมด เช่นเหลือแต่ตารางเปล่าๆ

ฟังก์ชั่น DLast มันจะทำงานผิดพลาดทันที เพราะมันหาไม่เจอกลุ่มข้อมูล ดังนั้นมันก็ตอบไม่ได้ว่า ข้อมูลใดคือตัวสุดท้าย กรณีผิดพลาด (error) ดังกล่าว มันจะคืนค่าออกมาเป็น Null (ไม่ใช่ 0, ไม่ใช่ "")

ฟังก์ชั่น nz() ที่คุณเปี๊ยกสงสัย คือ ฟังก์ชั่นช่วยจัดการตรงนี้
ความหมายของมันคือ "ถ้าผลลัพธ์เป็นค่า Null (หรือการเกิด error นั่นเอง) ให้เปลี่ยนผลลัพธ์เป็น ...."

ดังนั้น ค่าที่อยู่ใน อาร์กิวร์เมนต์ที่สองของ ฟังก์ชั่น nz() ก็จะถูกนำมาแทนที่ error ทันที่ ไม่ต้องมีการแจ้ง error ใดๆ อีก

ตัวอย่าง
x = nz(dlast(fld,tbN),0)
ถ้าหาค่า dlast ออกมาได้ปกติ ให้ x = ผลลัพธ์ของ dlast ไม่งั้นให้ x =0 (ไม่ต้องแจ้ง error)

x = nz(dlast(fld,tbN),"ก")
ถ้าหาค่า dlast ออกมาได้ปกติ ให้ x = ผลลัพธ์ของ dlast ไม่งั้นให้ x ="ก" (ไม่ต้องแจ้ง error)

x = nz(dlast(fld,tbN),Null)
ถ้าหาค่า dlast ออกมาได้ปกติ ให้ x = ผลลัพธ์ของ dlast ไม่งั้น ยืนยันว่า ให้ x =Null เช่นเดิม (ไม่ต้องแจ้ง error)
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3325s