แสดงกระทู้

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 - PookPuy

หน้า: 1 2 [3]
33
การนำข้อมูลที่มี Data Type เป็น Date จาก Recordset ไปใส่ลงในเอ็กซ์เซลชีทในเซลที่ถูกกำหนดรูปแบบการแสดงเป็น Custom (รูปแบบที่ผู้ใช้กำหนดเอง เช่นอาจต้องการให้แสดงวันที่ 1 มกราคาม 2561 เป็น "จันทร์ 1 ม.ค. 61") ด้วยคำสั่ง CopyFromRecordset method สำหรับ Range object (เป็น Excel object) จะทำให้เซลนั้นจะถูกเซ็ท format กลับมาเป็นชื่อ Date เสมอ ต้องกำหนดรูปแบบของเซลอีกครั้งด้วย NumberFormat property  แต่ถ้าใส่ค่าลงไปตรงๆด้วย Value property จะไม่เกิดเหตุการณ์แบบนี้

โค้ดตัวอย่างที่ทำให้เกิดเหตุการณ์
โค๊ด: [Select]
    Dim xlApp   As Object
   
    Dim DB      As DAO.Database
    Dim RS      As DAO.Recordset
   
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    xlApp.Workbooks.Open "C:\Temp\Example.xlsx"
   
    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("select PMU2_StartDT from PMU2")
    xlApp.ActiveSheet.Range("C3").CopyFromRecordset RS
    RS.Close

ภาพเซลที่มีรูปแบบตามที่ผู้ใช้กำหนดเอง
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

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

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

ตัวเอง เค้าแซวเล่น อย่าโกรธน้า
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

35
เวลาเราดีบักโปรแกรม โค้ดจะหยุดรันเมื่อถึงบรรทัดที่ตั้ง break point ไว้ ปกติเมื่อกดคีย์ F8 โค้ดก็จะทำงานต่อไปหนึ่งบรรทัดและหยุดรอเราว่าจะให้ทำอะไรต่อไป แต่บางกรณีที่โค้ดนั้นเขียนเพื่อโปรแกรมการทำงานของ Excel เช่น

1410              xlSheet.Cells(wR, wxlOut_ColIDLine) = wRS!PMU2_ID
1420              xlSheet.Cells(wR, wxlOut_ColStartDT) = wRS!PMU2_StartDT
1430              xlSheet.Cells(wR, wxlOut_ColMatCD) = wRS!PMU2_MATCD

สมมุติว่าตั้ง break point ไว้ที่บรรทัด 1410  พอโค้ดหยุดแล้ว และเรากดคีย์ F8  แทนที่โค้ดจะหยุดที่บรรทัด 1420  ปรากฏว่าโค้ดจะไม่หยุด และทำงานต่อไปตามปกติ ถ้าอยากให้หยุดที่บรรทัด 1420 ก็ต้องตั้ง break point ไว้ที่นั่นอีกบรรทัด แต่จะไม่เกิดปัญหานี้ในโค้ดที่ควบคุมการทำงานของ Access เอง สาเหตุเป็นปัญหาทางเทคนิคของตัว VBA เอง วิธีแก้ก็คือให้แก้ไข Registry ในระบบวินโดว์ตามลิงค์นี้ครับ http://www.contextures.com/excelvbatips.html#f8 link (ดูในส่วน F8 Key Stops Working)

หมายเหตุ : ปัญหานี้สามารถเกิดได้เมื่อเขียน VBA ภายในตัวโปรแกรม Excel เองโดยตรงด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

36
ให้ตาราง A ชื่อ TA มีฟิลด์ชื่อ DateA
ให้ตาราง B ชื่อ TB มีฟิลด์ชื่อ DateB และ Output
ให้ตาราง C ชื่อ TC มีฟิลด์ชื่อ DateC และ Output
...

ให้สร้างคิวรี่ชื่อ JoinOutput ซึ่งมี SQL เป็น
SELECT TA.DateA, TB.Output, "OutputB" AS HeadName FROM TA LEFT JOIN TB ON TA.DateA = TB.dateB
UNION ALL
SELECT TA.DateA, TC.Output, "OutputC" AS HeadName FROM TA LEFT JOIN TC ON TA.DateA = TC.dateC
UNION ALL
...

ให้สร้างคิวรี่ชื่อ FinalOutput ซึ่งมี SQL เป็น
TRANSFORM Sum(JoinOutput.Output) AS SumOfOutput
SELECT JoinOutput.DateA
FROM JoinOutput
GROUP BY JoinOutput.DateA
PIVOT JoinOutput.HeadName;

รัน FinalOutput ก็จะได้ผลลัพธ์ที่ต้องการครับ
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

37
ดยส่วนตัว ผมเป็นคนที่เกลียดเรื่องภาษามาตั้งแต่เด็ก ไม่ว่าจะภาษาไทย ภาษาอังกฤษ สังคม ประวัติศาสตร์ เป็นอะไรที่ต้องใช้ภาษาเยอะๆ นี่อย่าได้หวังว่าจะหันไปเหลียวแลเลยแม้แต่น้อย
วิชาที่ชอบที่สุดคือคณิตศาสตร์กับฟิสิกส์
ไม่รู้ว่าโชคดีหรือโชคร้ายที่เริ่มต้นชีวิตการทำงานในบริษัทฝรั่งที่ทุกอย่างภายในองค์กรเป็นภาษาอังกฤษล้วน ขนาดคีย์บอร์ดคอมพิวเตอร์ยังไม่มีภาษาไทยให้เลย เวลาจะพิมพ์ภาษาไทยทีนี่เป็นเรื่องน่าปวดหัวมาก
แล้วผมก็เริ่มใช้ 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 เลย แม้คุณจะรักภาษาไทยขนาดไหนก็ตาม
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

38
Access เองไม่ได้มีคำสั่งสำหรับสร้าง SQL statement ให้กับ Schema ของอ็อปเจ็คต่างๆในฐานข้อมูล อย่างเช่น Table, Index, Relationship, Query, ...   ดังนั้นปกติแล้วเราจะต้องสร้างเองด้วยแมนวลออกมาเป็นคำสั่งเช่น

DROP TABLE [CUSTOMER];
CREATE TABLE [CUSTOMER] (
[ID] TEXT(12)
[NAME] TEXT(20) NOT NULL
[CityCD] TEXT(6)
[PostalCD] TEXT(10)
[CountryCD] TEXT(6)
[Tel] TEXT(50)
[Fax] TEXT(50)
) ;
CREATE UNIQUE INDEX [PrimaryKey] ON [CUSTOMER] ([ID] ASC) WITH PRIMARY DISALLOW NULL;
CREATE INDEX [AK1] ON [CUSTOMER] ([NAME] ASC);

แต่ยูทิลิตี้ที่เป็น Command-line ตัวนี้สามารถช่วยสร้างให้เราได้ นอกจากสร้างให้แล้ว ยังสามารถสั่งให้อ่านจากไฟล์ที่สร้าง SQL statement ตามข้างบน มาทำงานได้ด้วย ยูทิลิตี้ตัวนี้จะช่วยให้การดูแลจัดการกับ Schema ทำได้ง่ายขึ้นมาก สามารถโหลดมาใช้ได้จาก https://bitbucket.org/himselfv/jet-tool/wiki/Home link  have
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

39
https://www.overclockzone.com/news/10009 link
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

หน้า: 1 2 [3]