20110606

เครื่องหมายเปรียบเทียบ (comparison operator)

0 comments
SQL เป็นภาษามาตรฐานสำหรับฐานข้อมูล Relational Database Management System (RDBMS) ตามมาตรฐานของ ANSI (American National Standard Institute) SQL (ออกเสียงว่า "ess-que-el" หรือ "ซี-เคลว") ย่อมาจาก Structured Query Language คิดค้นโดยนักวิทยาศาสตร์ของ IBM ในทศวรรษ 1970 ในปัจจุบัน ANSI (American National Standard Institute) ได้ประกาศให้ SQL เป็น ภาษามาตรฐานสำหรับระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System ย่อเป็น RDBMS) ระบบฐานข้อมูลในปัจจุบันเกือบทั้งหมด เป็นแบบระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) เช่น Oracle, Sybase, Microsoft SQL Server, Microsoft Access, DB2 ของ IBM เป็นต้น ถึงแม้ว่า ฐานข้อมูลแบบ RDBMS ทุกระบบ จะสามารถใช้คำสั่งพื้นฐานของ SQL เหมือนกัน แต่ทุกระบบอาจจะมีคำสั่งพิเศษของตัวเองที่ ระบบอื่นอาจจะใช้ไม่ได้

SELECT STATEMENT : คำสั่งที่ใช้ในการสร้างแบบสอบถาม

ประโยคคำสั่ง SELECT ใช้ในการสร้างคิวรี่ หรือการสอบถามกับฐานข้อมูล และเลือกดึงข้อมูลที่ตรงกับเกณฑ์ที่กำหนด

ไวยากรณ์ ประโยคคำสั่ง SELECT
SELECT [ALL | DISTINCT] column1[,column2]
FROM table1[,table2]
[WHERE conditions]
[GROUP BY column-list]
[HAVING conditions]
[ORDER BY column-list [ASC | DESC] ];

[ ] ตัวเลือก
ตัวอย่าง
SELECT hn, dayin, name, age
FROM pttbl
WHERE age > 30;

ประโยคคำสั่งนี้จะเลือกค่าทั้งหมด ในคอลัมน์ hn, dayin, name และ age จาก table “pttbl ที่ age มีค่ามากกว่า 30
Note: ต้องมีเครื่องหมาย semicolon(;) ปิดท้ายประโยค เพื่อชี้ว่าประโยคคำสั่ง SQL จบสมบูรณ์และพร้อมที่จะแปล
การสร้างแบบสอบถาม(Query) ในโปรแกรม Access
1. คลิกแถบ Queries > New > Design View > O
2. คลิกชื่อตาราง pttbl > Add > Close
3. นำ Field ชื่อ hn, dayin, name และ age มาใส่ใน Field Properties โดยการ Drag และ Drop ที่ละ Field หรือ โดยการดับเบิลคลิกที่ชื่อ Field ก็ได้
4. ใส่ Criteria เป็น > 30 ในคอลัมน์ age > Save > qry_age_more_30_pttbl
จะ ได้ผลตามรูปที่ 1
รูปที่ 1
การสร้างแบบสอบถาม(Query) ในโปรแกรม Access ด้วย SQL
1. คลิก View > SQL View
2. พิมพ์ประโยคคำสั่ง SELECT ตามไวยากรณ์ข้างต้น
SELECT pttbl.hn, pttbl.dayin, pttbl.name, pttbl.age
FROM pttbl
WHERE pttbl.age>30;
3. Save > qry_age_more_30_pttbl
จะได้ผลตามรูปที่ 2
รูปที่ 2
จากการสร้างทั้งสองแบบ เมื่อ View จะได้ผลตามรูปที่ 3
รูปที่ 3
เครื่องหมายเปรียบเทียบ (comparison operator)
= เท่ากับ
> มากกว่า
< น้อยกว่า
>= มากกว่า หรือเท่ากับ
<= น้อยกว่า หรือเท่ากับ
<> หรือ != ไม่ เท่ากับ
เครื่องหมายเปรียบเทียบอื่นๆ
LIKE ทดสอบเปรียบ เทียบข้อความ
NOT LIKE หาค่าที่อยู่นอกเหนือจาก LIKE
NULL ทดสอบเปรียบ เทียบค่าว่าง
NOT NULL ทดสอบเปรียบเทียบค่าที่ไม่ใช่ค่าว่าง
ตัวอย่าง
SELECT hn, dayin, name, age
FROM pttbl
WHERE pttbl.name LIKE "จ*";
ประโยค คำสั่งข้างบนจะเลือก แถว/ค่า ในคอลัมน์ hn, dayin, name และ age จาก table “pttbl” ที่มี name เริ่มต้นด้วย ‘จ’ ซึ่งจะส่งชื่อของผู้ป่วยที่ขึ้นต้นด้วย จ ออกมา

จะได้ผลตามรูปที่ 4 รูปที่ 5 และรูปที่ 6
รูปที่ 4

รูปที่ 5

รูปที่ 6
แสดงว่าในฐานข้อมูล มีผู้ป่วยที่มีชื่อขึ้นต้นด้วย จ มี 2 คน
ตัวอย่าง
SELECT hn, dayin, name, age
FROM pttbl
WHERE name = NULL;
ประโยคคำสั่งข้างบนจะ เลือก แถว/ค่า ในคอลัมน์ hn, dayin, name และ age จาก table “pttbl” ที่มี name เป็นค่าว่าง

SELECT pttbl.hn, pttbl.dayin, pttbl.name, pttbl.age
FROM pttbl
WHERE (((pttbl.name) Is Null));

ตัวอย่าง
SELECT hn, dayin, name, age
FROM pttbl
WHERE name = Is Not Null;
ประโยคคำสั่งข้างบนจะเลือก แถว/ค่า ในคอลัมน์ hn, dayin, name และ age จาก table “pttbl” ที่มี name ไม่ใช่ค่าว่าง

SELECT pttbl.hn, pttbl.dayin, pttbl.name, pttbl.age
FROM pttbl
WHERE (((pttbl.name)Is Not Null));


