วันพุธที่ 31 กรกฎาคม พ.ศ. 2556

Is Null และ ช่องว่าง ใน Access VBA

วันนี้ปวดหัวอยู่ตั้งนาน เพราะเรื่อง Is Null และ ช่องว่าง หรือ ข้อความว่างเปล่า ใน Access นั่นเอง

เรื่องก็คือว่า มีข้อมูลในตาราง ที่กำหนดชนิดข้อมูลเป็น Text ตั้งค่าเริ่มต้นให้เป็นว่าง หรือ "" ในตารางมีข้อมูลอยู่แล้ว และได้ลบข้อมูลออกทิ้งไป ต่อมาต้องการสร้างเงื่อนไขใน Query ให้แสดงข้อมูลในฟิลด์นี้ โดยกำหนดเงื่อนไข ดังนี้
 
ผลปรากฎว่า ไม่มีอะไรออกมาให้เห็นเลย ทั้ง ๆ ที่ก็เห็น ๆ อยู่ว่า เคยมีข้อมูลอยู่ และลบไปแล้ว ตอนนี้ไม่มีอะไรแล้ว

ทำไปทำมา ก็ได้ข้อสรุปว่า ข้อมูลชนิด Text ที่ลบไปแล้วเมื่อสักครู่ ปัจจุบัน กลายเป็น Null เลยทดสอบ เปลี่ยนเงื่อนไขใหม่ เป็น
คราวนี้ ปรากฏว่า มีข้อมูลใน Record ที่ลบฟิลด์ isPass ไปแล้ว มาแสดงให้เห็น

แต่ปัญหาก็คือ มีฟิลด์ isPass ใน Record อื่น ที่มีค่าเป็น "" หรือข้อความว่าง เมื่อกำหนดเงื่อนไขเป็น Is Null ข้อมูลใน Record ที่มีข้อความว่าง ก็จะไม่ปรากฏ เพราะไม่เป็นไปตามเงื่อนไข

ทางแก้ก็คือ ต้่องใช้ฟังก์ชัน Nz() มาช่วย โดยสร้างฟิลด์ใหม่ แปลงข้อมูลที่เป็น Null ให้เป็นข้อความว่าง หรือ "" เสียก่อน แล้วจึงกำหนดเงื่อนไขเป็น ข้อความว่าง หรือ "" ดังนี้

คราวนี้ ทั้งพวกที่เป็น Null และ "" หรือข้อความว่าง ก็มาปรากฏให้เห็นกันพร้อมหน้า

ถ้าจะนำไปใช้ใน VBA แสดงโค้ด ดังนี้

SELECT nameFromAppForm.fname, nameFromAppForm.isPass, Nz([ispass],"") AS newIsPass
FROM nameFromAppForm
WHERE (((Nz([ispass],""))=""));

ผมชอบสร้าง Query แล้วนำไปใช้ในโค้ด ประหยัดเวลา และความคิดได้มาก โดยใช้ คำสั่ง Execute ให้ทำงาน เช่น

strSQL = "UPDATE nameFromAppForm INNER JOIN " & _
"tblTempData ON nameFromAppForm.fullname = " & _
"tblTempData.fullname SET nameFromAppForm.isPrePostScore = " & _
"[tblTempData].[isFinishAll];"

CurrentDb.Execute strSQL

วิธี แก้อาการหลงๆ ลืมๆ

วิธี แก้อาการหลงๆ ลืมๆ
 
บางครั้งคนเราทำงานหนักมากเกินไป หรือายุที่เพิ่มมากขึ้น อาจทำให้หลงๆ ลืมๆ กันไปบ้าง แล้วมีวิธีอะไรบ้างที่จะช่วยทำให้บรรเทาอาการเหล่านี้ ยกตัวอย่างง่ายๆ 4 วิธี ที่คุณสามารถทำได้ตั้งแต่วันนี้เลย
 
วิธีแรกโฟกัสสายตา โดยวิธีการคือ ให้ฝึกนั่งจ้องวัตถุ หรือ เหตุการณ์ตรงหน้า จดจำรายละเอียดให้มากที่สุด นานประมาณ 3 นาที จากนั้น ละสายตา แล้ววาดสิ่งที่เห็นบนกระดาษ เมื่อเสร็จตรวจดูว่ามีสิ่งใดตกหล่นไปหรือไม่ ฝึกสม่ำเสมอจะช่วยพัฒนาความจำระยะสั้น บริหารสมอง และเสริมประสิทธิภาพความจำด้านสายตา เช่น เอาสิ่งของมาซัก10 ชิ้น แล้วห่อผ้าไว้ แล้วเปิดออกมาซัก10 วินาที แล้วพูดหรือเขียนออกมา
 
