บทความ

กำลังแสดงโพสต์ที่มีป้ายกำกับ ms access

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

รูปภาพ
การลบข้อมูลในตาราง เราใช้การสร้างแบบสอบถามประเภทลบ และระบุในเงื่อนไขว่า ต้องการลบฟิลด์ที่มีข้อมูลชื่ออะไร เช่น ต้องการลบข้อมูลของ สมศักดิ์ ออกจากตาราง Table1 ทั้งหมด สร้างเป็นเงื่อนไข ในช่องเงื่อนไข ของแบบสอบถาม ได้ดังนี้ [Table1].[fname]="สมศักดิ์" แต่ในกรณีที่ต้องการลบข้อมูลในตารางหนึ่ง โดยให้ลบเฉพาะรายการที่ซ้ำกันกับตารางอีกตารางหนึ่ง ดังภาพ จะทำอย่างไร จากภาพ จะเห็นว่า ใน Table2 มีชื่อคนที่ซ้ำกับใน Table1 อยู่ จำนวน 2 คน คือ สมศักดิ์ รักชาติ และ สุดา อารยา เราต้องการลบข้อมูลของคนทั้งสอง ในตาราง Table2 โดยจะลบเฉพาะที่มีชื่อและนามสกุลซ้ำกับข้อมูลในตาราง Table1 จะทำอย่างไร หลักการ สร้างแบบสอบถาม ประเภทลบข้อมูล แล้วกำหนดในเงื่อนไข โดยในเงื่อนไขระบุให้ไปเลือกข้อมูลในอีกตารางหนึ่งที่มีเงื่อนไขข้อมูลที่ซ้ำกัน วิธีการ สร้างแบบสอบถามชนิดลบข้อมูล ไปที่ เมนูสร้าง กลุ่มแบบสอบถาม เลือกออกแบบแบบสอบถาม นำเข้าตาราง Table2 และกำหนดชนิดแบบสอบถามเป็นชนิด ลบ เลือกฟิลด์ชื่อและนามสกุล เพื่อจะได้ใช้เป็นเงื่อนไข ที่ช่องเกณฑ์ ในเขตข้อมูล ชื่อ ให้คลิกขวา และเลือก ย่อ/ขยาย เพื่

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

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

การสร้างปุ่มบนริบบิ้น 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 ด้วย วิธีการ สร้างไฟล์ ขนาด 200 X 200 pixels สำหรับเป็นภาพ icon ที่ต้องการ โดยสร้างเป็นไฟล์ png และให้มี Transparent บันทึกไว้ในห้องเดียวกับไฟล์ Access ในตัวอย่างนี้ ไฟล์ภาพ ชื่อ abc_nfe.png อยู่ในห้อง E:\socialMedia สร้างไฟล์ใหม่ ด้วย Access 2010 และบันทึกไว้ในห้องเดียวกับภาพ คือ E:\socialMedia นำเข้าโมดุล  "basBlob" โดยไปที่ ข้อมูลภายนอก > Acc

การดาวน์โหลดไฟล์จาก อินเทอร์เน็ต ด้วย Access 2010 VBA

รูปภาพ
ก่อนการใช้ MS Access 2010 ดาวน์โหลดไฟล์จากอินเทอร์เน็ต ต้องตรวจสอบเสียก่อนว่า ขณะนี้สามารถเข้าอินเทอร์เน็ตได้หรือไม่ โดยใช้ฟังก์ชันต่อไปนี้ Function checkInternetConnection() As Integer 'code to check for internet connection 'by Daniel Isoje On Error Resume Next  checkInternetConnection = False  Dim objSvrHTTP As ServerXMLHTTP  Dim varProjectID, varCatID, strT As String  Set objSvrHTTP = New ServerXMLHTTP  objSvrHTTP.Open "GET", " http://www.google.com "  objSvrHTTP.setRequestHeader "Accept", "application/xml"  objSvrHTTP.setRequestHeader "Content-Type", "application/xml"  objSvrHTTP.send strT  If Err = 0 Then  checkInternetConnection = True  Else   MsgBox "Internet connection not estableshed: " & Err.Description & "", 64, "Additt !"  End If End Function ฟังก์ชันนี้ ต้องอ้างอิงถึง Microsoft XML, v6.0 เสียก่อน จึงจะใช้งานได้ โดยที่หน้าจอเขียนโค้ด ไปที่ Tool >

