สอบถามแนวทางสร้างตารางข้อมูลดังภาพหน่อยครับ



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

16 พ.ค. 61 , 18:37:19
อ่าน 756 ครั้ง

Parnu

สวัสดีครับ รบกวนสอบถามอาจารย์เกี่ยวกับการจัดข้อมูลหน่อยครับ
พอดีผมต้องการสร้างตารางข้อมูลไปใส่ในโปรแกรมคำนวนทางวิศวกรรมครับ
แต่ข้อมูลที่ต้องเอาไปใส่มีจำนวนเยอะมาก
ผมจึงอยากสร้างมันจากตารางอย่างง่ายใน Excel แล้วให้ Access สร้างชุดข้อมูลให้ ครับ
ผมคิดว่าวิธีการมันคล้ายกับการทำ Query Crosstab แบบย้อนกลับน่ะครับ แต่ไม่รู้จะทำอย่างไร
รบกวนขอแนวทางการทำหน่อยครับ
ขอบพระคุณมากครับ

 

17 พ.ค. 61 , 11:39:15
ตอบกลับ #1

สันติสุข

tblFactor สร้างใน Access ไปเลยได้ไหม ให้อยู่ในรูปแบบ Row Header, Column Header, Pivot Value เช่น

1,A,1
1,B,2
2,A,1
2,B,1
2,C,2
3,A,2

tblType ก็นำเข้า Access เช่นกัน ใช้โครงสร้างตามที่คุณเขียนมาได้
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Parnu

17 พ.ค. 61 , 11:56:53
ตอบกลับ #2

Parnu

ผมคิดว่าถ้าใส่ใน Access เลยจะมีปัญหา Human error ค่อนข้างเยอะครับ เนื่องจาก
Case มีประมาณ 50 Case, ส่วน Type มีประมาณ 20 Type, Factor ก็กระจายกันน่ะครับเดี๋ยวมีบ้างไม่มีบ้าง ไม่แน่นอนเลยครับ
ทุกครั้งที่เริ่ม Project ใหม่ก็ต้องมานั่งกรอกใหม่ทุกครั้ง หรือบางครั้งทำไปแล้วต้องเพิ่ม Case อีก
ซึ่งผมเคยลองเขียนใน Excel ด้วย Module VBA ใช้ Loop ช่วยจัดการก็พอไปได้ครับ
แต่เผอิญอยากเปลี่ยนทุกโปรแกรมที่ใช้งานอยู่เข้ามาอยู่ใน Programs Database ครับ
เพราะบางเรื่องที่คำนวนก็มี Record หลายล้านบรรทัด เลยอยากให้จบในโปรแกรมเดียว
ส่วนตัวผมเองก็พึ่งศึกษาครับ เลยไม่แน่ใจว่า Access มีขีดจำกัดมากแค่ไหนน่ะครับ
หรือผมควรมองหา Database ตัวอื่นดูดีครับ
ขอบคุณมากครับ อ.สันติสุข

 

17 พ.ค. 61 , 14:49:40
ตอบกลับ #3

สันติสุข

ถ้าคุณเขียน VBA ได้ ก็สามารถเขียนโค้ดใน Access เพื่ออ่านข้อมูลโดยตรงจาก Excel ตามรูปแบบที่คุณกำหนดมาได้ แต่ยังไงคิดว่าอ่านแล้วก็ให้เขียนลงเทเบิลที่สร้างเตรียมไว้ใน Access ตามรูปแบบที่ผมบอกอีกครั้ง จะทำให้หาผลลัพธ์ tblTarget ได้ง่ายมากโดยทำคิวรี่และเชื่อม tblFactor และ tblType เข้าด้วยกันก็เสร็จแล้ว และจะ export ผลลัพธ์ไปเป็น Excel ก็ทำได้ง่ายๆเหมือนกัน

ถ้าจะทำหน้าฟอร์มใน Access เพื่อป้อนข้อมูลลง tblFactor โดยให้เห็นในรูปแบบตารางเหมือน Excel ก็พอทำได้ครับ แต่ลงแรงเขียนโค้ดกันเยอะทีเดียว

