เกี่ยวกับฟิลด์
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 275   5
URL.หัวข้อ / URL
เกี่ยวกับฟิลด์

เราสามารถทำให้ฟิลด์แสดง 2 บรรทัดที่รีพอร์ทจะได้มั้ยครับ
ตัวอย่าง ฟิลด์ชื่อ txtProductName จะต้องกรอกข้อมูลเกี่ยวกับ ชื่อ และ รายละเอียดของสินค้าในฟิลด์เดียวกัน
กรอก: Flange, size: 10"JIS10K mat'l: SUS304
แสดงที่รีพอร์ท: Flange,
size: 10"JIS10K mat'l: SUS304

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

1 @R06050
ทำได้ครับ ไม่ทราบว่าใช้ Access 2000 ขึ้นไปหรือเปล่า ถ้าใช่ ก็สามารถใช้ Replace() ช่วยได้ครับ

=Replace([ชื่อฟีลด์เป้าหมาย],",","," &Chr(10))

แต่การออกแบบฟีลด์แบบนี้ไม่ถูกต้องตามหลักของ Normalization คือ ควรแยกเป็นอย่างน้อย 2 ฟีลด์ครับ เป็น ProductName, ProductDescp

แต่ผมว่าควรแยกเป็น 3 ฟีลด์ด้วยซ้ำ ProductName, Size, Material

ปัญหาที่เกิดตรงนี้ ก็มาจากการเอาทั้ง 2 คุณสมบัติไปใส่ในฟีลด์เดียวกันครับ
2 @R06065
ขอบคุณครับสำหรับคำแนะนำดีๆ พอดีผมไม่ได้ใช้ Access 2000 เสียด้วย ยังงัยผมจะลองทำดูก่อนแล้วกันครับ แต่เหตูผลที่ผมไม่ได้แยก 2 - 3 ฟีลด์นั้นเพราะ ผมอิมพอร์ทฐานข้อมูลมาจากเอ็กเซล ซึ่งมีข้อมูลประมาณ 3000 กว่าๆ ครับ
3 @R06073
ถ้ารูปแบบของข้อมูลคงที่ (เหมือนกันทุก record) ก็ใช้วิธีการตัดข้อความหน้า , และหลัง , โดยใช้ textbox 2 อัน จริง ๆ แล้วมี 3 อัน คือ
txtProductName แต่ซ่อนไว้ ไม่ต้องให้เห็น
อันหนึ่งเป็น txtProductName1 มี control source เป็น =Left([txtProductName],InStr(1,[txtProductName],",")-1))
ส่วนอีกอันหนึ่งเป็น txtProductName2 มี control source เป็น =Right([txtProductName],Len([txtProductName])-InStr(1,[txtProductName],","))
อ้อม ๆ หน่อย แต่ใช้ได้ครับ
4 @R06079
ขอบคุณมากครับ อ.สุภาพ และ คุณ อุดมโชค ผมไม่สามารถใช้โค๊ดนี้ได้ครับ =Replace([ชื่อฟีลด์เป้าหมาย], ", ", ", " &Chr(10)) ส่วนของคุณ อุดมโชคโค๊ดนี้ =Left([txtProductName], InStr(1, [txtProductName], ", ")-1)
มีเออเร่อครับ (โดยที่ผมตัดเครื่องหมายวงเล็บปิดออก1อัน) ส่วนอีกโค๊ดนึง =Right([txtProductName], Len([txtProductName])-InStr(1, [txtProductName], ", ")) แสดงผมตามเดิม คือเหมือนฟิลด์ต้นฉบับครับ เลยอยากถามถึงความหมายของโค๊ดทั้งสามตัว และรบกวนช่วยแก้ไขหน่อยนะครับ (ผมมีข้อสังเกตุอีกนิดนึงคือ ทุกตัวเลยครับหลังจากที่เขียนชื่อของสินค้าจะมีเครื่องหมายคอมม่า แล้วจึงจะตามด้วยรายละเอียดของสินค้า เช่น Flange, size: 10"JIS10K mat'l: SUS304)


5 @R06113
ขออภัยครับ วงเล็บปิดเกินมาครับ
หลักการก็คือการตัดข้อมูลออกเป็น 2 ส่วน
ผมสมมุติให้ txtProductName มีค่าเท่ากับ Flange, size: 10"JIS10K mat'l: SUS304 เพื่อความสะดวกในการอ้างอิงนะครับ
1. หาจุดตัด ในที่นี้คือ comma ที่คั่นระหว่างชื่อสินค้า และรายละเอียด ตามแบบที่ให้มามี comma กับ 1 ช่องว่าง ผมเลยใช้จุดตัดหรือตัวแบ่งเป็น ", " ไม่ใช่ "," ดังนั้นทุกข้อมูลต้องมีจุดตัดเหมือนกัน คือ ", " (อย่าลืมใส่ช่องว่างหลัง comma ในทุกข้อมูล) หรือถ้ากลัวว่าจะป้อนช่องว่างไม่ครบทุกข้อมูลหรือมีมากกว่า 1 ช่องว่าง ก็ต้องใช้ trim(Right([txtProductName], Len([txtProductName])-InStr(1, [txtProductName], ", ")) ) ครับ
2. หลังจากได้จุดตัดแล้ว ผมก็ใช้ function instr เพื่อหาว่าจุดตัดนั้นอยู่ที่ตำแหน่งเท่าไร (จากซ้าย) ของข้อมูล
รูปแบบ instr(start,string,search_string) โดย
start คือ ตำแหน่งที่เริ่มต้นในการค้นหา คือเริ่มจาก 1 ใส่ 1 หากต้องการเริ่มจากอักษรตำแหน่งอื่นก็กำหนดได้
string คือ ข้อความที่เราต้องการให้โปรแกรมค้นหาสิ่งที่เราต้องการ
search_string คือ ตัวอักษรที่เราต้องการค้นหา
จากตรงนี้เราจะรู้ว่า ", " หรือ "," อยู่ที่ตำแหน่งไหนของข้อความ
เช่น Flange, size: 10"JIS10K mat'l: SUS304 ซึ่งมี comma อยูที่ตำแหน่ง 7 จากซ้าย เมื่อใช้ Instr(1,txtProductName,",") จะได้ผลลัพท์เป็น 7
3. ผมก็เอา function left มาตัดคำทางซ้าย
รูปแบบ Left(string,length)
ซึ่งตอนนี้เรารู้ว่า comma อยู่ตัวที่ 7 จากซ้าย ดังนั้นข้อมูลที่เราต้องการคือ 6 ตัว เราจะต้องเปลี่ยน ข้อ 2 เป็น Instr(1,txtProductName,",")-1 เมื่อรวมกับ LEFT จะได้ Left(txtProductName ,Instr(1,txtProductName,",")-1)
4. คราวนี้เราก็มาดูข้อมูลส่วนท้ายคือข้อมูลที่อยู่หลัง comma การตัดข้อความทางขวาใช้ right รูปแบบเดียวกับ left ครับ แต่คราวนี้เราจะรู้ได้อย่างไรว่าข้อมูลหลัง comma มีกี่ตัว เราต้องใช้ LEN ช่วยครับ หาว่าข้อความของเรายาวเท่าไร แล้วหักลบด้วยตัวแหน่งของจุดตัด จะได้ความยาวของข้อมูลทางขวาครับ แบบนี้ครับ
LEN(txtProductName,",") - Instr(1,txtProductName,",")
ต่อมาเราก็ใช้ right ครับ
Right(txtProductName,LEN(txtProductName,",") - Instr(1,txtProductName,","))
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0615s