การแนบไฟล์ ใน Access 2010

รูปภาพ
เริ่มตั้งแต่ Access 2007 เราสามารถแนบไฟล์ เช่น ไฟล์ Word Excel ไฟล์ภาพ หรือแม้แต่ไฟล์ วิดีโอ ในฟิลด์ตารางของ Access ได้ เพราะมีการกำหนด ประเภทของข้อมูล (data type) เพิ่มเติม เป็นชนิด Attachment ซึ่งดีกว่าการใช้ OLE ในรุ่นก่อน ๆ มาก เพราะสะดวกมากกว่า ไฟล์เล็กกว่า ไฟล์ที่เก็บเป็น Attachment เป็นไฟล์ต้นฉบับ เวลาเปิด จะใช้โปรแกรมภายนอกเปิด เช่น ถ้าเก็บไฟล์ docx เวลาเปิดไฟล์ จะเรียกโปรแกรม MS Word มาเปิด ซึ่งสามารถแก้ไข เพิ่มเติมได้ (แต่มีข้อแม้ว่า เมื่อแก้ไขแล้ว เวลากลับมาที่ MS Access ต้องบันทึกอีกครั้งหนึ่ง มิฉะนั้น สิ่งที่แก้ก็จะยังไม่ถูกจัดเก็บใน MS Access) ไฟล์แนบ หรือ Attachment ช่วยให้เราสามารถเก็บเอกสาร หรือ ไฟล์ที่เกี่ยวข้องกับเรื่องนั้น ๆ ได้ เช่น มีข้อมูลรายการของพนักงานในตาราง พนักงาน เราสามารถแนบเอกสารที่เกี่ยวข้องกับพนักงานแต่ละคน เช่น ไฟล์สัญญาจ้าง ภาพถ่ายลายนิ้วมือ วิดีโอที่เกี่ยวกับพนักงานคนนั้น ๆ เป็นต้น ไฟล์แนบสามารถมีได้ไม่จำกัดจำนวน จำกัดอยู่ที่ขนาดของไฟล์ แต่ละไฟล์ต้องมีขนาดไม่เกิน 256 Mb  รวมกันทั้งหมดแล้ว ไม่เกิน 2 GB (เท่ากับขนาดของ Access) ไฟล์แนบสามารถจัด

การใช้ File Dialog ค้นหาภาพ และเปิดด้วย Paint ด้วย Access VBA

รูปภาพ
ในตัวอย่างนี้ จะเป็นการสร้างปุ่มเพื่อเปิดหน้าจอค้นหาไฟล์ (Browse Dialogue) เพื่อค้นหาไฟล์ภาพ แล้วมีปุ่มเพื่อให้เปิดดูด้วย โปรแกรม Paint เพื่อให้ผู้ใช้สามารถจัดการกับภาพ และสั่งพิมพ์นอกโปรแกรม Access ได้ จุดประสงค์สุดท้ายคือการเรียกไฟล์ Paint มาเปิดภาพ ดังนั้น เราต้องมีการกรอง หรือตรวจเชคว่า ไฟล์ที่เลือกนั้นเป็นไฟล์ภาพหรือไม่ ในตัวอย่างนี้ กำหนดให้เป็นไฟล์ ประเภท jpg หรือ gif เท่านั้น วิธีการ สร้างปุ่ม ชื่อ Command0 เขียนข้อความที่ปุ่มเป็น ค้นหาไฟล์ สร้าง กล่องข้อความ (Textbox) ชื่อ Text3 สร้างปุ่ม ชื่อ cmdViewFile กำหนดค่าเริ่มต้นให้มองไม่เห็น (ที่แถบ Format ตั้งค่า Visible เป็น No)  เขียนข้อความที่ปุ่มเป็น เปิดดูภาพ ที่ปุ่ม ค้นหาไฟล์ (Command0) ให้เขียนโค้ดข้างล่างนี้ Private Sub Command0_Click()     Dim f As Object     Dim fileAddress As String     Dim fileExt As String     Dim strFile As String     Dim strFolder As String     Dim varItem As Variant         Me.Text3.Value = ""     Me.cmdViewFile.Visible = False         Set f = Application.FileDialog(3)     f.A

การหาชื่อ field ของตาราง ใน Access

