แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - OddyWriter

หน้า: 1 ... 28 29 30 [31] 32 33 34 35
541
แนบไฟล์มาได้ไหมครับ แก้ไขจากไฟล์ อาจจะ ง่ายกว่า

542
ห้อง MS Access / > การ SUM Unbound Textbox บนForm Footer
« เมื่อ: 20 เม.ย. 61 , 16:32:07 »
Capture หน้าจอมาให้เห็นหน่อยครับ เพิ่มความชัดเจนของคำถามหน่อย

543
กำหนด Data Type เป็น Text ครับ ใส่ได้ทุกอย่าง

แล้วใช้ Update Query แบบมีเงื่อนไขให้ตรงกับฟิลด์ที่เราต้องการ Update

ว่าแต่ทำไมต้องเก็บค่าพวกนี้ไว้ในตาราง มันเป็นค่าคำนวณ ก็ให้คำนวณเฉพาะตอนที่ต้องใช้ก็ได้นี่

544
บางทีอาจกเกิดจากเปิดไฟล์มาแล้วเป็น Read Only ก็ได้นะครับ ตอนเปิดมามีแถบเหลืองเกิดใต้ริบบ้อนหรือเปล่า

545
มีให้เลือก 2 ทางนะครับ
1. กำหนดฟิลด์ให้มี Data Type เป็น Calculation
2. หรือเปลี่ยน Select Query เป็น Updated Query

546
ห้อง MS Access / > การใช้ Not in
« เมื่อ: 19 เม.ย. 61 , 09:17:02 »
ใส่ Not In ("TRACTOR-L","TRACTOR-M","TRACTOR-B","DC-95","DC-70")

ไว้ตรงไหนของ Query ครับ

547
เพิ่งรู้ว่าการศึกษา Access ผิดกฏ ICT  :shout:

เพื่อการศึกษานะไม่ผิดหรอกครับ แต่พวกมาโฆษณาแถมแนบลิ้งเว็บพนันนี่สิ :anger:
รวมถึงเดี๋ยวจะทำหน้าเว็บเพิ่มเติม ผู้ใช้งานจะได้มั้นใจว่าข้อมูลไม่โดนแฮ็กไปง่ายๆด้วยนะครับ :want:

ตัวเอง เค้าแซวเล่น อย่าโกรธน้า

548
รายงานผลการเปลี่ยนชื่อเว็บจากเดิม http ไปเป็น https
>โปรแกรมเว็บบราวเซอร์ทั้งหลายยอมรับว่า https://www.thai-access.com ปลอดภัย  :fake smile:
>จากข้อบนทำให้เว็บบอร์ดเรียนรู้ Access สำหรับคนไทยแห่งนี้อยู่ต่อไปได้อีกยาวๆ(ไม่โดน ICT บล็อกง่ายๆ :shout: )
>สคริปกล่องค้นหาโดย Google(ขวาบน) ที่เก็บข้อมูลเว็บนี้มาตลอด 9ปี ถูกรีเซ็ตใหม่หมด  :cry:    *แก้คืนมาได้แล้วส่วนหนึ่ง :yuush: :grin:
>ปรับปรุง,พัฒนา,แก้ปัญหาบางส่วนได้ (อย่างปัญหาสคริปอัพรูปตอนแรกที่คุณ UTO เคยแจ้งใว้)

เพิ่งรู้ว่าการศึกษา Access ผิดกฏ ICT  :shout:

549
เรื่องวุ่นๆ ของออบเจ็กต์และคอนโทรล

สมัยเรียน OOP (Object-Oriented Programming) รู้สึกตัวเองได้เปรียบเพื่อนร่วมชั้นตรงที่ใช้ Access มาก่อนชาวบ้าน เพราะถูกสอนจาก Microsoft ว่า Access น่ะ เป็นโปรแกรมที่ใช้ระบบ OOP
แต่พอเรียน OOP จริงๆ ไม่รู้ทำไมความเชื่อต่างๆ มันค่อย “แฟบ” ลงเรื่อยๆ เพราะยิ่งรู้มาก ก็ยิ่งรู้สึกว่า Access นั้นไม่ใช่ OOP แบบเต็มร้อย แต่ก็ถือว่า “เกือบ” ล่ะ อีกนิดเดียวก็ OOP แล้ว
อธิบายมากไปเดี๋ยวเผลอหยิบเรื่องเครียดมาเล่า ใครอยากรู้ว่า OOP เป็นอย่างไรไปถามอากู๋เอาเอง แต่เลือกเว็บที่น่าเชื่อถือหน่อยนะครับ พวกสถานศึกษาอะไรงี้
เรามาว่าเรื่อง Access กันดีกว่า
ถ้าใครศึกษา Access อย่างจริงจังย่อมหนีไม่พ้นที่จะเจอคำว่า “ออบเจ็กต์” และ “คอนโทรล” อย่างแน่นอน เพราะ Access นั้นถูกออกแบบมาด้วยเทคโนโลยีที่ล้ำกว่า Excel
เรียกว่า Excel นั้นว่าฉลาดแล้วก็จริง เพราะใช้เทคโนโลยีแบบ Neuro ในการออกแบบในสมัยแรกๆ พอมาสมัยหลังๆ ก็เอา XML มาใส่ จนกลายเป็น Excel ฉลาดๆ แบบปัจจุบัน แต่ Access มีมากกว่านั้นครับ คือใส่พวก Database Engine ระดับ OOP เข้าไป ถึงจะใส่ได้ไม่หมดก็เถอะ (แต่ไหงไม่เก่งภาษาไทยก็ไม่รู้)