ส่วนไฟล์ฐานข้อมูลของ Access นั้น รองรับขนาดได้ 2 GB ต่อไฟล์ เทเบิลหนึ่งๆอยู่ได้ในไฟล์ฐานข้อมูลเดียวเท่านั้น ยังไงก็ตาม ทั้งระบบสามารถเชื่อมเทเบิลต่างๆมาจากไฟล์ต่างกันได้ แต่สิ่งที่จะทำไม่ได้ก็คือการกำหนด Referential Integrity (จะมีเรคอร์ดในเทเบิลนึงได้ ก็ต่อเมื่อมีเรคอร์ดที่สัมพันธ์กันในอีกเทเบิลนึงมาก่อน ,การแก้ไขฟิลด์ในเทเบิลอื่นที่สัมพันธ์กันอย่างอัตโนมัติ ,การลบเรคอร์ดในเทเบิลอื่นที่สัมพันธ์กันอย่างอัตโนมัติ) ระหว่างเทเบิลที่อยู่ต่างไฟล์กันครับ

ถ้าจะหาตัวจัดการฐานข้อมูลตัวอื่นในระดับที่สูงกว่า Access มาใช้ เมื่อเราต้องการ
- ระบบที่คงทนต่อความเสียหายได้มากกว่า
- โอกาสกู้คืนฐานข้อมูลที่เสียหายได้มากกว่า
- เก็บข้อมูลได้มากกว่า
- มีระบบรักษาความปลอดภัยที่ดีกว่า
- มีระบบสำรองข้อมูลในตัวเอง

แต่ก็มาพร้อมกับระยะเวลาในการเรียนรู้ และการจัดการที่ซับซ้อนกว่าด้วย ก็ลองพิจารณาดูครับ
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

17 พ.ค. 61 , 15:53:23
ตอบกลับ #4

Parnu

ผมเขียน VBA ได้แค่การ Loop ทั่วไปย้ายค่าไปมาเท่านั้นเองครับ
พอจะมาลองทำใน Access เหมือนต้องใช้ Query & SQL ในการจัดการตารางเป็นส่วนใหญ่
ซึ่งผมเองก็ไม่รู้จะใช้ SQL คู่กับ Loop และตัวแปรต่างๆอย่างไรน่ะครับ
เท่าที่ลองหาในอินเตอร์เน็ต เห็นเขาใช้ ADO,DAO เข้ามาช่วยเหลือน่ะครับ
ซึ่งส่วนตัวแล้วผมอยากจัดการได้ด้วยแค่ VBA หรือ SQL น่ะครับ หากศึกษามากกว่านี้อาจจะเกินกำลังผมเกินไป
รบกวนอาจารย์ช่วยแนะนำคร่าวๆให้หน่อยได้ไหมครับ อย่างเช่น
ผมไม่รู้เลยว่า tblFactor จะมี Type A,B,C,.... ไปถึงไหนน่ะครับ อยากจะ Import เข้ามาใน Access เฉพาะเท่าที่มีค่าครับ
ถ้าเป็น Excel ผมคง Loop ไปจนกว่าจะเจอ Cell ว่าง ถึงจะหยุดน่ะครับ
ขอบคุณ อ.สันติสุข มากๆเลยครับ

 

17 พ.ค. 61 , 19:14:28
ตอบกลับ #5

สันติสุข

- ถ้าจะไม่ต้องยุ่งกับ DAO/ADO เลยก็คือ สั่ง INSERT/UPDATE/DELETE ผ่านคำสั่ง
  DoCmd.RunSQL "INSERT/UPDATE/DELETE statement"

- อ่านค่าฟิลด์จากเรคอร์ด (อ่านได้เรคอร์ดเดียวเท่านั้น)
  ตัวแปร = DLookup("ชื่อฟิลด์", "ชื่อเทเบิล/คิวรี่", "เงื่อนไขการเลือกเรคอร์ด")

- อ่านค่าฟิลด์จากเรคอร์ดแรก/สุดท้ายที่หาได้
  ตัวแปร = DFirst/DLast("ชื่อฟิลด์", "ชื่อเทเบิล/คิวรี่", "เงื่อนไขการเลือกเรคอร์ด")

- อ่านค่าฟิลด์ที่มากสุด/น้อยสุดจากเรคอร์ดที่หาได้
  ตัวแปร = DMax/DMin("ชื่อฟิลด์", "ชื่อเทเบิล/คิวรี่", "เงื่อนไขการเลือกเรคอร์ด")

- อ่านจำนวนเรคอร์ดที่หาได้
  ตัวแปร = DCount("ชื่อฟิลด์", "ชื่อเทเบิล/คิวรี่", "เงื่อนไขการเลือกเรคอร์ด")

- อ่านค่าเฉลี่ยของฟิลด์จากเรคอร์ดที่หาได้
  ตัวแปร = DAvg("ชื่อฟิลด์", "ชื่อเทเบิล/คิวรี่", "เงื่อนไขการเลือกเรคอร์ด")