วิธีที่ 2 รับประทานอาหารที่ช่วยในเรื่องความจำ แนะนำให้เป็นอาหารที่อุดมวิตามินซี, อี และเบต้าแคโรทีน โดยเฉพาะส้ม องุ่น เบอร์รี ผักสีเขียว ช่วยปกป้องเนื้อเยื่อสมองจากอนุมูลอิสระ ซึ่งเป็นสาเหตุให้เซลล์สมองเสื่อม ทั้งนี้ ผลวิจัยในต่างประเทศพบว่า ผู้บริโภควิตามินซีสูง มีผลการทดสอบด้านสมาธิ ความจำ และการคำนวณดีที่สุดด้วย
 
วิธีที่ 3 การทำกิจกรรมที่ช่วยให้เรามีทักษะใหม่ๆ อยู่เสมอ เช่นกิจกรรมที่ท้าทายความคิด เมื่ออายุเริ่มเข้าเลขสาม สมองจะเริ่มทำงานช้าลง ดังนั้น ควรหางานอดิเรกยามว่างที่สนุกสนานทำ เช่น เต้นแทงโก้ เรียนภาษาใหม่ ต่อจิ๊กซอว์ เกมส์ปริศนาอักษรไขว้ เล่นปิงปอง เป็นต้น ช่วยพัฒนากระบวนการเรียนรู้ของสมอง และความจำได้ดี
 
วิธีสุดท้าย คือการนอนหลับพักผ่อนให้ เพียงพอ และกินอาหารให้ครบ 5 หมู่ เวลาในการนอนอย่างน้อยวันละ 7-8 ชั่วโมง ช่วยเพิ่มประสิทธิภาพการทำงานของสมอง เซลล์ประสาทจะสื่อสารกันได้มากขึ้น ส่งผลต่อการเรียนรู้ และความจำ และรับประทานอาหารที่เป็นประโยชน์ต่อร่างกายและสมอง
 
ขอขอบคุณ อาจารย์วิไลพรรณ สมตระกูล ที่ Forward มาให้
 
แหล่งที่มา โดย ASTVผู้จัดการรายวัน 26 มิถุนายน 2556 22:21 น.
 
 
 

วันอังคารที่ 30 กรกฎาคม พ.ศ. 2556

การสร้างตารางด้วย Access VBA

วันก่อน สร้าง Query เพื่อปรับข้อมูลในตาราง โดยสร้าง Query ให้หาผู้เรียนปัจจุบันที่เรียนจบ และนำข้อมูลไปปรับในตารางผู้เรียน ปรากฏว่า ไม่สำเร็จ เพราะมี Error ว่า Operation must use updateable query
ลองหาข้อมูลดู ก็พบว่า Update Query ก็มีข้อจำกัดอยู่เหมือนกัน ใช้ไม่ได้ทุกเรื่อง เช่น ฟิลด์ที่มีการคำนวณ หรือที่มาจาก Cross Tab ไม่สามารถใช้ Update Query ได้ เพราะมีการคำนวณเหมือนกัน  บังเอิญ Query ของผมเอามาจาก Cross Tab จึงทำให้มีปัญหา ทางออกของผมจึงนำเอาผลที่ได้ไปไว้ในตารางที่สร้างด้วยโค้ด VBA เป็นการสร้างตาราง On the fly ความจริงใช้ Query สร้างตารางแล้วเรียกใช้งานก็ได้ แต่ผมว่า ใช้โค้ด VBA สร้างตารางดีกว่า มีคนบอกว่า น่าจะใช้โค้ด VBA มากกว่าการใช้ Query เพราะ Query ปรับ เปลี่ยน ลบ ได้ ทำให้มีโอกาสการเปลี่ยนแปลงจากต้นฉบับเดิมได้สูง
 
ผมสร้างตารางชั่วคราว และเอาข้อมูลในตารางนี้ไปปรับข้อมูลในอีกตารางหนึ่ง ไม่มีปัญหา ปรับได้เรียบร้อยดี
 
โค้ด VBA สำหรับการสร้างตาราง มีดังนี้
 