ALL และ DISTINCT เป็นคีย์เวิร์ดที่ใช้ในการควบคุมเลือกข้อมูลให้แสดง ทั้งหมด (ALL) หรือเฉพาะเรคคอร์ดแบบไม่ซ้ำ (DISTINCT) ในคิวรี่ ถ้าต้องการดึงเฉพาะเรคคอร์ดในคอลัมน์ที่ระบุแบบไม่ซ้ำให้ใช้คีย์เวิร์ด DISTINCT โดย DISTINCT จะคัดเรคคอร์ดซ้ำออกไปสำหรับคอลัมน์ที่ระบุ หลังจากประโยคคำสั่ง
ตัวอย่าง
SELECT DISTINCT age
FROM pttpl;
ประโยคคำสั่งนี้ส่งออกค่า age ที่ไม่ซ้ำกันจาก table “pttbl”
Read more ►

ตัวดำเนินการ Between...And

0 comments
กำหนดว่าจะให้ค่าของนิพจน์มีค่าอยู่ในช่วงค่าที่ระบุหรือไม่ คุณสามารถใช้ตัวดำเนินการนี้ได้ในคำสั่ง SQL (สตริง/คำสั่ง SQL: นิพจน์ที่กำหนดคำสั่ง SQL เช่น SELECT, UPDATEหรือ DELETEและรวมถึงส่วนคำสั่ง เช่น WHERE และ ORDER BY โดยทั่วไปจะใช้สตริง/คำสั่ง SQL ในแบบสอบถามและในฟังก์ชันการรวม)
ไวยากรณ์
expr [Not] Between value1 And value2
ไวยากรณ์ของตัวดำเนินการ Between...And มีส่วนต่างๆ ดังนี้
ส่วน คำอธิบาย
expr นิพจน์ที่ระบุเขตข้อมูลที่มีข้อมูลที่คุณต้องการประเมิน
value1, value2 นิพจน์ที่คุณต้องการใช้ประเมินเปรียบเทียบกับ expr
ข้อสังเกต
ถ้าค่าของ expr อยู่ระหว่าง value1 และ value2 (รวมทุกจำนวนระหว่างกลาง) ตัวดำเนินการ Between...And จะส่งกลับค่า True หรือมิฉะนั้นก็จะส่งกลับค่า False คุณสามารถใส่ตัวดำเนินการแบบตรรกะ Not เพื่อประเมินเงื่อนไขตรงข้ามได้ (ซึ่งก็คือ expr อยู่นอกช่วงที่ถูกกำหนดโดย value1 และ value2 หรือไม่)
คุณอาจใช้ Between...And เพื่อกำหนดว่าค่าของเขตข้อมูลจะอยู่ภายในช่วงตัวเลขที่ระบุหรือไม่ ตัวอย่างต่อไปนี้จะกำหนดว่าใบสั่งซื้อจะถูกส่งมายังตำแหน่งที่ตั้งซึ่งอยู่ ในช่วงรหัสไปรษณีย์หนึ่งหรือไม่ ถ้ารหัสไปรษณีย์อยู่ระหว่าง 98101 กับ 98199 ฟังก์ชัน IIf จะส่งกลับ “Local” หรือมิฉะนั้นจะส่งกลับ “Nonlocal”
SELECT IIf(PostalCode Between 98101 And 98199, “Local”, “Nonlocal”) FROM Publishers
ถ้า expr, value1 หรือ value2 เป็นค่า Null (Null: ค่าที่คุณสามารถป้อนลงในเขตข้อมูลหรือใช้ในนิพจน์หรือแบบสอบถามเพื่อบ่งชี้ ถึงข้อมูลที่หายไปหรือข้อมูลที่ไม่รู้จัก ใน Visual Basic คำสำคัญ Null จะหมายถึงค่า Null โดยบางเขตข้อมูล เช่น เขตข้อมูลคีย์หลักจะไม่สามารถมีค่า Null ได้) แล้ว ตัวดำเนินการ Between...And จะส่งกลับค่า Null
เนื่องจากอักขระตัวแทน (สัญลักษณ์แทน: อักขระที่ใช้ในคำถามและนิพจน์เพื่อรวมระเบียนทั้งหมด ชื่อแฟ้ม หรือรายการอื่นที่เริ่มต้นด้วยอักขระเฉพาะหรืออักขระที่ตรงกับรูปแบบเฉพาะ) เช่น * จะถือว่าเป็นอักขระจริง คุณจึงไม่สามารถใช้กับตัวดำเนินการ Between...And ได้ ตัวอย่างเช่น คุณไม่สามารถใช้ 980* และ 989* เพื่อค้นหารหัสไปรษณีย์ทั้งหมดที่ขึ้นต้นด้วย 980 จนถึง 989 ได้ แต่คุณมีทางเลือกสองทางเพื่อดำเนินการดังกล่าวให้เสร็จสมบูรณ์ คุณสามารถเพิ่มนิพจน์ในแบบสอบถามเพื่อเอาอักขระสามตัวทางซ้ายของเขตข้อมูล ข้อความและใช้ตัวดำเนินการ Between...And กับอักขระเหล่านั้น หรือคุณสามารถเพิ่มอักขระพิเศษในค่าสูงสุดและต่ำสุด ในกรณีนี้คือ 98000 ถึง 98999 หรือ 98000 ถึง 98999 - 9999 ถ้ามีการใช้รหัสไปรษณีย์ส่วนขยาย (คุณต้องละเว้น – 0000 จากค่าต่ำสุดเพราะไม่เช่นนั้น 98000 จะหายไปถ้ารหัสไปรษณีย์บางรหัสมีส่วนขยายและบางรหัสไม่มี)
Read more ►

ตัวดำเนินการ Like

0 comments
เปรียบเทียบนิพจน์ สายอักขระกับรูปแบบในนิพจน์ SQL
ไวยากรณ์
expression Likepattern
ไวยากรณ์ของตัวดำเนิน การ Like มีส่วนต่างๆ เหล่านี้
ส่วน คำอธิบาย
expression นิพจน์ SQL ที่ใช้ในส่วนคำสั่ง WHERE
pattern สายอักขระหรือสายอักขระของตัวอักษร ซึ่ง expression ถูกนำมาเปรียบเทียบด้วย

