Dlookup ใน Report
กระทู้เก่าบอร์ด อ.Yeadram

 1,668   4
URL.หัวข้อ / URL
Dlookup ใน Report

ใน Report เรา Dlookup แบบมีเงื้อนไขได้มั้ยครับ
ขยายความ
ตารางA มีรายละเอียดดังนี้
วันที่     จำนวน
1/11/2554      1200
2/11/2554       2200
3/11/2554      560

ใน Report ของผมมี Textbox ชื่อ Date1 ซึ่งส่งค่าวันที่ 2/11/2554
ผมสร้าง Textbox อีกอัน ใส่ เงื่อนไขว่า =Dlookup("[วันที่]","ตารางA",.........)
ตรงเงื่อนไขของ Dlookup ต้องใส่อย่างไรครับ ผมอยากให้ออกมาตาม Textbox ชื่อ Date1
ถ้า Date1 =2/11/2554 ค่าที่ได้ คือ 2200
      Date1 =3/11/2554 ค่าที่ได้ คือ 560

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

1 @R11643
ถ้าฟิลด์ [วันที่] มี data type เป็น Date ก็ใช้
=Dlookup("[จำนวน]","ตารางA","[วันที่]=#" & format(Date1,"dd-mmm-yyyy") & "#")

ถ้าฟิลด์ [วันที่] มี data type เป็น Text ก็ใช้
=Dlookup("[จำนวน]","ตารางA","[วันที่]=""" & Date1 & """ ")
2 @R11647
ขอบพระคุณอาจารย์สันติสุขมากครับ ได้แล้วครับ แต่ผมไม่เข้าใจ
ตรง """ & Date1 & """ ") ใช้เครื่องหมาย " สามอันติดกัน ข้างหลังมีเว้นวรรค
หมายความว่ายังงัยครับ รู้ไว้จะได้ประยุกต์กับงานอื่นครับ
3 @R11649
argument ที่ 3 ของฟังก์ชั่น DLookup ต้องเป็น String Expression (นิพจน์ที่เป็นตัวอักษร) ทำหน้าที่เทียบเท่า WHERE clause ใน SQL statement เพื่อบอกเงื่อนไขว่าเราต้องการเรคอร์ดอะไรบ้าง

แต่เนื่องจาก Date1 ในโปรแกรมของคุณก็มี data type เป็น string เช่นเดียวกันกับ argument ที่ 3 นี้ ซึ่งตามข้อกำหนดแล้ว string จะมี delimited (ตัวคั่นเพื่อบอกขอบเขตของ string ว่าเริ่มที่ไหน จบที่ไหน) เป็น double quote หรือ single quote ก็ได้

ดังนั้น VBA จึงกำหนดไว้ว่า ถ้า string ต้องมีอักษรเดียวกันกับ string delimited แล้วหล่ะก็ ให้ใส่ string นั้น 2 ตัวติดกัน VBA จะตีความหมายออกมาเป็นตัวอักษรเดียวให้

เช่น string ของคุณคือ [วันที่]="xx/xx/xxxx" แต่ string นี้ก็ต้องอยู่ใน argument ที่ 3 อีกที ถ้าเราไม่ใส่ double quote 2 ตัวติดกัน ก็จะกลายเป็น "[วันที่]="xx/xx/xxxx"" สิ่งที่เกิดขึ้นคือ VBA จะตีว่านี่เป็น syntax error เพราะในส่วน "[วันที่]=" นั้น VBA ตีความว่าได้จบ string แล้ว มี double quote ปิดท้าย ถูกต้องตาม syntax แล้ว แต่พอมันเจอ xx/xx/xxxx ต่อท้ายมา ซึ่งไม่เป็นไปตาม syntax มันไม่รู้ว่ามันเป็นอะไร จู่ๆมีตัวเลข xx มาต่อท้าย มันก็ตีออกมาเป็น syntax error แต่พอคุณใส่ double quote 2 ตัว ก่อนหน้า xx/xx/xxxx มันก็จะตีความว่าเป็นตัวอักษร double quote 1 ตัว ไม่ใช่ double quote ที่เป็น string delimited

อีกวิธีนึงที่จะเลี่ยงก็คือ เราใช้ single quote เป็น string delimited สำหรับ string ชุดใน และใช้ double quote เป็น string delimited สำหรับ string ชุดนอกก็ได้ครับ

ส่วนที่ผมเว้นช่องว่างไว้ 1 ตัวอักษรนั้น เพื่อไม่ให้ตาลายเกินไป จะได้ดูได้ง่ายๆ ซึ่งเป็นสไตล์การเขียนโค้ดของผมเท่านั้นเอง จะไม่มีก็ได้ครับ
4 @R11650
ขอบคุณอาจารย์มากครับ ผมเคย Error แบบนี้ เลยกลับไปดู Query
ของหลายๆ ท่าน เจอ บางท่านใช้ single quote เลย ใช้โดยไม่ได้เข้าใจ
แต่คำอธิบายนี้ ทำให้ผมเข้าใจ ในสิ่งที่ผมไม่เข้าใจมานานครับ
ขอบพระคุณอาจารย์ สำหรับความรู้ที่ผมไม่เคยได้จากที่ไหนมาก่อนครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3460s