คราวนี้พอแตะ OOP เข้าไป ก็หลีกไม่ได้ที่เวลาเขียนโค้ด หรือสั่งงานจะมีเรื่องของออบเจ็กต์เข้าไปด้วย
วิธีการมองคือทุกสิ่งอย่างที่เราเห็นได้ด้วยตาในหน้าจอ แบบนี้คือออบเจ็กต์ไม่ว่าจะเป็นตาราง ฟอร์ม รีพอร์ต ฯลฯ ล้วนเป็นออบเจ็กต์
แม้กระทั่ง Text Box, Combo Box อะไรพวกนี้ก็เป็นออบเจ็กต์ครับ
แต่ทีนี้ออบเจ็กต์พวก Text Box, Combo Box นี่ต้องวางอยู่บนออบเจ็กต์พวก ฟอร์มหรือรีพอร์ต
การจะเรียกว่าออบเจ็กต์อาจสร้างความสับสนให้ผู้ใช้งานได้ เขาก็เลยเรียก ออบเจ็กต์พวกที่ต้องวางอยู่บนออบเจ็กต์ว่า “คอนโทรล”
ดังนั้นเวลาพูดถึง “คอนโทรล” ก็จะหมายถึงออบเจ็กต์ที่วางอยู่บนออบเจ็กต์อีกที
แล้วเรื่องพวกนี้ก็เลยติดมาที่การเขียน Code ด้วย ถึงแม้ VBA ของ Access จะอิงกับ VB6 ก็เถอะ
เช่น
Form_frmData.txtDescription.Visible = False
Form_frmData เป็นออบเจ็กต์ประเภทฟอร์มชื่อ frmData
txtDescription เป็นคอนโทรลที่วางอยู่บนฟอร์มนี้
Visible คือ Property หรือคุณสมบัติของคอนโทรล ที่กำหนดให้มีค่าเป็น False
ทีนี้เราก็สามารถแยก “คอนโทรล” กับ “ออบเจ็กต์” ออกจากกันได้แล้วนะครับ

550
ดยส่วนตัว ผมเป็นคนที่เกลียดเรื่องภาษามาตั้งแต่เด็ก ไม่ว่าจะภาษาไทย ภาษาอังกฤษ สังคม ประวัติศาสตร์ เป็นอะไรที่ต้องใช้ภาษาเยอะๆ นี่อย่าได้หวังว่าจะหันไปเหลียวแลเลยแม้แต่น้อย
วิชาที่ชอบที่สุดคือคณิตศาสตร์กับฟิสิกส์
ไม่รู้ว่าโชคดีหรือโชคร้ายที่เริ่มต้นชีวิตการทำงานในบริษัทฝรั่งที่ทุกอย่างภายในองค์กรเป็นภาษาอังกฤษล้วน ขนาดคีย์บอร์ดคอมพิวเตอร์ยังไม่มีภาษาไทยให้เลย เวลาจะพิมพ์ภาษาไทยทีนี่เป็นเรื่องน่าปวดหัวมาก
แล้วผมก็เริ่มใช้ Access ที่นี่แหละครับ เริ่มที่ Access 2.0 โดยตอนนั้นไม่มีความรู้เรื่อง Access เลย เห็นชื่อคล้าย Excel ก็เลยรับอาสาจะทำฐานข้อมูลให้
พอเปิดโปรแกรม Access ครั้งแรกเท่านั้นแหละ ปิดโปรแกรมแล้วนั่งทำใจอยู่ 2 วัน ก่อนไปหาหนังสือเกี่ยวกับ Access มานั่งอ่านอยู่เป็นอาทิตย์ กว่าจะได้ฐานข้อมูลที่เจ้านายต้องการออกมาก็เป็นเดือน
แล้วผมก็ตกหลุมรัก Access เข้าเต็มเปา
อ้าว! เล่าเรื่องส่วนตัวเยอะไปแล้ว ดึงกลับมาเข้าเรื่องของเราดีกว่า
บ่อยครั้งที่ผมได้รับไฟล์จากใครหลายคนส่งมาให้ผมช่วยเหลือ แล้วพบว่ามีการตั้งชื่อออบเจ็กต์และคอนโทรลเป็นภาษาไทย ซึ่งผมได้แต่แนะนำไปว่าอย่าใช้ภาษาไทยใน Access ก็เชื่อบ้างไม่เชื่อบ้าง
และนี่คือประสบการณ์ตรง เกิดจริง เจ็บจริง อันเกิดจากการใช้ภาษาไทยใน Access ครับ

