iifในคิวรี่ก่อนพิมพ์ป้ายฉลากQbizStickerอยากพิมพ์เฉพาะตำแหน่งแถวและคอลัมน์



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

20 พ.ค. 64 , 07:58:52
อ่าน 309 ครั้ง

SakDa

SELECT [56].l_no, [56].la_id, [56].l_details, [56].Print, [56].LandC, [56].LineX, [56].ColumnX
FROM 56
WHERE ((([56].l_details)=IIf([print]=-1,[l_details]," ")));
อยากให้แทนข้อความในฟิล์ว l_details ด้วยความว่างเปล่าแม้จะข้อความอยู่ในนั้น กรณีที่ field print เป็นค่า No แต่ยังคงป้ายลาเบลอยู่บนกระดาษสติกเกอร์ ใช้วิธีแบบง่ายๆ คือ ทำฟอร์มสติกเกอร์เรียบร้อยแล้ว บางช่วงกระดาษสติกเกอร์เหลือจำนวนดวง2แถวล่าง จาก 14 แถว เราจะขอพิมพ์ดวงที่ 1ของแถวที่13 แบบนี้ครับ โดยที่ไม่ต้องตัดแถวที่ 1-12 ทิ้ง จะทำให้พิมพ์ไม่ตรงกับแถวในกระดาษสติกเกอร์สำเร็จรูปของคิวบิซ  ดัดแปลงจากคำตอบในเว็บ IIf(IsNull([ADDRMU]),"-",Replace(Replace([ADDRMU],"ม.",""),"หมู่ที่ ","")) แล้วไม่สำเร็จครับ ในไฟล์แนบมี mdb กับ ภาพสติกเกอร์ที่ใช้ ภาพอันเดียวกันกับที่แสดงบนหน้าเว็บครับ

เคยได้รับความช่วยเหลืออาจารย์สุภาพ เหยียดรัมย์ไปเมื่อหลายปีก่อนแต่เป็นการสั่งพิมพ์แบบใช้โค้ด แล้วรายงานชิ้นนั้นมันไม่รู้อยู่ในไฟล์ไหน เลยมาทำแนวนี้ที่ไม่ต้องใช้คำสั่ง vba แทนจะง่ายกว่า

 

20 พ.ค. 64 , 09:39:33
ตอบกลับ #1

SakDa

ถ้าแบบทำด้วยตนเองก่อนคือสั่งอัพเดทคิวรี่ ที่ฟิลด์ print ว่าถ้าเป็น no ให้ข้อมูลใน L-details เป็นค่า “ “ ตอนสั่งพิมพ์ก็จะพิมพ์ออกมาเป็นแบบเปล่าไม่ลงหมึก หรือ อีกวิธีหนึ่งตรงรายงานเงื่อนไขเป็นสีขาวกรณีมีค่าเป็น no วิธีหลังคาดว่ามันต้องสั่งพิมพ์โดยให้เป็นสีขาวคงไม่ดีวิธีนี้...คิดรอคำตอบ

 

20 พ.ค. 64 , 11:42:13
ตอบกลับ #2

PNR

จากที่ดู LINE X และ COLUMN X เป็นตัวระบุ ตำแหน่งแนวตั้งและแนวนอนของ RecordSorce นั้น

วิธีการที่ให้แสดงเฉพาะ l_details ที่ Print = Yes นั้นสามารถทำได้ครับ ส่วนที่ Print = No ก็ให้ข้ามการแสดงไป
ใช้การ Loop Check ค่าและสั่งให้ไปแสดงในtextbox ที่เราตั้งชื่อเรียงไว้ ตั้งแต่ 1 - 56 ครับ
และที่ตัวรายงานก็ออกแบบจำนวนช่องไว้ทั้ง 56 ช่อง โดยสามารถตั้งชื่อไว้เช่น

L1C1   L1C2    L1C3    L1C4
L2C1   L2C2    L2C3    L2C4
L3C1   L3C2    L3C3    L3C4
...............................L14C4

ถ้ามีถ้าท่านส่งการออกแบบรายงานที่ทำเป็นช่องไว้ 56 ช่อง มาด้วยเดี่ยวผมเพิ่มโค้ดให้ครับ
ผมพอจะทำได้ครับ
« แก้ไขครั้งสุดท้าย: 20 พ.ค. 64 , 12:03:36 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

20 พ.ค. 64 , 13:14:30
ตอบกลับ #3

SakDa

บรรทัดแรกของสติกเกอร์คือพ่นหมึกมีข้อจำกัด แต่ไม่เป็นปัญหา ทำแบบคัดลอกวางไปพลางๆครับ เสียไป 7 แผ่นกว่าจะได้ค่าที่ลงตัวพอดีมาก ปรับอีกทีหลังจากได้รับคำตอบครับ ซ้ายสุดคือดีที่สุด

 

21 พ.ค. 64 , 10:04:22
ตอบกลับ #4

PNR

ผมลองสร้าง รายงานโดย
ที่ตัวรายงานก็ออกแบบโดยใส่ Textbox ไว้ 56 อัน โดยสามารถตั้งชื่อไว้เช่น

L1C1   L1C2    L1C3    L1C4
L2C1   L2C2    L2C3    L2C4
L3C1   L3C2    L3C3    L3C4
...............................L14C4


และในEvent Report_Load ผมใส่โค้ดเข้าไป
โค๊ด: [Select]
Private Sub Report_Load()
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT [56].l_details, [56].LandC, [56].Print FROM 56 WHERE ((([56].Print)=True));", dbOpenDynaset)
   
    rst.MoveFirst
    Do Until rst.EOF
    If Not IsNull(rst!LandC) Then
    Me(rst!LandC) = rst!l_details
    End If
        rst.MoveNext
    Loop
   
End Sub
โดยเรากำหนด Recordsource ให้เอาเฉพาะ ข้อมูลที่ Print = true หรือถูกติ๊กเลือกอยู่มาเท่านั้น
และใช้ If กำหนด ว่าถ้า LandC นั้นมีอยู่
ก็ให้ textbox  Me(rst!LandC) ที่มีชื่อเหมือนกับ LandC ของตารางนั้นนำค่า l_details ลงไปแสดงที่ textbox นั้น

ไม่แน่ใจว่าท่านต้องการแบบนี้ไหมลองดูตัวอย่างนะครับ
« แก้ไขครั้งสุดท้าย: 21 พ.ค. 64 , 10:11:35 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa, Shutchan Gumpanavarawan


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