รูปภาพ
ในการทำงานกับ MS Access บางครั้งมีความจำเป็นที่ต้องหาชื่อฟิลด์ เพื่อใช้เป็นเงื่อนไข ตามที่ต้องการ สมมติตาราง Table1 มึข้อมูล ดังนี้ วิธีการหาชื่อตาราง มีดังนี้ สร้างฟอร์มใหม่ ชื่อ Form1 สร้างปุ่ม ใช้ชื่อว่า Command1 ที่เหตุการณ์ เมื่อคลิก ให้พิมพ์โค้ดข้างล่างนี้ Private Sub Command1_Click() Set db = CurrentDb() Set rs1 = db.OpenRecordset("Table1") Dim fld As DAO.Field For Each fld In rs1.Fields     MsgBox (fld.Name) Next Set fld = Nothing End Sub เมื่อคลิกที่ปุ่ม จะแสดงชื่อฟิลด์ ใน Message Box

การเปิดฟอร์มให้พร้อมรับข้อมูล ใน MS Access ด้วย VBA

รูปภาพ
ใน MS Access โดยปกติเมื่อสร้างฟอร์มและมีการกรอกข้อมูล เมื่อเรียกเปิดฟอร์มเพื่อกรอกข้อมูล ฟอร์มจะยังไม่พร้อมที่จะทำงาน เพราะโปรแกรมจะไปที่ Record แรก ต้องเลื่อนตำแหน่งไปยัง Record สุดท้ายและเพิ่ม Record ใหม่ ฟอร์มเมื่อเปิดครั้งแรก ถ้าดูที่ Navigation bar ด้านล่าง จะเห็นว่าอยู่ที่ ระเบียนที่ 1 จากทั้งหมด 2837 ระเบียน ถ้าต้องการให้เปิดฟอร์มแล้วพร้อมใช้งาน ให้ใช้ VBA สั่งให้ไปยัง Record สุดท้าย และสร้าง Record ใหม่ ขึ้น โดยเรียกใช้คำสั่ง ที่เหตุการณ์ เมื่อเปิด ของฟอร์มนั้น ดังนี้ DoCmd.RunCommand acCmdRecordsGoToNew    เมื่อเปิดฟอร์ม จะทำให้ฟอร์มพร้อมที่จะรับคำสั่งใหม่ทันที ซึ่งจะสังเกตที่ Navigation bar ด้านล่างของฟอร์ม ซึ่งแสดงระเบียน แสดงให้เห็นว่า โปรแกรมสร้างระเบียนเพิ่มอีก 1 ระเบียน เป็นระเบียนที่ 2838 และขณะนี้ กำลังอยู่ที่ระเบียน 2838 พร้อมที่จะรับการป้อนข้อมูล

เงื่อนไข ไม่เท่ากับ ใน Query ของ MS Access

รูปภาพ
การกำหนดเงื่อนไข ไม่เท่ากับ อาจจะเกิดปัญหา ถ้ามีช่องว่างในข้อมูล ที่เป็น Null เพราะจะไม่นำข้อมูลมาแสดง ข้อมูลข้างล่างนี้ บางคนมีเกรด บางคนไม่มีเกรด เราต้องการให้แสดงเฉพาะผู้ที่ย้งไม่ได้กรอกเกรด ผู้ที่กรอกแล้ว ไม่ต้องนำมาแสดง   ถ้าใน Query ต้องการให้แสดงเฉพาะคนที่ยังไม่ได้ลงเกรด ถ้ากำหนดเงื่อนไขเป็น <>"ผ่าน" จะไม่มีข้อมูลปรากฎ เนื่องจากในส่วนที่ไม่มีเกรด มีค่าเป็น Null ดังนี้ ผลที่ได้ คือ การแก้ไข กำหนดเงื่อนไขเพิ่ม เป็นไม่เท่ากับ ผ่าน หรือ มีค่าเป็น Null ดังนี้ <>ผ่าน" Or Is Null   ผลที่ได้คือ    จะแสดงผลตามต้องการ คือ ไม่เท่ากับผ่าน และที่ยังไม่ได้กรอกข้อมูลเท่านั้น

Access 2010 Type mismatch