เรื่องแรก ขัดขาตัวเอง
หลังจากศึกษา Access จนมั่นใจว่าเชี่ยวชาญในระดับนึง เพราะได้อาจารย์หลายท่านช่วยสั่งสอน ช่วงนั้นมีชื่อเสียงโด่งดังถึงขนาด บ.ไมโครซอฟต์ โทรมาหาเพื่อให้ไปเป็นวิทยากรให้เขา ก็เริ่มใช้ภาษาไทยในการตั้งชื่อออบเจ็กต์ต่างๆ จนกระทั่งพบว่า ภาษาไทยเป็นภาษาที่มี 5 ระดับ คือมีพยัญชนะ สระ วรรณยุกต์ ได้ 5 ชั้น แล้ว Access ก็ใช่ว่าจะเก่งภาษาไทยอะไรนักหนา บางครั้งภาษาไทยเหมือนกันเป๊ะ แต่พิมพ์ด้วยขั้นตอนต่างกัน Access ก็ไม่สามารถจัดการได้ ยิ่งเขียน VBA ยิ่งเละกันเข้าไปใหญ่ โดยที่เราเองก็ไม่รู้มันผิดตรงไหน แก้อย่างไรก็แก้ไม่ได้ แถม Access สมัยก่อน เวลาแก้ชื่อออบเจ็กต์แล้วก็ยังต้องไปตามแก้ในฟอร์ม ในรีพอร์ต ในรายงาน ปวดหัวมาก
ไม่เชื่อลองพิมพ์คำว่า “ปู่ปู่” เป็นชื่อตารางดูสิครับ ให้ ไม้เอกมาก่อนสระอู และสระอูมาก่อนไม้เอก Access จะแสดงเหมือนกันทั้งคู่ แล้วอย่างนี้เราจะไว้ใจภาษาไทยใน Access ได้อย่างไร

เรื่องที่ 2 ภาษาไทยกับคอนโทรลใน Access
เรื่องนี้เกิดจากมีบริษัทการเงินแห่งนึง เอาโปรแกรมฐานข้อมูลที่เปิดไม่ได้มาให้ช่วยแก้ไข Bug ให้ที สิ่งที่เจอคือชื่อคอนโทรลทั้งหมดเป็นภาษาไทย ด้วยเหตุแห่งชาตินิยม ดังนั้นจึงตั้งชื่อคอนโทรลเป็นภาษาไทยเพื่อให้สามารถทำการแก้ไขคำสั่งได้ง่าย และดูเหมือนโปรแกรมไม่มีปัญหาอะไร จนกระทั่ง Access 97 มาถึง แล้วทุกสิ่งก็เปลี่ยนไป เมื่อโปรแกรมเปิดมาแล้วเจอ Bug มากมายมหาศาล

เรื่องที่ 3 โปรแกรมจัดการตารางบินที่ตั้งชื่อ Sub เป็นภาษาไทย
เรื่องนี้ก็เกิดกับบริษัทเกี่ยวกับธุรกิจการบินขนาดเล็กที่ใช้ Access ในการเก็บจำนวนชั่วโมงบินของนักบิน หลังจาก Access ถูกเปลี่ยน Version เป็น 2013 แล้วฝันร้ายก็มาเยือน เพราะการทำงานทุกอย่างดูติดขัดไปหมด แถมการคำนวณจำนวนชั่วโมงก็เพี๊ยนไม่เป็นท่า พอส่งโปรแกรมมาให้ผมแก้ไขก็พบว่า ภาษาไทยที่เคยมีอยู่ กลายเป็น ?????? (ใครใช้ Access นานๆ น่าจะเคยเจอเจ้านี่ ? มหาภัย) กว่าจะไล่แก้ไขได้ก็เป็นเดือนครับ