หมายเหตุ
คุณสามารถใช้ตัวดำเนินการ Like เพื่อหาค่าในเขตข้อมูลหนึ่ง ซึ่งตรงกันกับรูปแบบที่คุณระบุ สำหรับ pattern คุณสามารถระบุค่าที่สมบูรณ์ (เช่น Like “Smith”) หรือคุณสามารถใช้ สัญลักษณ์ ตัวแทน เพื่อหาช่วงของค่าก็ได้ (เช่น Like “Sm*”)
ใน นิพจน์ คุณสามารถใช้ตัวดำเนินการ Like เพื่อเปรียบเทียบค่าของเขตข้อมูลกับนิพจน์สายอักขระได้ ตัวอย่างเช่น ถ้าคุณใส่ Like “C*” ในแบบสอบถาม SQL แบบสอบถามจะส่งกลับค่าของเขตข้อมูลทั้งหมดที่ขึ้นต้นด้วยตัวอักษร C ใน แบบ สอบถามแบบพารามิเตอร์ คุณสามารถพร้อมท์ผู้ใช้เพื่อให้ใส่รูปแบบที่จะใช้ในการค้นหาได้
ตัวอย่าง ต่อไปนี้จะส่งกลับข้อมูลที่ขึ้นต้นด้วยตัวอักษร P ตามด้วยตัวอักษรใดก็ได้ระหว่าง A ถึง F และตัวเลขสามตัว
Like “P[A-F]###”
ตารางต่อไปนี้แสดงวิธีที่คุณสามารถใช้ Like เพื่อทดสอบนิพจน์สำหรับรูปแบบต่างๆ

ลักษณะการเปรียบเทียบ

รูปแบบ
ตรงกัน
(ส่งกลับค่า True)
ไม่ตรงกัน
(ส่งกลับค่า False)
อักขระหลายอักขระ a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
อักขระพิเศษ a[*]a a*a aaa
อักขระหลายอักขระ ab* abcdefg, abc cab, aab
อักขระตัวเดียว a?a aaa, a3a, aBa aBBBa
ตัวเลขตัวเดียว a#a a0a, a1a, a2a aaa, a10a
ช่วงของอักขระ [a-z] f, p, j 2, &
อักขระภายนอกช่วง [!a-z] 9, &, % b, a
ไม่ใช่ตัวเลข [!0-9] A, a, &, ~ 0, 1, 9
หลายแบบร่วมกัน a[!b-m]# An9, az0, a99 abc, aj0
Read more ►

20110605

MsysACEs ,MsysModules,MsysObject มาได้อย่างไรทั้งๆที่ผมไม่ได้สร้าง

0 comments
มีแฟนประจำส่งเมลล์มาหาผม และถามไว้อย่างนี้ครับ

เรียนอาจารย์สุภาพครับ 
ผมได้ส่ง ฐานข้อมูลมาให้อาจารย์ซึงก็เป็นฐานข้อมูลที่ผมได้ดาวน์โหลดมา อยาก จะให้อาจารย์ช่วยดูให้หน่อยครับ ว่าตารางเหล่า นี้ คือ MsysACEs ,MsysModules,MsysObject มาได้อย่างไรทั้งๆที่ผมไม่ได้ สร้าง และมีทุกฐานข้อมูลด้วย ไม่สามารถลบและแก้ไขได้  อาจารย์ช่วยชี้แนะ หน่อยครับ ว่าจะลบและแก้ไขอย่างไร 
ขอบคุณครับ 
ป.ล.อาจารย์ตอบไปที่บอร์ด ก็ได้ครับ 

ไฟล์เหล่านี้เป็นไฟล์ System ของ Access มันครับ และจะสร้างไว้ ใน Database ทุกตัว เพราะมันจะเก็บที่สำคัญ เช่น ชื่อของ Object ต่างที่เรา ได้สร้างขึ้น มันจึงไม่สามารถจะถูกลบออกได้
ถ้าตารางเหล่านี้หาย หรือติดขึ้นจะทำให้เราไม่สามารถจะเปิดเข้าไฟล์นั้นได้เลยครับ 
ฉะนั้นอย่าได้ลบมันนะครับ
ที่เราเห็นไฟล์เหล่านี้ เพราะเราไปกำหนดใน Options ให้มัน แสดง System Objects ครับ ถ้าไม่ต้องการให้รกตา ก็ให้ไปที่ เมนู Tools>Options>View tab>คลิกเครื่องหมายถูกที่ ช่อง System Objects ในส่วนของ Show ออกครับ

ตารางเหล่านี้ บางครั้งผมจะใช้ประโยชน์จากมันด้วย เช่น หาว่ามี Objects ชื่ออะไรบ้าง โดยไม่ต้องอาศัย Documentors เลย
Read more ►

20110525

โปรแกรมแบบ Multi- User

0 comments

โปรแกรมแบบ Multi- User

การออกแบบโปรแกรมเพื่อการประยุกต์ในสภาพแวดล้อมผู้ใช้หลายคนใน Microsoft Access ใช้การแยกระหว่างไฟล์ที่เป็นฐานข้อมูล (ต่อไปเรียกว่าฐานข้อมูล) กับไฟล์ที่เก็บอ๊อบเจค (ต่อไปเรียกว่าโปรแกรมประยุกต์) โดยไฟล์ที่เก็บอ๊อบเจค หรือโปรแกรมประยุกต์ทำหน้าที่เป็นลูกข่าย การสร้างระบบงานลักษณะนี้สามารถประยุกต์การทำงานบน LAN และมีความสะดวกในการแก้ไขโปรแกรมประยุกต์ เนื่องจากสามารถแทนที่โปรแกรมประยุกต์ โดยไม่มีผลกับข้อมูล

การวางระบบโปรแกรมโดยการแยกระหว่างไฟล์ของโปรแกรมกับไฟล์ฐานข้อมูล

การจัดวางระบบโปรแกรม ควรแยกระหว่างฐานข้อมูลและโปรแกรม ทำให้มีความสะดวกในการปรับปรุง โปรแกรม และโดยเฉพาะอย่างยิ่งการจัดวางระบบในกรณีใช้งานแบบผู้ใช้หลายคน (Multiusers) โดยการสร้างฐานข้อมูลเพื่อใช้ในการเก็บ Table และไฟล์ฐานข้อมูลอื่น (ไฟล์โปรแกรม) ใช้เก็บคิวรี่ ฟอร์ม รายงาน มาโคร เพจ และโมดูล และใช้การเชื่อม Table (Link Table) กับไฟล์ฐานข้อมูลที่เก็บ Table
ฐานข้อมูลที่เป็นแบบ Link Table สังเกตได้จากสัญลักษณ์ลูกศรหน้า Table
การแยกระหว่างโปรแกรมกับฐานข้อมูลสามารถทำได้ 2 ลักษณะ คือ
  1. วางแผนการแยกระหว่างโปรแกรมกับฐานข้อมูลตั้งแต่เริ่มต้น
  2. การแยกโปรแกรมกับฐานข้อมูด้วยคำสั่ง Database Splitter

