ค้นหาข้อมูลให้ได้ที่ไกล้เคียงถ้าหาไม่เจอ
กระทู้เก่าบอร์ด อ.Yeadram

 1,187   2
URL.หัวข้อ / URL
ค้นหาข้อมูลให้ได้ที่ไกล้เคียงถ้าหาไม่เจอ

ต้องการค้นหาค่า Record ใกล้เคียงที่สุด เช่น

A
B
C
D
E
F
L
M
N
ถ้าเราสั่งค้นหา ค่า H อยากให้ผลลัพธ์แสดงที่ตัว F หรือ L ก็ได้ครับ
ผมลองใช้ docmd.findrecord "H" ก็ Error
สั่ง me.recordsetclone.findfirst "field = 'H'" ก็ไม่มีอ??ไรเกิดขึ้น
แต่ถ้าสั่ง me.recordsetclone.findfirst "field = 'M'" สามารถหาพบ


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

1 @R06990
โจทก์นี้ยากจัง
ผมลองคิดๆ เขียนโฟลว์ก่อนก็แล้วกันครับ ถ้าไม่เจอตัวต้องการ เราต้องหาก่อนว่า รายการใดใกล้เคียงที่สุด ซึ่งแนวคิดดังกล่าวตั้งอยู่บนข้อสมมติฐานหลัก ชื่อรายการเป็นอักษรเดี่ยวภาษาอังกฤษ

- ประกาศตัวแปรเตรียมเก็บค่ารายการ

1) ค้นหา H ในรายการ ถ้าเจอ ให้เอา H ป้อนเข้าตัวแปร แล้วให้ข้ามไปข้อ 3)
2) - H คืออักษรชึ่งมีค่าลำดับในรหัสแอสกีที่ 72

- วนลูปดังนี้
for i =1 to 26
ให้ค้นหาว่า ในรายการต่าง มีอักษรที่มีรหัสแอสกีนี้หรือไม่ 72-i หรือไม่
เช่น dcount( ......chr(72-i)......) >0
ถ้ามีให้ เก็บค่าตัวอักษร chr(72-i) เข้าตัวแปร, ออกจากลูปและกระโดดไปข้อ 3)

ให้ค้นหาในทางกลับกันอีกครั้ง 72+i
ถ้ามีให้ เก็บค่าตัวอักษร chr(72+i) เข้าตัวแปร, ออกจากลูปแล้วกระโดดไปข้อ 3)
next

3) สั่งฟอร์มให้ค้นหารายการ ตามค่าตัวแปรที่หาได้
เช่น me.recordsetclone.findfirst "field = '" & ค่าตัวแปร & "'"
2 @R06997
Dim rs as DAO.Recordset

set rs = me.recordsetclone
rs.FindLast "field <= H"
if rs.nomatch then
   rs.FindFirst "field > H"
   if rs.nomatch then
      exit sub (หรือ exit function)
   end if
end if
me.bookmark = rs.bookmark

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