- อ่านค่าผลรวมของฟิลด์จากเรคอร์ดที่หาได้
  ตัวแปร = DSum("ชื่อฟิลด์", "ชื่อเทเบิล/คิวรี่", "เงื่อนไขการเลือกเรคอร์ด")

- กรณีอ่าน tblFactor ใน Excel คิดว่าคุณคงทำได้อยู่แล้ว ก็ลูปไปทีละบรรทัด จนกว่าหัวคอลัมน์จะว่างๆ (ไม่มี Type ต่อไปแล้ว) ก็จะขึ้นบรรทัดใหม่ ถ้าหัวบรรทัดว่างๆ ก็แปลว่าไม่มี Case ต่อไปแล้ว ส่วนค่า Pivot ก็เอาเฉพาะที่ไม่เป็นค่าว่างเขียนลง tblFactor ใน Access และเนื่องจากเราสร้างโครงสร้างเทเบิลให้เรคอร์ดนึงมี 3 ฟิลด์ คือ Row Header, Column Header, Pivot Value ดังนั้นไม่ว่าใน Excel จะมีกี่ Type (Column) กี่ Case (Row) เราก็เอาลงเทเบิลใน Access ทีละเรคอร์ดได้ไปเรื่อยๆโดยไม่ต้องแก้โครงสร้างใดๆครับ

- สำหรับคำสั่งให้ Access ไปอ่านไฟล์ Excel   คุณลองค้นด้วยคำว่า Excel.Application ในเวปนี้ดูครับ
« แก้ไขครั้งสุดท้าย: 17 พ.ค. 61 , 19:17:59 โดย สันติสุข »
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Parnu

18 พ.ค. 61 , 10:36:32
ตอบกลับ #6

Parnu

สอบถามเพิ่มเติมครับ

1.คำสั่ง DoCmd.RunSQL"......" 
    ผมเห็นมีหลายคำสั่งที่ใช้ได้ เช่น SELECT,UPDATE,INSERT INTO,DELETE,CREATE TABLE,ALTER TABLE,DROP TABLE
    ซึ่งลักษณะการใส่คำสั่ง เป็นลักษณะ DoCmd.RunSQL"SELECT [field name] FROM [table name]"
    ซึ่งถ้าผมจะสร้างคำสั่งนี้เป็น Function ไว้ใช้ใน Module อื่นๆ โดยอยากให้ [field name] และ [table name] เป็นตัวแปร
    จะสามารถทำได้ไหมครับ เช่น
    A = fieldname
    B = tablename
    DoCmd.RunSQL"SELECT A FROM B"
2.คำสั่งต่างๆที่อ.สันติสุขให้ผมมาเพิ่มเติมเช่น DLookUp,DFirst,... เป็นคำสั่งของ SQL ใช่ไหมครับ ถ้าเป็น SQL ผมก็สงสัยแบบข้างบนน่ะครับ
3.วิธีที่อ.สันติสุขแนะนำคือให้ Excel ไปสร้างตารางใน Access หรือ ให้ Access ไปอ่านค่าจาก Excel มาสร้างตารางครับ
    ผมงงตรงที่ อ.สันติสุข พูดถึงการอ่านค่าใน tblFactor ใน Excel เพื่อไปใส่ค่าใน Access ทีละ Record ครับ
4.Excel.Application คือคำสั่งให้ Access สามารถใช้งานคำสั่งใน Excel ได้รึเปล่าครับ ผมหาวิธีค้นหาในเวปนี้ไม่เจอน่ะครับ เห็นช่องค้นหา
   ในหน้าแรกแล้วไปค้นหาใน Google
5.สอบถามเพิ่มเติมเกี่ยวกับชื่อ table ครับ พอดีผม Import ข้อมูลออกมาจากโปรแกรมคำนวนทางวิศวกรรม
    แล้วชื่อเป็นลักษณะ [Frame Force Assignments] เลยอยากทราบว่าชื่อ Table ควรไม่มีเว้นวรรครึเปล่าครับ
    ผมจะสามารถลบเว้นวรรค หรือ แทนค่าเป็น _ จาก table ที่ผม Import 30 กว่า table ด้วย vba หรือ sql ได้ไหมครับ
ขอบพระคุณ อ.สันติสุข มากๆเลยครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข

18 พ.ค. 61 , 12:41:17
ตอบกลับ #7

สันติสุข