วางแผนการแยกระหว่างโปรแกรมกับฐานข้อมูลตั้งแต่เริ่มต้น

  1. การสร้าง Link Table สร้างโดยการใช้คำสั่ง Link Table ใน Get External Data ของเมนู File
  2. เมื่อไดอะล๊อกบ๊อกซ์ Link ปรากฏขึ้นให้เลือกตำแหน่งของฐานข้อมูล แล้วคลิกปุ่ม Link
  3. จากนั้นจะปรากฏไดอะล๊อกบ๊อกซ์ Link Table ให้เลือกชื่อ Table แล้วคลิกปุ่ม OK
  4. หลังจากนั้น ไอคอน และชื่อ table ที่มีลูกศรนำหน้าจะปรากฏใน แท็บ Table ในโปรแกรมที่สร้างขึ้น
  5. จากนั้นให้ทำการสร้างอ๊อบเจคอื่นสำหรับการประยุกต์
  6. ถ้านำไปใช้งานจริงแล้วมีการเปลี่ยนแปลงตำแหน่งของฐานข้อมูล ซึ่งต่างจากเดิมให้ใช้คำสั่ง Linked Manager เพื่อเปลี่ยนแปลงการชี้ไปยังฐานข้อมูลภายในคำสั่ง Database Utilities ที่เมนู Tools

การแยกโปรแกรมกับฐานข้อมูด้วยคำสั่ง Database Splitter

เมื่อพัฒนาโปรแกรมเสร็จแล้วจึงนำมาแยก ให้ใช้คำสั่ง Database Splitter โดย Microsoft Access 2000 คำสั่ง Database Splitter อยู่ภายในคำสั่ง Database Utilities ที่เมนู Tools (เครื่องมือ) ส่วน Microsoft Access97 คำสั่งนี้อยู่คำสั่ง Add-Ins ที่เมนู Tools จะมี wizard แนะนำขั้นตอนการแยกระหว่างฐานข้อมูลกับโปรแกรมประยุกต์
การแยกฐานข้อมูลต้นฉบับจะได้รับการแปลงเป็นโปรแกรมประยุกต์ และฐานข้อมูลที่เกิดจากการใช้คำสั่ง Database Splitter จะเป็นฐานข้อมูล
Read more ►

การพัฒนาโปรแกรมบน Access

0 comments

การพัฒนาโปรแกรมบน Access

การพัฒนาโปรแกรม เป็นการสร้างและรวบรวมอ๊อบเจคทั้งหมดให้ติดต่อกับผู้ใช้งาน โดยมีขั้นตอนการทำงานที่สอดคล้องกับการใช้งาน ซึ่งประกอบด้วยขั้นตอนสำคัญดังนี้
การวางแบบโครงสร้าง คือ การวิเคราะห์ระบบ แล้วจัดวางระบบสารสนเทศ
การสร้างอ๊อบเจค ให้เลือกฟอร์มที่ใช้ในการเก็บข้อมูลที่มากที่สุด แล้วเริ่มสร้างคิวรี่ ฟอร์ม ให้เรียบร้อย แล้วสร้างส่วนสนับสนุน เช่น มาโคร Event Procedure ต่างๆ
กำหนดการเริ่มโปรแกรม ใช้เมนูคำสั่ง Startup เพื่อกำหนดฟอร์มที่จะเปิด กำหนดแถบเครื่องมือรวมถึงการเจาะจงสภาพแวดล้อมต่างๆ ของโปรแกรม

การวางแบบโครงสร้าง

การวางแบบโครงสร้างเป็นขั้นแรกในการสร้างโปรแกรมต้องมีการเตรียมก่อนงานอื่นๆ
ขั้นที่ 1 กำหนดจุดมุ่งหมายและขอบเขต ขั้นตอนนี้เป็นขั้นตอนพื้นฐานที่สำคัญที่ทำให้การพัฒนาโปรแกรม สอดคล้องกับการใช้งาน ครอบคลุมสารสนเทศ และมีขั้นตอนการทำงานที่ถูกต้อง เช่น การกำหนดจุดมุ่งหมายของโปรแกรมเพื่อการเก็บข้อมูล (ใบสั่งซื้อ) และการค้นหา (สินค้าคงคลัง) ซึ่งสามารถเขียนเป็นผังการไหลของข้อมูล และ ขั้นตอนการทำงาน
ขั้นที่ 2 การวางแบบ Table และความสัมพันธ์ ให้ทำการวิเคราะห์ข้อมูล และจัดแบ่ง Table ที่ใช้เก็บข้อมูล ต่างๆ เนื่องจาก Table เป็นโครงสร้างพื้นฐานที่สำคัญของโปรแกรมฐานข้อมูล ถ้าโครงสร้าง Table ไม่ดีจะทำให้การ สนับสนุนการประมวลผลไม่ดีไปด้วย เช่น ทำให้ออกแบบฟอร์มซับซ้อน การทำงานและการประมวลผลล่าช้า

การสร้างอ๊อบเจค