ก็อย่างที่บอกแหละครับ ถึงผมจะไม่ชอบเรื่องภาษา แต่การไปทำงานต่างประเทศนานๆ ทำให้รักภาษาไทยมาก ถึงมากที่สุด เมื่อกลับมาอยู่เมืองไทย ก็เริ่มศึกษาประวัติศาสตร์ชาติไทยอย่างจริงจัง อ่านวรรณคดี นิยาย เรื่องสั้นมากมาย แต่ก็อย่างที่บอกครับ อย่าใช้ภาษาไทยใน Access เลย แม้คุณจะรักภาษาไทยขนาดไหนก็ตาม

552
กรอง1 และ กรอง2 ก็คือค่าที่กำหนดให้ Filter แสดงผลครับ

เช่นฟิลดชื่อ FirstName มีชื่อคนมากมาย ต้องการกรองเฉพาะคนชื่อ สมชายกับสมหญิง
กรอง1 คือสมชาย
กรอง2 คือสมหญิง

อย่าใช้วิธีนี้เลยครับ ผิดก็ง่าย ทำก็ยาก ใช้คิวรีอย่างที่ผมว่าเถอะ ง่ายกว่าเยอะ

อันนี้คือไฟล์ตัวอย่างที่ใช้ ComboBox อย่างที่ผมว่าไว้ครับ

https://www.dropbox.com/s/beu9tczu8mczbpq/Select2Criteria.accdb?dl=0

553
คือถ้าจะใช้ Filter ของ Datasheet ในการกรองก็ต้องเขียน Code แล้วใส่ SQL ตามที่บอกไป ยิ่งกรองเยอะ SQL ยิ่งยาว

ถ้าจะทำการกรองเองก็ใส่ Combo Box เข้าไป จะให้กรองกี่อันก็ใส่เข้าไปได้ กรองเสร็จก็สั่ง Requery

554
ถ้าบอกว่าสร้างจากคิวรีตั้งแต่แรกก็จบแล้วครับ
ดังนั้นโปรดแจ้งข้อมูลให้ละเอียดตั้งแต่แรก อ้างคำพูดอาจารย์สันติสุข ๓(_ _)๓

ในเมื่อใช้ ในเมื่อใช้คิวรี
1. ก็ให้คิวรีเป็นตัวกรองข้อมูลแทน อย่าใช้ฟิลเตอร์ใน Datasheet
2. สร้างรีพอร์ตจากคิวรีเดียวกับ Datasheet
3. ที่ปุ่มก็ใส่คำสั่ง docmd.openreport

แค่นี้ครับ อาจต้องใช้คำสั่ง docmd.requery ในบางจุดเพื่อให้คิวรีกรองข้อมูลแล้วแสดงใน Datasheet


555
ใช้คิวรีสร้าง Datasheet แล้วใช้คิวรีอันนี้สร้างรีพอร์ตครับ

ถ้าจะบอกว่าด้วยเหตุผลอะไรก็แล้วแต่ ไม่สามารถใช้คิวรีได้ ก็ต้องเขียนโค้ดที่อ้างถึงตัวกรองใน Datasheet

ประมาณนี้ครับ
SELECT ชื่อตาราง.* FROM ชื่อตาราง LEFT JOIN ชื่อฟิลด์ที่กรอง AS Lookup_ชื่อฟิลด์ที่กรอง ON ชื่อฟิลด์ที่กรอง = Lookup_ชื่อฟิลด์ที่กรอง.ชื่อฟิลด์ที่กรอง WHERE (([Lookup_ชื่อฟิลด์ที่กรอง].[ข้อมูลที่แสดงในฟิลด์ที่กรอง] In ("กรอง1","กรอง2")));

ใช้คิวรีง่ายกว่าครับ ช่วงนี้ไม่ถนัดเรื่องเครียด

556
ห้อง MS Access / > สลับตำแหน่งFormatวันที่
« เมื่อ: 20 มี.ค. 61 , 11:12:29 »




ครั้งหน้ากรุณาบอกรายละเอียดให้ชัดเจนนะครับ

557
ผมว่ามันเป็นเรื่องใหม่นะครับ ตั้งกระทู้ใหม่เถอะครับ

558
ห้อง MS Access / > สลับตำแหน่งFormatวันที่
« เมื่อ: 20 มี.ค. 61 , 09:48:18 »
แสดงว่าข้อมูลที่คุณต้องการแปลงนั้นมีบางอย่างผิดพลาด เพราะ Error Num นี่เกิดได้จากหลายสาเหตุ ทั้งการ Link Table การ ใช้สูตรคำนวณที่ผิด ต้องส่งไฟล์มาดูครับ




หน้า: 1 ... 28 29 30 [31] 32 33 34 35