รูปภาพ
เปิด recordset ในตารางของฐานข้อมูล Access 2010 ด้วยคำสั่ง Set rst = dbs.OpenRecordset("SELECT * FROM .....) แล้วเกิดข้อผิดพลาด Type mismatch (Runtime error '13") ทั้ง ๆ ที่เมื่อก่อน (Access 2003) เคยทำได้ไม่มีปัญหา สาเหตุ   เมื่อก่อน Access 97 กำหนดให้ DAO เป็นค่าเริ่มต้น สำหรับ Microsoft Data Access Objects ต่อมา Access 200 ได้กำหนดให้ ADO เป็นค่าเริ่มต้น   การแก้ไข   ในการประกาศตัวแปร สำหรับฐานข้อมูล (db) และ Recordset (rst) ให้ระบุว่าเป็น DAO ด้วย ก็จะแก้ปัญหา ไม่เกิด Error อีกต่อไป เช่น   Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("SELECT * FROM tblCustomers WHERE custID = 99999999")   

Msgbox อ่านไม่ออก ไม่แสดงภาษาไทย ใน Access 2010 Windows 7

รูปภาพ
ใช้ VBA เขียนโค้ด เรียกให้แสดง message box โดยใช้ MsgBox() แสดงข้อความแต่อ่านไม่ออก ไม่เป็นภาษาไทย ดังภาพ สาเหตุ ต้นเหตุไม่ได้อยู่ที่ Access 2010 แต่เป็นที่ Windows ที่ตั้งค่าภาษา ที่ไม่ใช่ Unicode โดยไม่ได้ตั้งให้เป็นภาษาไทย วิธีการแก้ไข 1.ไปที่ ปุ่ม Start > Control Panel (แผงควบคุม) 2. เลือก Clock, Language, and Region เพื่อเปลี่ยนภาษา 3. เลือก Change display language 4. ไปที่แถบ Administrative ที่ส่วน Language for Non-Unicode Program จะเห็นว่าไม่ใช่ภาษาไทย เช่น English (United States) 5. ให้คลิกปุ่ม Change system local... 6. เลือกภาษาไทย  Thai(Thailand) 7. กดปุ่ม OK 8. การเปลี่ยจะเกิดผลก็ต่อเมื่อมีการปิดและเปิด Windows ใหม่ เครื่องจะถามให้ปิดเครื่อง 9. ให้ตอบตกลง โดยคลิกปุ่ม Restart Now 10. เมื่อเปิด Windows ขึ้นมาใหม่ และใช้งาน Access 2010 ข้อความใน MsgBox จะเป็นภาษาไทย ดังภาพ

การหาข้อมูลในตารางหนึ่ง ที่ไม่มีในอีกตารางหนึ่ง ของ Access 2010

รูปภาพ
บางครั้งเราต้องการหาว่า ข้อมูลในตารางหนึ่ง ที่ไม่มีในอีกตารางหนึ่ง จะทำอย่างไร สมมติว่า มีข้อมูล 2 ตาราง คือ tblCode และ tblData ตาราง tblCode เก็บรหัสอำเภอ และ tblData เก็บข้อมูลที่ผู้ใช้ป้อนเข้ามา ซึ่งมีรหัสอำเภออยู่ด้วย จึงต้องตรวจสอบว่า อำเภอใน tblData มีอยู่ในตาราง tblCode หรือไม่ (ความจริงถ้าออกแบบดี ๆ กำหนดให้ผู้ใช้เลือกจากตัวเลือก จะได้ถูกต้อง และไม่เกิดข้อผิดพลาด ก็จะไม่ต้องมาหาว่า ข้อมูลที่พิมพ์เข้ามาพิมพ์ถูกหรือไม่) ตาราง tblCode ตาราง tblData จากตาราง จะเห็นว่า โพธาราม ในตาราง tblData ไม่มีในตาราง tblCode ในกรณีนี้ เราต้องการหาว่า ข้อมูลในตาราง tblData ที่ไม่มีในตาราง tblCode การหาลักษณะนี้ นอกจากจะหาชื่ออำเภอที่ไม่ปรากฏ ในอีกกรณีหนึ่งคือพิมพ์ชื่ออำเภอผิด เช่น บ้านไร่ พิมพ์เป็น บ้านไร (ลืมใส่ไม้เอก) ก็จะสามารถหาได้ ด้วยวิธีเดียวกันนี้ วิธีการ ให้สร้างแบบสอบถาม ชนิดเลือก (Select Query) และกำหนดความสัมพันธ์ของฟิลด์ที่ต้องการเป็นแบบ LeftJoin โดยให้รวมระเบียนทั้งหมดจากตาราง tblData และ เฉพาะระเบียนจาก tblCode ซึ่งมีเขตข้อมูลที่ใช้ในการรวมเท่ากัน จากความสัมพั