Private Sub TestTemp()
   On Error GoTo ErrorHandler
   Dim strSQL as String
   Dim strTable as String
   strTable = "tblTempTest"
   'ลบตารางเก่าออกก่อน ถ้ามี เพื่อให้ได้ตารางใหม่ที่บริสุทธิ์
   DoCmd.DeleteObject  acTable, strTable
   'สร้างตารางใหม่ด้วยคำสั่ง select into
   strSQL = "Select fullName INTO " & strTable & " FROM " &_
  "qryApprove_Final "
   'คำสั่งให้ดำเนินการตามที่กำหนด
   Currentdb.Execute strSQL
   'คำสั่งสำหรับการปรับข้อมูลในอีกตารางหนึ่ง
   strSQL = "UPDATE tblTempNames INNER JOIN " &_
   "nameFromAppForm ON tblTempNames.fullname = " &_
   "nameFromAppForm.fullname SET " &_
    "nameFromAppForm.approved = Date();"
    CurrentDb.Execute strSQL
    MsgBox "ปรับข้อมูลเรียบร้อบแล้ว " & Date, vbOKOnly, "Social Media"

Exit Sub
ErrorHandler:
IF Err.Number = 7874 Then
Resume Next
End If
End Sub
 
ถ้าต้องการเปลี่ยนแปลงโครงสร้างตารางที่สร้างขึ้น เช่น เปลี่ยน Primary Key เปลี่ยนชนิดข้อมูล สร้างฟิลด์ใหม่ ให้ใช้คำสั่ง ALTER เช่น
 
strSQL = "ALTER TABLE " & strTable & " ADD CONSTRAINT KeyName PRIMARY KEY(ID)"
strSQL = "ALTER " & strTable & " ADD COLUMN TotalDollars Currency"
 
strSQL = "ALTER " & strTable & " ALTER COLUMN TotalDollars Currency"
 
ถ้าต้องการสร้าง Query สำหรับ Update ข้อมูลในตารางหนึ่ง โดยใช้ข้อมูลจากอีกตารางหนึ่ง ทำดังนี้
 
  1. สร้าง Select Query และนำเข้าตารางทั้งสอง
  2. สร้างความสัมพันธ์ระหว่างสองตาราง
  3. เปลี่ยน Select Query เป็น Update Query โดยไปที่แถบออกแบบ ชนิดแบบสอบถาม เลือก Update
  4. กำหนดฟิลด์ที่จะเปลี่ยนแปลง ดังภาพ
  5. คลิกปุ่มเรียกใช้ Query นี้จะทำงาน ข้อมูลจะปรับตามที่กำหนด
 
อ้างอิง


วันอาทิตย์ที่ 28 กรกฎาคม พ.ศ. 2556

เลขไทยบนรายงาน ของ MS Access

ในการทำงานกับ Microsoft Access บ่อยครั้งที่เราต้องใช้เลขไทย เช่น การพิมพ์เลขที่วุฒิบัตร จำเป็นต้องใช้เลขไทย เช่น

เลขไทยที่เห็น ใช้ฟังก์ชัน Access ที่เขียนขึ้น เพื่อให้แสดงเลขไทย ฟังก์มีดังนี้

Public Function cThaiNumber(whatString As String) As String
Dim myString As String
Dim length As Byte
Dim i As Byte
Dim character As String
Dim newString As String
myString = whatString
newString = ""
length = Len(myString)
For i = 1 To length
    character = Asc(Mid(myString, i, 1))
    Select Case character
           Case "48": character = "240"
           Case "49": character = "241"
           Case "50": character = "242"
           Case "51": character = "243"
           Case "52": character = "244"
           Case "53": character = "245"
           Case "54": character = "246"
           Case "55": character = "247"
           Case "56": character = "248"
           Case "57": character = "249"
    End Select
            newString = newString & Chr(character)