เมื่อได้กำหนดจุดมุ่งหมายและขอบเขต และทำการวางแบบ Table และความสัมพันธ์แล้ว จะมาถึงขั้นตอน การสร้างอ๊อบเจคต่างๆ ที่ใช้ในโปรแกรม
ขั้นที่ 1 สร้าง Table และป้อนข้อมูลตัวอย่างจำนวนหนึ่งในแต่ละ Table จะเป็นการช่วยให้มองเห็นผลลัพธ์ เมื่อมีการสร้างฟอร์มและรายงาน
ขั้นที่ 2 สร้างคิวรี่ของฟอร์ม เมื่อเริ่มสร้างครั้งแรก ควรเลือกฟอร์มที่ครอบคลุมการเก็บข้อมูลที่มากที่สุดของ โปรแกรม โดยการกำหนดข้อมูลที่ใช้ในฟอร์ม แล้วสร้างคิวรี่ขึ้นมา ในการสร้างคิวรี่นี้จะเป็นการทดสอบโครงสร้างของข้อมูล เพราะทำให้เห็นความสามารถในการจัดการข้อมูลของ Table
ขั้นที่ 3 สร้างฟอร์มที่ใช้คิวรี่ที่สร้างขึ้นเป็นแหล่งข้อมูล ในการสร้างฟอร์มควรใช้ Form Wizard
ขั้นที่ 4 เพิ่มส่วนต่างๆ เพื่อสนับสนุนการทำงานของฟอร์ม เช่น การสร้างมาโคร Event Procedure ปุ่มคำสั่ง
ขั้นที่ 5 ทดสอบฟอร์ม เพื่อทำให้ทราบว่า ฟอร์มที่สร้างขึ้นสามารถแสดงผลตามที่ต้องการหรือไม่
ขั้นที่ 6 สร้างฟอร์ม และรายงานอื่นๆ หลังจากสร้างฟอร์มแรกเสร็จแล้ว รวมถึงส่วนประกอบต่างๆจนกระทั่งได้ฟอร์มที่ทำงานได้ตามความต้องการ แล้วให้สร้างอ๊อบเจคชุดอื่นๆ ต่อไป

การควบคุมการเริ่มโปรแกรม

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

Application Title: ชื่อโปรแกรมประยุกต์ซึ่งจะปรากฎที่แถบไตเติลบน window ของ Microsoft Access
Application Icon: ไอคอนที่ปรากฏที่แถบไตเติลบน window ให้ระบุพาร์ทที่เก็บไอคอน
Menu Bar: ถ้ามีการสร้างแถบเมนู global เองสามารถเลือกมาใช้ในโปรแกรม
Display Form: ชื่อฟอร์มแรกที่เปิดขึ้นมาเมื่อเปิดโปรแกรม
Display Database Windows: ถ้าต้องการซ่อนฐานข้อมูลการยกเลิกการเลือกที่ check box
Display Status Bar: กำหนดการแสดงแถบสถานะ
Shortcut Menu Bar: ถ้ามีการสร้างเมนู Shortcut สามารถเลือกมาใช้ในโปรแกรม
Allow Full Menus: ยอมให้ใช้เมนู built-in แบบเต็มปรากฏบนหน้าจอ
Allow Default Shortcut Menus: ยอมให้ใช้เมนู Shortcut แบบ built-in
Allow Built-in Toolbars: ยอมให้แถบเครื่องมือ built-in ปรากฏบนหน้าจอ
Allow Toolbars/Menu Changes: ยอมให้มีการเปลี่ยนแถบเมนูและแถบเครื่องมือของ Microsoft Access เปลี่ยนแปลงตามประเภทของ view

ควบคุมการปิดฟอร์ม

ตามปกติถ้ามีการซ่อน window เพื่อไม่ให้ผู้ใช้ทั่วไปเข้าถึงโปรแกรม อาจจะมีปัญหาจากการปิดฟอร์มด้วยการคลิกปุ่ม Close บนแถบไตเติลของฟอร์ม จะเป็นการปิดฟอร์ม แต่ฐานข้อมูลยังคงเปิดอยู่ ถ้ามีการเปิดโปรแกรมจากรายชื่อไฟล์ที่เคยเปิดบนเมนู File จะเป็นการเปิด Database window ทำให้สูญเสียวัตถุประสงค์ในการซ่อนโปรแกรม
การแก้ไขทำได้ 2 วิธี คือ
1. ซ่อนปุ่ม Close ด้วยกำหนดคุณสมบัติ Close Button ของฟอร์ม เป็น No เพื่อไม่ให้ใช้ปุ่มนี้
หรือ
2. ควบคุมด้วย Form_Unload event procedure เช่น ให้เปิดฟอร์มต่อไป
ตัวอย่างคำสั่งเมื่อปิดฟอร์มแล้วให้ไปที่ฟอร์ม Orders
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo Form_Unload_Handler
DoCmd.OpenForm "Orders", acNormal
Form_Unload_Exit:
Exit Sub
Form_Unload_Handler:
MsgBox Err.Description
Resume Form_Unload_Exit
End Sub
ใน Form_Unload ให้ระบุเฉพาะฟอร์ม (หรือการทำงานต่อไป) แต่ไม่ต้องระบุการปิดฟอร์มปัจจุบัน เพราะ event นี้กำลังปิดฟอร์มปัจจุบัน ถ้ามีการกำหนดคำสั่งปิดฟอร์มปัจจุบัน จะเกิดความผิดพลาด
Read more ►

Toolbox

0 comments

Toolbox

Toolbox เป็นเครื่องมือในการสร้างตัว Control ในฟอร์ม และรายงาน
  • การเปิดแถบเครื่องมือ Toolbox ทำได้โดยการเปิดด้าน Design view แล้วเลือกคำสั่ง Toolbox จากเมนู View (เลือกคำสั่ง View + Toolbox) หรือคลิกที่ปุ่ม บนแถบเครื่องมือ
  • การเลือกตัว Control ให้คลิกที่ปุ่มตัวเลือก จากนั้นจึงไปเลือกเครื่องมือที่ต้องการมาใช้งาน โดยการคลิกที่ปุ่มเครื่องมือที่ต้องการ แล้วนำไปวางลงบนฟอร์มในตำแหน่งที่ต้องการ ในการสร้างตัว Control ควรคลิกปุ่ม Wizard ด้วยเพื่อสามารถใช้ Wizard สำหรับที่ตัว Control มี Wizard เช่น Combo box เนื่องจากตัว Control บางตัวต้องมีการกำหนดค่าที่ซับซ้อน
