29 พฤษภาคม 2558

SQL Server - OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".

การ Query ข้อมูลจากตาราง Excel ด้วย SQL Server ด้วยคำสั่ง

SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                            'Excel 12.0;Database=D:\YourExcelFile.xlsx;
                             User=Admin;Password=;HDR=Yes;IMEX=1', 
                             'SELECT * FROM [Sheet1$]');

แล้วเกิด Error เช่น

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
returned message "Unspecified error"

ก่อนอื่นก็ต้องไปดูที่ โปรแกรม  Microsoft SQL Server Manage Studio

เปิดหน้าต่าง New Query... แล้วพิมพ์คำสั่ง

exec sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE WITH OVERRIDE

กดปุ่ม F5
จากนั้น ที่หน้าต่าง Object Explorer ดูตรง Linked Servers ว่าเรามี Provider ชื่อ Microsoft.ACE.OLEDB.12.0 อยู่แล้ว ดังภาพ  



















จากนั้นคลิกเมาส์ปุ่มขวา เลือก Properties จากนั้นให้คลิกเลือกที่
Dynamic parameter และ Allow  inprocess แล้วคลิกปุ่ม OK














จากนั้นไปทำการสำรวจ folder ที่เป็นพื้นที่เก็บข้อมูลชั่วคราวหรือ Temp file ซึ่งก็จะอยู่ภายใต้ Folder ชื่อ C:\User\ชื่อผู้ใช้\AppData\Local (ไฟล์จะถูกซ่อนอยู่ แต่ละเครื่องอาจจะอยู่คนละที่กัน ลอง Search หาดู)

จากนั้นคลิกเมาส์ปุ่มขวาที่ folder ชื่อ Temp เลือก Properties 
แล้วเอา Attribute ตรง Read-Only ออก
 






















และทำเช่นเดียวกันกับ โฟลดเดอร์ Temp ที่อยู่ใน
C:\Windows\ServiceProfiles\LocalService\AppData\Local



เท่านี้ก็ทำให้เราสามารถแก้ไขปัญหา Error ที่เกิดขึ้นกับการเปิดไฟล์ Excel จากภายนอกได้แล้ว

สวัสดี มีความสุข 
"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.