Next i
cThaiNumber = newString
End Function
วิธีการใช้งาน
  1. สร้างโมดูลใหม่ (ถ้ามีแล้วไม่ต้องสร้างก็ได้)
    1. เปิด Access
    2. กด Alt+F11 เพื่อเปิดหน้าจอเขียนโค้ด
    3. ไปที่ Insert > Module
    4. คัดลอกและวางโค้ด
    5. คลิกปุ่มบันทึก และตั้งชื่อโมดูล (ชื่ออะไรก็ได้ เช่น Module1)
  2. สร้างตารางที่มีตัวเลข ประกอบด้วยตัวเลขและอื่น ๆ เช่น เลขที่วุฒิบัตร ตั้งชื่อตารางว่า Table1
  3. สร้างรายงาน ที่ใช้ข้อมูลจากตาราง Table1
  4. แสดงฟิลด์ Field1 บนรายงาน
  5. สร้างรายงานเปล่า (สร้าง > รายงาน > ออกแบบรายงาน
  6. คลิกขวาที่ปุ่มรายงาน แล้วเลือกคุณสมบัติ
  7. เลือก Table1 ให้เป็นแหล่งระเบียนของรายงาน
  8. ปิดแผ่นคุณสมบัติ และเลือกกล่องข้อความ ซึ่งอยู่ในตัวควบคุม กลุ่มตัวควบคุม แถบออกแบบ
  9. นำมาวางบนรายงาน แล้วเปิดแผ่นคุณสมบัติ และกำหนดแหล่งข้อมูล คือ Field1

  10. นำกล่องข้อความอีกกล่องมาวางไว้ข้างล่าง
  11. ที่กล่องข้อความใหม่้ เรียกข้อมูลจาก Text0 และเรียกใช้ฟังก์ชัน cThaiNumber() เพื่อสั่งให้แสดงเป็นเลขไทย โดยเขียนคำสั่งในกล่องข้อความ ดังนี้
  12. เลือกมุมมองแบบฟอร์ม จะเห็นแสดงเลขไทย

วันเสาร์ที่ 27 กรกฎาคม พ.ศ. 2556

การถ่ายโอนข้อมูลระหว่าง Access กับ MySQL ผ่านทาง phpMyAdmin

การโอนข้อมูลจาก MySQL  ไปยัง MS Access โดยใช้ phpMyAdmin

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


การนำเข้า MS Access
  1. นำเข้า MS Access โดยผ่านทาง ข้อมูลภายนอก > นำเข้าและเชื่อมโยง > แฟ้ม XML
  2. เลือกไฟล์ แล้วคลิก ตกลง
  3. กำหนดเงื่อนไขว่า จะเอาเฉพาะโครงสร้าง หรือข้อมูลด้วย หรือ จะนำไปต่อท้าย(ผนวก)ตารางที่มีอยู่แล้ว เมื่อกำหนดแล้วคลิก ตกลง
  4. เมื่อคลิกตกลงโปรแกรมจะทำงานทันที
ถ้าต้องการนำตารางใน MS Access เข้าฐานข้อมูล MySQL ผ่านทาง phpMyAdmin จะทำอย่างไร

phpMyAdmin ส่งออกเป็นไฟล์ XML ได้ แต่ไม่สามารถนำไฟล์ XML เข้าฐานข้อมูลได้ ถ้าต้องการนำตารางจาก MS Access เข้าฐานข้อมูล MySQL ผ่านทาง phpMyAdmin ต้องส่งตารางออกเป็นไฟล์ csv จึงสามารถนำตารางเข้าฐานข้อมูลได้

สมมติว่า ต้องการนำข้อมูลจาก Table1 ในฐานข้อมูลของ Access เข้าตาราง MySQL
วิธีการ
  1. เปิด MS Access 2010
  2. คลิกเลือกตารางที่ต้องการส่งออก บนแถบวัตถุตาราง ของ Access
  3. เลือกข้อมูลภายนอก > ส่งออก > แฟ้มข้อความ (ส่งเป็นแฟ้มข้อความ แล้วเปลี่ยนเป็น csv ภายหลัง เพราะ csv เป็นไฟล์ Text เหมือนกัน)
  4. เลือกตำแหน่งที่จะนำไฟล์ไปไว้ และเปลี่ยนชื่อ พร้อมทั้งกำหนดนามสกุลของไฟล์เป็น csv (จะเห็นว่า โปรแกรม Access มีชื่อนามสกุลที่สามารถรับได้ ระบุไว้ด้วยแล้ว)
  5. คลิกเลือก ตกลง โดยไม่กำหนดตัวเลือกใด ๆ
  6. จะเปิดหน้าจอตัวช่วยสร้าง ให้กำหนดมีการใช้ตัวคั่น
  7. หน้าจอต่อไป ให้กำหนดตัวคั่นเป็นเครื่องหมายอัฒภาค (;) ทั้งนี้เพราะ phpMyAdmin โดยปกติจะใช้เครื่องหมายนี้คั่น ถ้าเป็นเครื่องหมายจุลภาต หรือ คอมม่า (,) ต้องไปเปลี่ยนเครื่องหมายคั่น ใน phpMyAdmin (มีเมนูให้เลือกในขณะที่จะนำเข้าไฟล์ csv) มิฉะนั้น จะเกิด Error
  8. คลิก ถัดไป คลิกเสร็จสิ้น 
การนำไฟล์ csv เข้าฐานข้อมูล ผ่าน phpMyAdmin
  1. เปิด phpMyAdmin
  2. สร้างตารางที่มีโครงสร้างเช่นเดียวกับตารางที่จะนำเข้า ถ้ามีอยู่แล้ว ก็ไม่ต้องสร้าง
  3. เลือกตารางที่สร้าง แล้วคลิก Import
  4. เลือกไฟล์ csv จากในเครื่อง
  5. เลือกชุดอักขระให้ถูกกับที่ใช้ใน ฐานข้อมูล ถ้าไม่ถูกจะมีปัญหาเรื่องอ่านไม่ออก ในตัวอย่างนี้ ข้อมูลในฐานข้อมูล mySql ใช้ Tis620
  6. กำหนดรูปแบบของไฟล์ที่จะนำเข้า (Format of imported file) เป็น csv
  7. ถ้าไม่ได้กำหนดตัวคั่นให้เป็น อัฒภาค ต้องกำหนดส่วนของตัวคั่นให้ตรงกัน (ถ้าไม่กำหนด Access จะใช้เครื่องหมายคอมม่าคั่น)
  8. ถ้าเครื่องหมายคั่นไม่ตรงกัน phpMyAdmin จะนับจำนวนฟิลด์ได้ไม่เท่ากับจำนวนที่มีในตาราง จะเกิด Error ดังนี้
  9. ถ้าทุกอย่างเป็นไปด้วยดี เมื่อเปิดตาราง จะพบว่ามีข้อมูลอยู่ ดังนี้
  10. เป็นอันเสร็จการถ่ายโอนข้อมูลระหว่าง MS Access กับ MySQL ผ่านทาง phpMyAdmin

วันศุกร์ที่ 26 กรกฎาคม พ.ศ. 2556

การลบข้อมูลที่มีข้อมูลซ้ำกับตารางอื่น และนำข้อมูลเข้าตาราง

การลบข้อมูลในตาราง เราใช้การสร้างแบบสอบถามประเภทลบ และระบุในเงื่อนไขว่า ต้องการลบฟิลด์ที่มีข้อมูลชื่ออะไร เช่น ต้องการลบข้อมูลของ สมศักดิ์ ออกจากตาราง Table1 ทั้งหมด สร้างเป็นเงื่อนไข ในช่องเงื่อนไข ของแบบสอบถาม ได้ดังนี้
[Table1].[fname]="สมศักดิ์"

แต่ในกรณีที่ต้องการลบข้อมูลในตารางหนึ่ง โดยให้ลบเฉพาะรายการที่ซ้ำกันกับตารางอีกตารางหนึ่ง ดังภาพ จะทำอย่างไร
จากภาพ จะเห็นว่า ใน Table2 มีชื่อคนที่ซ้ำกับใน Table1 อยู่ จำนวน 2 คน คือ สมศักดิ์ รักชาติ และ สุดา อารยา เราต้องการลบข้อมูลของคนทั้งสอง ในตาราง Table2 โดยจะลบเฉพาะที่มีชื่อและนามสกุลซ้ำกับข้อมูลในตาราง Table1 จะทำอย่างไร

หลักการ
สร้างแบบสอบถาม ประเภทลบข้อมูล แล้วกำหนดในเงื่อนไข โดยในเงื่อนไขระบุให้ไปเลือกข้อมูลในอีกตารางหนึ่งที่มีเงื่อนไขข้อมูลที่ซ้ำกัน

วิธีการ
  1. สร้างแบบสอบถามชนิดลบข้อมูล ไปที่ เมนูสร้าง กลุ่มแบบสอบถาม เลือกออกแบบแบบสอบถาม
  2. นำเข้าตาราง Table2 และกำหนดชนิดแบบสอบถามเป็นชนิด ลบ
  3. เลือกฟิลด์ชื่อและนามสกุล เพื่อจะได้ใช้เป็นเงื่อนไข
  4. ที่ช่องเกณฑ์ ในเขตข้อมูล ชื่อ ให้คลิกขวา และเลือก ย่อ/ขยาย เพื่อเขียนโค้ด
  5. เขียนโค้ดต่อไปนี้ลงในกรองข้อความ
    In (select table1.fname from table1 where table2.ชื่อ = table1.fname)
  6. ที่ช่องเกณฑ์ ของเขตข้อมูล นามสกุล ให้เขียนโค้ด ดังนี้
    In (select table1.lname from table1 where table2.นามสกุล = table1.lname)
  7. เป็นอันเสร็จการสร้าง แบบสอบถามสำหรับลบข้อมูลใน Table2 ที่มีข้อมูลชื่อ และนามสกุล ซ้ำกับข้อมูลในเขตข้อมูล fname และ lname ในตาราง Table1
  8. ถ้าดูโค้ดที่เป็น SQL ซึ่งสามารถจะนำไปใช้ใน VBA ได้ จะเห็นดังนี้

    DELETE Table2.[ชื่อ], Table2.[นามสกุล]
    FROM Table2
    WHERE (((Table2.[ชื่อ]) In (select table1.fname from table1 where table2.ชื่อ = table1.fname)) AND ((Table2.[นามสกุล]) In (select table1.lname from table1 where table2.นามสกุล = table1.lname)));
  9. คลิกปุ่ม เรียกใช้ จะแจ้งให้ทราบว่า มีข้อมูลที่จะลบออก 2 รายการ ตามข้อมูลที่ซ้ำกัน
  10. เมื่อคลิก ใช่ และกลับไปดูที่ตาราง Table2 จะเห็นว่าข้อมูลที่ซ้ำกัน ได้ถูกลบออกไป เป็นที่เรียบ
เมื่อลบข้อมูลที่ซ้ำกันออกแล้ว จะนำข้อมูลใน Table2 ไปต่อกับข้อมูลที่มีอยู่แล้ว ใน Table1 จะทำอย่างไร

วิธีการ
  1. สร้าง แบบสอบถามชนิด ผนวก และนำเข้าตาราง Table2 ซึ่งมีข้อมูลที่จะนำไปต่อท้ายตาราง Table1 พร้อมทั้งดึงเขตข้อมูลที่ต้องการนำไปรวม
  2. ที่ช่อง ผนวกไปยัง ของแต่ละเขตข้อมูล ให้คลิกเลือกตาราง และเขตข้อมูลของตารางที่จะนำข้อมูลในต่อท้าย ในตัวอย่างนี้ เขตข้อมูลชื่อ จะไปต่อท้าย เขตข้อมูล fname ในตาราง Table1 และนามสกุล จะไปต่อท้ายเขตข้อมูล lname ในตาราง Table1
  3. แบบสอบถามที่ได้ จะเป็นดังนี้
  4. แบบสอบถามพร้อมทำงาน เมื่อคลิกเรียกใช้ โปรแกรมจะแจ้งว่า จะมีการเพิ่มข้อมูลจำนวน 2 แถว
  5. เมื่อคลิกดูข้อมูลในตาราง Table2 จะเห็นมีข้อมูลเพิ่มตามต้องการ
     
 
 










วันพฤหัสบดีที่ 25 กรกฎาคม พ.ศ. 2556

การหาข้อมูลที่ซ้ำกันในตาราง 2 ตาราง ของ Access2010

การหาข้อมูลใน Field ที่ซ้ำกันในตารางเดียวกัน เป็นเรื่องไม่ยาก เพราะมี แบบสอบถาม หรือ Query ที่ใช้สำหรับค้นหาข้อมูลที่ซ้ำกันอยู่แล้ว คือ ตัวช่วยสร้างแบบสอบถามเพื่อค้นหารายการที่ซ้ำ (Find Duplicate Query Wizard) (ไปที่แถบสร้าง กลุ่มแบบสอบถาม เลือก ตัวช่วยสร้างแบบสอบถามเพื่อค้นหารายการที่ซ้ำ)

และถ้าเป็นการหาข้อมูลที่ซ้ำกันใน 2 ตาราง แต่ต้องการหาเพียงฟิลด์เดียว ก็ไม่ยากเท่าไร เพราะสามารถใช้ ตัวช่วยสร้างแบบสอบถามการค้นหาข้อมูลที่ไม่ตรงกัน (Find Unmatched Query Wizard) ได้ เพียงเปลี่ยนเงื่อนไข จาก is Null เป็น Not is Null ก็ใช้ได้

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

จากภาพ จะเห็นว่า ในตารางที่ 1 และตารางที่ 2 มีข้อมูลที่ซ้ำกันคือ สมศักดิ์ รักชาติ และ สุดา อารยา ส่วนประสิทธิ์ ชื่อเหมือนกัน แต่นามสกุลต่างกัน จึงเป็นคนละคนกัน

การค้นหารายชื่อที่ซ้ำกัน ใน 2 ตาราง โดยมีเงื่อนไขหลายฟิลด์ มีดังนี้
  1. สร้างแบบสอบถามใหม่ โดยไปที่แถบสร้าง กลุ่มแบบสอบถาม เลือกออกแบบแบสอบถาม Query
  2. เลือกตารางที่มีข้อมูลที่ต้องการเปรียบเทียบเข้าสู่แบบสอบถาม ในที่นี้คือ Table1 และ Table2
  3. นำฟิลด์ที่ต้องการให้แสดง และฟิลด์ที่ต้องการใช้เป็นเงื่อนไขมาวาง ดังภาพ
  4. คลิกที่เครื่องหมาย ผลรวม
  5. เลือก Where เป็นในฟิลด์ที่ต้องการ พร้อมทั้งกำหนดเงื่อนไขในช่องเกณฑ์ โดยระบุชื่อฟิลด์ในอีกตารางหนึ่ง ดังภาพ
  6. เมื่อคลิก เรียกใช้ จะเห็นชื่อของผู้ทีมีชื่อซ้ำกัน ดังนี้
  7. ถ้าดูโค้ดที่ Query สร้างขึ้น  จะเห็นดังนี้

    SELECT Table2.[ชื่อ], Table2.[นามสกุล]
    FROM Table1, Table2
    WHERE (((Table2.[ชื่อ])=[Table1].[fname]) AND ((Table2.[นามสกุล])=[Table1].[lname]))
    GROUP BY Table2.[ชื่อ], Table2.[นามสกุล];
ถ้าต้องการลบฟิลด์ที่ซ้ำกันออกจากตารางนี้ ต้องสร้างแบบสอบถามประเภทลบข้อมูล จึงจะสามารถลบข้อมูลออกไปจากตารางได้



วันจันทร์ที่ 22 กรกฎาคม พ.ศ. 2556

การสร้างปุ่มบนริบบิ้น Access 2010 โดยใช้ภาพที่สร้างขึ้นเอง

วันก่อน เคยพูดเรื่อง การสร้างปุ่มบนริบบิ้น ของ MS Access 2007 แต่ยังติดขัดที่ต้องใช้ภาพที่เป็น idMso ของ Access ภาพที่สร้างขึ้นเอง มีปัญหาเรื่อง Transparency วันนี้ ไปพบเรื่องเดียวกัน ที่ http://www.accessribbon.de/en/ แต่สามารถใช้ภาพ png ที่เป็น Transparent และนำมาใช้งาน ได้ และมี Transparency เหมือนกับการใช้ภาพจาก idMso ดังตัวอย่างข้างล่างนี้


การสร้าง ใช้การนำภาพเข้าตาราง และเรียกใช้งานฟังก์ชัน AddBinFile() ของ Sascha Trowitzsch ในโมดูล "basBlob" และ "basGDIPlus"

ภาพที่ใช้สร้างเอง โดยใช้โปรแกรมสร้างภาพกราฟฟิก เช่น Gimp Photoshop หรือ Illustrator ก็ได้ และบันทึกเป็นไฟล์ png โดยให้มี Trasparent ด้วย

วิธีการ

  1. สร้างไฟล์ ขนาด 200 X 200 pixels สำหรับเป็นภาพ icon ที่ต้องการ โดยสร้างเป็นไฟล์ png และให้มี Transparent
  2. บันทึกไว้ในห้องเดียวกับไฟล์ Access ในตัวอย่างนี้ ไฟล์ภาพ ชื่อ abc_nfe.png อยู่ในห้อง E:\socialMedia
  3. สร้างไฟล์ใหม่ ด้วย Access 2010 และบันทึกไว้ในห้องเดียวกับภาพ คือ E:\socialMedia
  4. นำเข้าโมดุล  "basBlob" โดยไปที่ ข้อมูลภายนอก > Access แล้วทำตามหน้าจอการนำเข้า
    (โมดูลนี้ มีอยู่ในไฟล์ที่ดาวน์โหลด หรือจะไปเอามาจากเว็บต้นฉบับ ของ Sascha Trowitzsch ตามลิงค์ ก็ได้)
  5. กด Alt + F11 เพื่อเปิดหน้าจอเขียนโค้ด
  6. กด Ctrl + G เพื่อเปิดหน้าจอการเรียกใช้สูตร หรือ Immediate Window
  7. ที่หน้าต่าง immediate เรียกใช้งานฟังก์ชัน AddBinFile() โดยระบุ Path ที่อยู่ในห้องเดียวกัน

          AddBinFile(Application.CurrentProject.Path &"\abc_nfe.png")
  8. กด Enter ฟังก์ชัน AddBinFile() จะนำภาพเข้าตาราง tblBinary โดยถ้าไม่มีตารางนี้อยู่ก่อน จะสร้างขึ้นให้เอง ถ้ามีอยู่แล้ว จะเอาภาพไปต่อจากข้อมูลที่มีอยู่เดิม
  9. กลับไปดูที่ วัตถุของ Access ในหน้าแรก จะเห็นมีตารางเกิดขึ้น พร้อมกับมีชื่อไฟล์และข้อมูลที่เป็น Binary ของไฟล์นี้
  10.  จากนั้น จึงสร้างตาราง USysRibbons ตามขั้นตอนการสร้าง Ribbons แบบกำหนดเอง และเรียกใช้งานภาพนี้ ก็จะได้ภาพ icon ที่มี Transparent เหมือนกับภาพ icon ของระบบโดยทั่วไป สามารถทำให้อยู่ในสถานะไม่พร้อมใช้งาน เป็นสีเทาจาง ๆ ก็ได้
  11. ถ้าจะไม่ใช้ Immediate Window ตามขั้นตอนข้างต้น จะเรียกใช้ ฟังก์ชันนี้ พร้อมกับส่งภาพทีละหลาย ๆ ภาพ ก็ได้

สุดท้าย การเรียกใช้ IRibbonControl จำเป็นต้องอ้างถึง (Reference) Microsoft Office 15.0 Object Library ด้วย มิฉะนั้น จะเกิด Error "User-defined type is not defined."

ดาวน์โหลดไฟล์ต้วอย่าง คลิกที่นี่

ความรู้พื้นฐาน วิธีการสร้าง รายละเอียดอื่น ๆ อ่านที่ http://www.thongjoon.com/2011/03/ms-access-2007-2010-custom-ribbon.html?q=ribbon


อ้างอิง
http://www.accessribbon.de/en/


วันศุกร์ที่ 19 กรกฎาคม พ.ศ. 2556

การลบ Cookies ใน Internet Explorer

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

ตัวอย่างเช่น Gmail เมื่อเวลา Sign in เข้าใช้งาน จะมีข้อความให้เลือกว่าต้องการ "อยู่ในสถานะลงชื่อเข้าใช้" หรือไม่
ถ้าคลิกเลือก เหมือนในตัวอย่างข้างบน เว็บของ Gmail จะเขียน Cookie ลงในเครื่อง เพื่อว่า เมื่อเข้ามาอีกครั้ง จะได้ไม่ต้องกรอก
 
เว็บของสถาบัน กศน.ภาคกลาง ก็มีการเก็บ Cookie ในลักษณะนี้ เช่นเดียวกัน ถ้าคลิกเลือก "จำชื่อและรหัสไว้" เมื่อเข้ามาอีกครั้ง ก็ไม่ต้องลงทะเบียนเข้าสู่ระบบ แต่จะสามารถเข้าเลือกวิชาเรียนในระบบได้ทันที
 
โดยปกติ เว็บที่เขียน Cookie ลงในเครื่องผู้ใช้ จะกำหนดอายุว่า ให้อยู่ได้กี่วัน แล้วจะลบทิ้งไปเอง จำนวนวันจะไม่เท่ากัน แล้วแต่ละเว็บจะกำหนด
 
ถ้าเราต้องการล้าง Cookies ทั้งหมดที่อยู่เครื่อง ก็สามารถทำได้ โดยใช้โปรแกรม เช่น CCleaner ลบ Cookies ออกทั้งหมด หรือจะทำเอง ก็ได้
 
วิธีการล้าง Cookies ด้วยตัวเอง ทำดังนี้
  1. ไปที่ Start > Control Panel
  2. เลือก Folder Options
  3. ที่แถบ General > Browsing History คลิกปุ่ม Delete

  4. เลือก Cookies  and website data และคลิกปุ่ม Delete
  5. Cookies ในเครื่องจะถูกลบออกทั้งหมด เป็นอันเสร็จสิ้นขั้นตอนการล้าง Cookies ออกจากเครื่องของเรา