1.คำสั่ง DoCmd.RunSQL"......" 
    ผมเห็นมีหลายคำสั่งที่ใช้ได้ เช่น SELECT,UPDATE,INSERT INTO,DELETE,CREATE TABLE,ALTER TABLE,DROP TABLE
    ซึ่งลักษณะการใส่คำสั่ง เป็นลักษณะ DoCmd.RunSQL"SELECT [field name] FROM [table name]"
    ซึ่งถ้าผมจะสร้างคำสั่งนี้เป็น Function ไว้ใช้ใน Module อื่นๆ โดยอยากให้ [field name] และ [table name] เป็นตัวแปร
    จะสามารถทำได้ไหมครับ เช่น
    A = fieldname
    B = tablename
    DoCmd.RunSQL"SELECT A FROM B"
- .RunSQL method เป็นคำสั่งที่ต้องการ SQL statement ที่ไปทำอะไรกับข้อมูลเท่านั้น การอ่านเรคอร์ดออกมาเฉยๆด้วย SELECT statement นั้นใช้ไม่ได้กับ .RunSQL ครับ  แต่ถ้า SELECT ... INTO ... อันนี้ใช้ได้ เพราะเป็นการสร้างเรคอร์ดที่ได้จากการอ่านอีกที
- ทำเป็นฟังก์ชั่นได้ครับ แต่ผมไม่เห็นประโยชน์ในการทำอย่างนั้น เพราะฟังก์ชั่นจะมีแค่คำสั่งเดียวอยู่ดี ซึ่งไม่แตกต่างอะไรกับการสั่ง .RunSQL ตามธรรมดาๆเลย

2.คำสั่งต่างๆที่อ.สันติสุขให้ผมมาเพิ่มเติมเช่น DLookUp,DFirst,... เป็นคำสั่งของ SQL ใช่ไหมครับ ถ้าเป็น SQL ผมก็สงสัยแบบข้างบนน่ะครับ
- ไม่ใช่ครับ เป็นฟังก์ชั่นของตัว Access เอง ไม่ได้ผ่าน DAO/ADO แต่อย่างใด ทำงานได้เทียบเท่าบางคำสั่งของ SQL เท่านั้น

3.วิธีที่อ.สันติสุขแนะนำคือให้ Excel ไปสร้างตารางใน Access หรือ ให้ Access ไปอ่านค่าจาก Excel มาสร้างตารางครับ
    ผมงงตรงที่ อ.สันติสุข พูดถึงการอ่านค่าใน tblFactor ใน Excel เพื่อไปใส่ค่าใน Access ทีละ Record ครับ
- เพราะเห็นบอกว่าการป้อน tblFactor ลง Access ตรงๆ (เทเบิลที่มีฟิลด์ Row Header, Column Header, Pivot Value) อาจมี human error ได้ ผมก็เลยคิดว่างั้นก็ป้อนเป็นตารางใน Excel อย่างเดิมที่ส่งรูปมานี่แหล่ะ แต่ให้โค้ด VBA ใน Access อ่านตารางนี้ แล้วแปลง 1 pivot ใส่เป็น 1 เรคอร์ดลงเทเบิล tblFactor ใน Access อีกที (พอดีใช้ชื่อเดียวกันก็เลยทำให้สับสน)

4.Excel.Application คือคำสั่งให้ Access สามารถใช้งานคำสั่งใน Excel ได้รึเปล่าครับ ผมหาวิธีค้นหาในเวปนี้ไม่เจอน่ะครับ เห็นช่องค้นหา
   ในหน้าแรกแล้วไปค้นหาใน Google
- เป็น keyword ที่จะช่วยหากระทู้เก่าที่พูดคุยถึงโค้ดที่จะอ่านข้อมูลจาก Excel เท่านั้นครับ ลองดูอันนี้ น่าจะใกล้เคียงครับ www.thai-access.com/topic_post.asp?CategoryID=1&TopicID=4430

5.สอบถามเพิ่มเติมเกี่ยวกับชื่อ table ครับ พอดีผม Import ข้อมูลออกมาจากโปรแกรมคำนวนทางวิศวกรรม
    แล้วชื่อเป็นลักษณะ [Frame Force Assignments] เลยอยากทราบว่าชื่อ Table ควรไม่มีเว้นวรรครึเปล่าครับ
    ผมจะสามารถลบเว้นวรรค หรือ แทนค่าเป็น _ จาก table ที่ผม Import 30 กว่า table ด้วย vba หรือ sql ได้ไหมครับ
- Access/DAO/ADO รองรับชื่อที่มี space อยู่ภายในได้ เวลาอ้างถึงก็เพียงใส่ [ ] ครอบชื่ออย่างที่คุณเขียนมานี่แหล่ะครับ

ขอบพระคุณ อ.สันติสุข มากๆเลยครับ
- ขอบคุณครับ
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Parnu


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