ตัวเลือก คลิกเพื่อไปใช้เลือกตัว Control
Wizard คลิกเพื่อสามารถใช้ Wizard สร้างตัว Control ควรเลือกไว้เสมอ
Label ใช้ในการทำชื่อหรือข้อความ
การป้อนข้อความสามารถโดยตรงบนตัว control หรือที่คุณสมบัติ Caption
Textbox ใช้ในการสร้างตัว Control เพื่อแสดงค่าของฟิลด์ หรือการคำนวณด้วย นิพจน์
ถ้าติดต่อกับฐานข้อมูลสามารถเลือกฟิลด์ของ table หรือ คิวรี่ที่คุณสมบัติ ControlSource
กำหนดรูปแบบกำหนดที่คุณสมบัติ Format
Option group (ตัวเลือกแบบ กลุ่ม) ตัวเลือกชนิดที่มีค่าเลือกได้หลายค่าและส่งข้อมูลเป็น Number
Toggle button (ปุ่มสลับ) ตัวเลือกที่ใช้กับประเภทข้อมูล Yes/No
Option button (ปุ่มตัวเลือก) ตัวเลือกที่ใช้กับประเภทข้อมูล Yes/No
Check button (ปุ่มแบบเช็ค) ตัวเลือกที่ใช้กับประเภทข้อมูล Yes/No
Combo Box ตัว Control แบบให้เลือกค่าจากรายการ สามารถแหล่งข้อมูลจากคุณสมบัติ RowType และ RowSource
เลือกเก็บค่าเข้าสู่ table หรือคิวรี่ของฟอร์มที่คุณสมบัติ BoundColumn
กำหนดการแสดงคอลัมน์ด้วยคุณสมบัติ ColumnCount
ความกว้างคอลัมน์ ด้วยคุณสมบัติ ColumnWidth ตัวอย่าง
BoundColumn: 2
ColumnCount:3
ColumnWidth: 0.5";1";1"
หมายถึงเก็บค่าของคอลัมน์ที่ 2 และแสดง 3 คอลัมน์ โดยคอลัมน์ที่ 1 กว้าง 0.5 นิ้ว, คอลัมน์ที่ 2 กว้าง 1 นิ้ว และคอลัมน์ที่ 3 กว้าง 1 นิ้ว
List box ตัว Control แบบให้เลือกค่าจากรายการ
กำหนดค่าคุณสมบัติ เหมือน Combo box
Command button (ปุ่มคำสั่ง) ใช้งานร่วมกับมาโคร หรือ Procedure ของ Visual Basic ในการทำงาน
Image (ภาพ) เป็นกรอบสำหรับแสดงอ๊อบเจคที่เป็นรูปภาพ
Unbound object frame(กรอบอ๊อบเจคแบบ Unbound) ป็นกรอบสำหรับแสดงอ๊อบเจคแบบ OLE ที่ไม่มีฟิลด์เป็นแหล่งข้อมูล
Bound object frame (กรอบอ๊อบเจคแบบ Bound) เป็นกรอบสำหรับแสดงอ๊อบเจคแบบ OLE ที่มีฟิลด์เป็นแหล่งข้อมูล
Page break (ตัวแบ่งหน้า) ใช้กำหนดตำแหน่งที่เป็นหน้าใหม่ของฟอร์ม
Tab control การแบ่งฟอร์มแบบด้วย Tab
Subform/subreport (ฟอร์มย่อย/รายงานย่อย) เป็นตัว Control สำหรับเพิ่มฟอร์มเข้าไปในฟอร์มหลัก หรือ รายงาน เข้าไปในรายงานหลัก
การกำหนดอ๊อบเจคใช้คุณสมบัติ SourceObject
การเชื่อมกับฟอร์มหลัก หรือรายงานหลัก ใช้การกำหนดฟิลด์ที่คุณสมบัติ Link Child Field (กำหนดฟิลด์เชื่อมของฟอร์มลูกหรือรายงานลูก) และคุณสมบัติ Link Master Field (กำหนดฟิลด์เชื่อมของฟอร์มลูกหรือรายงานหลัก)
เส้น ใช้ตีเส้นในฟอร์ม
สี่เหลี่ยม ใช้สำหรับสร้างกรอบสี่เหลี่ยมในฟอร์ม
Tool Box อื่นๆ ใช้เปิดรายการของ Tool อื่นๆ
Read more ►

ฟอร์มหลักและฟอร์มย่อย

0 comments

ฟอร์มหลักและฟอร์มย่อย

ฟอร์มหลักและฟอร์มย่อย เป็นการประยุกต์ที่สำคัญในการทำงานกับข้อมูลที่เกี่ยวข้อง แต่มีแหล่งข้อมูลคนละแหล่ง ซึ่งใช้ประโยชน์ในการป้อนข้อมูล การแสดงผล และการวิเคราะห์

สิ่งที่สำคัญในการเชื่อมฟอร์มย่อย คือ การเลือกฟิลด์เชื่อมจากฟอร์มย่อยที่ Link Child Field และฟิลด์เชื่อมของฟอร์มหลักที่ Link Master Field

การสร้าง ฟอร์มหลักและฟอร์มย่อย สามารถสร้างได้สะดวกด้วยการ Wizards ของการสร้าง subform จาก Toolbox

นิพจน์ (Expression)

นิพจน์ ใช้การแสดงผลการคำนวณด้วยการเขียนภายในตัว Control แบบคำนวณค่า ถ้าวางตัว Control คำนวณที่ฟอร์มส่วนล่าง จะสามารถใช้ในการหาค่าผลรวมของกลุ่มเรคคอร์ดที่อยู่ภายในฟอร์ม โดยการสร้าง นิพจน์สามารถป้อนสูตรคำนวณโดยตรงที่ตัว Control หรือ ที่คุณสมบัติ Control Source ในตารางคุณสมบัติ โดยต้องมีขึ้นเครื่องหมายเท่ากับ (=) และการอ้างถึงฟิลด์หรือตัว Control ต้องอยู่ในวงเล็บสี่เหลี่ยม [ ] เช่น
=[Subtotal]+[Friengt]
หรือสร้างด้วย Expression Builder โดยคลิกที่ตัว Control จากนั้น เรียกใช้ Expression Builder
Read more ►

การออกแบบฟอร์ม

0 comments

การออกแบบฟอร์ม

การออกแบบฟอร์ม ต้องคำนึงถึงตัว Control และคุณลักษณะของฟอร์มในการประยุกต์ที่สอดคล้องกับขั้นตอนการทำงานของผู้ใช้
ตัว Control เป็นองค์ประกอบพื้นฐานในการแสดงผลข้อมูลของฟอร์มคล้ายกับฟิลด์ใน Table แต่มีขอบเขตบาง ประการที่ต่างกัน โดยแบ่งเป็น 3 ชนิด คือ
  1. ตัว Control แบบ Bound เป็นตัว Control ที่มีฟิลด์จาก Table หรือคิวรี่เป็นแหล่งข้อมูล
  2. ตัว Control แบบ Unbound เป็นตัว Control ที่ไม่มีแหล่งข้อมูล แต่จะดึงค่าของฟิลด์มาใช้
  3. ตัว Control แบบ คำนวณ เป็นตัว Control ที่สร้างจากนิพจน์

ส่วน (Section)

ส่วน (Section) เป็นส่วนประกอบพื้นฐานของฟอร์มในการใช้งาน
  • ฟอร์มส่วนหัวและส่วนล่าง (Form Header/Footer) จะปรากฏบนจอภาพตลอดเวลา ดังนั้นมักจะใช้แสดงชื่อของฟอร์ม ปุ่มคำสั่ง และการหาผลรวมของกลุ่มเรคคอร์ดภายในฟอร์ม เช่น ผลรวมของเรคคอร์ดของฟอร์มย่อยในฟอร์มหลัก หรือผลรวมของเรคคอร์ดทั้งหมดแบบฟอร์มต่อเนื่อง
  • ส่วนรายละเอียด (Detail) ใช้แสดงข้อมูลแต่ละเรคคอร์ด
  • หน้าส่วนหัวและส่วนล่าง (Page Header/Footer) ไม่ปรากฏบนจอภาพ แต่จะปรากฏเมื่อมีการสั่งพิมพ์ ทาง Printer หรือการ Preview เท่านั้น จึงใช้เป็นหัวกระดาษเมื่อมีการสั่งพิมพ์

การกำหนดคุณสมบัติ

การกำหนดคุณสมบัติเป็นแนวคิดแบบ Object oriented programming โดยสามารถกำหนดค่าคุณสมบัติให้กับตัว Control และฟอร์มได้ ในกรณีตัว Control จะมีค่าคุณสมบัติเริ่มต้นจากฟิลด์ ในการแสดงค่า แต่สามารถกำหนดเป็นค่าเฉพาะภายในฟอร์มให้เหมาะสมกับการใช้งาน โดยมีกลุ่มคุณสมบัติ ดังนี้
  1. กำหนดลักษณะข้อมูล และควบคุมค่าที่ป้อน
  2. เป็นการใช้ Event ควบคุมโดยทำงานร่วมกันมาโคร หรือ Sub Procedure เช่น เมื่อมีการป้อนค่าแล้ว
  3. กำหนดรูปแบบการแสดงผล เช่น จำนวนทศนิยม ตัวอักษร รูปแบบต่างๆ
  4. กำหนดค่าคุณสมบัติอื่นๆ เช่น ชื่อตัว Control ข้อความที่แถบบอกสถานะ

การเจาะจงฟอร์ม

การเจาะจงฟอร์ม เป็นการควบคุมการป้อนข้อมูล การดูข้อมูลที่ต้องการ และการอำนวยความสะดวกในการทำงาน ซึ่งส่วนที่สำคัญดังนี้
1. ป้องกันความผิดพลาดในการป้อนข้อมูล มีเครื่องมือคือ Combo Box และ List Box โดยที่ Combo Box หรือ List box เป็นการแสดงรายการข้อมูลสำหรับการเลือก
วิธีการสร้างรายการของ Combo Box
  • สร้างรายการจากฟิลด์ใน Table หรือคิวรี่
  • สร้างรายการโดยใช้คำสั่ง SELECT ของภาษา SQL
  • สร้างรายการโดยใช้ฟังก์ชัน ของ Visual Basic
  • สร้างรายการโดยการกำหนดค่า (Value List)
2. การอำนวยความสะดวกในการทำงาน สามารถสร้างปุ่มคำสั่งที่ทำงานร่วมกับ Event เช่น การคลิกปุ่มคำสั่งเปิดฟอร์มเพื่อ แสดงข้อมูลที่เกี่ยวข้อง หรือการพิมพ์รายงาน เป็นต้น
Read more ►

ประเภทของฟอร์ม

0 comments

ประเภทของฟอร์ม

  1. ฟอร์มเดี่ยวหรือแบบคอลัมน์ใช้แสดงหน้าละ 1 เรคคอร์ด และสามารถสร้างปุ่มคำสั่งบนฟอร์ม
  2. ฟอร์มต่อเนื่องหรือแบบแถวใช้แสดงได้หลายเรคคอร์ดต่อ 1 หน้า และสามารถสร้างปุ่มคำสั่งบนฟอร์ม
  3. ฟอร์มแบบตารางข้อมูลใช้แสดงได้หลายเรคคอร์ดต่อ 1 หน้า มีความสะดวกในการใช้ร่วมกับคีย์บอร์ด แต่ไม่สามารถสร้างปุ่มคำสั่งบนฟอร์ม

รูปแบบฟอร์มตาม Wizards

1. AutoForm: Columnar เป็น Wizards สร้างฟอร์มแบบคอลัมน์ (Column form หรือ Single Column form) แสดงข้อมูล 1 เรคคอร์ดต่อ 1 หน้า

2. AutoForm: Tubular เป็น Wizard สร้างฟอร์มแบบแถว (Rows Form) แสดงข้อมูลแบบหลายเรคคอร์ด

3. AutoForm: Datasheet เป็น Wizards สร้างฟอร์มแบบตารางข้อมูล (Datasheet Form) แสดงข้อมูลแบบหลายเรคคอร์ด

4. Chart Wizads เป็น Wizard สร้างฟอร์มแบบกราฟ เป็นการนำกราฟมาแสดงบนฟอร์ม

5. Pivot Table Wizards เป็น Wizard สร้าง ฟอร์มแบบ Pivot Table เป็นแสดงข้อมูลในลักษณะของตารางข้อมูลแบบ Excel
Read more ►

ฟอร์ม

0 comments

ฟอร์ม

ฟอร์ม (Form) เป็นอ๊อบเจคที่ใช้ติดต่อกับผู้ใช้ทางจอภาพ ซึ่งกำหนดหน้าที่ได้ทั้งการป้อนและการแสดงผลข้อมูล ในการป้อนข้อมูลด้วยฟอร์ม มีเครื่องมือสนับสนุน และควบคุมการป้อนข้อมูล เช่น Combo Box ค่าคุณสมบัติต่างๆ ซึ่งฟอร์มใช้แหล่งของข้อมูลจาก Table หรือคิวรี่

การสร้างฟอร์ม

การสร้างฟอร์ม มีสิ่งที่ต้องคำนึง คือ
  • การเลือก Table หรือคิวรี่เป็นแหล่งข้อมูล
  • ชนิดของฟอร์มที่เหมาะสมกับการใช้งาน เช่น การใช้ฟอร์มหลักและฟอร์มย่อย ซึ่งฟอร์มหลักต้องเป็นฟอร์มเดี่ยวเสมอ

วิธีการสร้างฟอร์ม

ที่ Database Windows คลิกที่ฟอร์มภายใต้อ๊อบเจคแล้ว เลือกปุ่ม New ที่ Database Windows หรือเลือกปุ่ม Form ที่เมนู Insert แล้วเลือกแหล่งข้อมูลโดยกำหนด Table และคิวรี่ ที่ dialog box ของ New Form จากนั้นเลือกวิธีการสร้าง
  1. การสร้างฟอร์มด้วย Form Wizard
  2. การสร้างฟอร์มด้วย Auto Form
  3. การสร้างฟอร์มด้วย Design View
ซึ่งวิธีที่สะดวกในการสร้างฟอร์ม คือ การสร้างด้วย Wizard แล้วปรับปรุงฟอร์มให้มีสารสนเทศตามที่ต้องการ
Read more ►

การสร้างฟอร์มย่อยหลายๆตัวบนฟอร์มหลัก

0 comments
มือใหม่อ่ะครับ แบบว่าทำตามในหนังสือเรียน เขาให้สร้างฟอร์มหลักกับอีกหนึ่งฟอร์มย่อยตามรูปนะครับ


จากนั้นให้สร้างฟอร์มย่อยขึ้นมาอีกตัว แต่รอบนี้สร้างโดยไม่ใช้ Subform Wizard นะครับ เพราะว่าต้องการกำหนดรูปแบบเอง จากนั้นให้นำเท็กซ์บ็อกซ์มาวางบนฟอร์มที่สร้างใหม่นี้ แต่ผมลองสร้างดูแล้วมันเป็นแบบในรูปครับ


Thanks: ฝากรูปฟรี ประกันภัยรถยนต์ราคาตัวแทน

คือมันเป็นช่องสีขาวๆ เอาเท็กซ์บ็อกซ์ไปวางมันก็ลงไปอยู่ด้านหลังหมดเลย ในหนังสือเรียนก็ดันไม่อธิบายเอาไว้ด้วยว่าต้องทำยังไงกับฟอร์มตัวนี้ก่อน ถึงจะใช้งานได้



รบกวนด้วยนะครับ
-------------------------------------------------------------------------------------------
- ลบ sub form ตัวนี้ออกก่อน (child11)
- ไปสร้างฟอร์มเปล่าๆ ข้างนอกมาใหม่ 1 ตัว (ไม่ใช้วิซาร์ด ไม่ใช้แหล่งข้อมูล ไม่ต้องวางคอนโทรลใดๆ เซฟเลยครับ ชื่ออะไรก็ได้)
- กลับมาที่ฟอร์มเดิม ไปลากฟอร์มที่เพิ่งสร้างมาวางแทน child11 แล้วลุยต่อโลดครับ
Read more ►

20110428

การสร้าง ตาราง ในฐานข้อมูล MySQL ด้วย Navicat 8.0

0 comments
การสร้าง ตาราง ในฐานข้อมูล MySQL ด้วย Navicat 8.0
ขั้นตอนดำเนินการ
1. เปิดหน้าต่าง [Table Design]
2. สร้างฟิลด์ที่ต้องการ
3. บันทึก
1.เปิดหน้าต่าง [Table design]

หลังจากเปิดโปรแกรม Navicat ขึ้นมา ให้กระทำการดังนี้
- ดับเบิลคลิก ที่ตัว Connection ที่ต้องการ เพื่อเชื่อมต่อเข้าสู่ MySQL ถ้าหากมีข้อสงสัยเกี่ยวกับการสร้าง Connection ให้อ่านจากบทความ การใช้ Navicat 8.0 จัดการฐานข้อมูล MySQL บน localhost
- ดับเบิลคลิก ฐานข้อมูล ที่ต้องการ เพื่อเปิดใช้งาน ฐานข้อมูล
- คลิกขวา ตรงคำว่า Tables เพื่อเรียกใช้งานเมนูลัด
- คลิก ตรงคำว่า New Table เพื่อเรียกหน้าต่าง [Table design] ( หน้าต่าง ออกแบบตาราง )
2.สร้างฟิลด์ที่ต้องการ

Name กำหนดชื่อฟิลด์
Type กำหนดชนิดฟิลด์
Length กำหนดขนาดฟิลด์
Decimals กำหนดจำนวนหลักตัวเลข หลังจุดทศนิยม ( กรณีที่เลือกฟิลด์เป็นชนิดตัวเลขทศนิยมเท่านั้น)
Allow Null ติ๊กถูก อนุญาติให้ฟิลด์นี้เป็นค่าว่างได้ ไม่ติ๊กก็เท่ากับตรงข้าม
ว่าง กำหนดฟิลด์เป็น ไพรมารีคีย์

สำหรับทูลบาร์ 3 ไอค่อนนี้
Add Field เพิ่มฟิลด์ใหม่ต่อท้ายฟิลด์ปัจจุบัน
Insert Field เพิ่มฟิลด์ใหม่เข้าไปก่อนหน้าฟิลด์ปัจจุบัน
Delete Field ลบฟิลด์ปัจจุบัน
*** ฟิลด์ปัจจุบัน ( ฟิลด์ที่ทำงานอยู่ ) คือฟิลด์ที่มีสัญลักษณ์ อยู่ด้านหน้า
3.บันทึก หลังจากกำหนดฟิลด์ต่างๆ พร้อมรายละเอียด ตามที่ต้องการเรียบร้อยแล้ว กดปุ่ม บันทึก โปรแกรมจะแสดงไดอะล็อก ให้ป้อน ชื่อตาราง

- Enter talbe name ป้อนชื่อตาราง
- กดปุ่ม OK
- ปิดหน้าต่าง [Table Design]
Read more ►
 

Copyright © Access เบื้องต้น Design by Gu