Friday, October 3, 2008

ปัญหาการใช้ ADO อ่านข้อมูลจาก Excel แล้ว Field ที่เป็น Mixed data types อ่านค่าผิดเป็น Null หรือ Empty

ปัญหานี้มาจาก ADO จะต้องทำการ Scan ข้อมูลแต่ละ Columnใน Excel worksheet (โดยไม่เกี่ยวกับ Format) โดย Default แล้วจะทำการ Scan ข้อมูลจำนวน 8 rows เพื่อกำหนด data type ดังนั้น หากใน Column มีข้อมูลปนกัน เช่น Text กับ Number ก็อาจจะทำให้เกิดการอ่านค่าผิดได้ และค่าที่ผิดก็จะอ่านได้เป็น Null หรือ Empty

วิธีการแก้ไข ก็คือ ให้แก้ไขค่า Registry
HKLM\Software\Microsoft\Jet\4.0\Engines\Excel

โดยกำหนดค่า TypeGuessRows ซึ่งเป็นชนิด REG_DWORD ให้เป็น 0 (ค่า TypeGuessRows นี้ มีค่า Default = 8 และ สามารถกำหนดค่าได้ระหว่าง 0-16)

สำหรับรายละเอียดของการอ่านข้อมูลจากไฟล์ Excel โดยใช้ ADO สามารถดูได้จาก Link ด้านล่างนี้

How To Use ADO with Excel Data from Visual Basic or VBA

Thursday, October 2, 2008

Show hidden files and folders ไม่ยอม Show

หลังจากที่มี Virus จาก Flash drive หลุดมาอาละวาดในเครื่องได้สัก 2 สัปดาห์ก่อน มาวันนี้ผมจึงค่อยพบว่า เครื่องมันไม่แสดง Hidden files และ Folders จริง ๆ แล้วมันก็ไม่น่าจะแก้ยาก แต่ปัญหามันอยู่ที่พอไปเลือก Show hidden files and folders ที่ Folder options ให้มัน Show พอปิด Screen ไป แล้วเปิดใหม่ มันก็กลับคืนไปเป็น Do not show hidden files and folders เอง

วิธีแก้ไขที่แก้ไขสำเร็จ คือ
1. เปิด Regedit แล้วเข้าไปที่
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL
2. หา "CheckedValue" ซึ่งเป็นชนิด REG_DWORD แล้วกำหนดค่าให้เป็น 1
3. ทดลองกลับไปแก้ไข Show hidden files and folders ใหม่ ซึ่งควรจะกลับเป็นปกติแล้ว

Thursday, September 11, 2008

ปัญหา The server was unable to allocate from the system paged pool because the pool was empty กับ SQL 2000

ประมาณสัปดาห์ที่แล้ว อยู่ดี ๆ SQL 2000 บน Windows 2003 Standard (RAM 4GB + ใช้ /3GB เอาไว้ ) ซึ่งใช้งานมาได้ปกติสัก 3-4 เดือนแล้ว ก็เกิด Error ตอนสาย ๆ และ เป็นทุกวัน แต่พอ Restart service MSSQLSERVER ใหม่ ก็จะใช้งานได้ตามปกติ

ซึ่งตอนที่มีปัญหา หากใช้ Query Analyzer เข้า Server ก็ Connect ไม่สำเร็จ และเจอ Error แบบนี้

Server: Msg 11, Level 16, State 1, Line 0
[Microsoft][ODBC SQL Server Driver][DBNETLIB]General network error. Check your network documentation.
Server: Msg 10054, Level 16, State 1, Line 0
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionRead (recv()).

และถ้าไปดูใน Event Viewer ของ Windows ในส่วนของ System ก็จะเจอ Error แบบนี้
The server was unable to allocate from the system paged pool because the pool was empty.

การแก้ไข : วิธีแก้ไขที่ทดลองแล้วประสบความสำเร็จ ก็คือ ใช้วิธีตามนี้
http://support.microsoft.com/kb/312362

สำหรับค่าใน Registry ที่ได้แก้ไขไปก็ คือ
แก้ไข Registry ที่ HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management
โดยที่
1. เพิ่ม PoolUsageMaximum เป็น REG_DWORD โดยให้มีค่า เป็น 40 (Decimal)
2. แก้ไข PagedPoolSize เป็น REG_DWORD โดยแก้ไขจาก 0x00000000 เป็น 0xFFFFFFFF ( Hex)
3. Reboot Server ใหม่

เป็นอันจบการแก้ไข :)

Thursday, August 14, 2008

Error ตอน New SSIS Package

วันนี้ทดลองสร้าง SSIS Package กับ SQL 2005 ที่เพิ่งลงใหม่ แต่ดันไปเจอ Error ตามนี้

Failed to save package file "C:\Documents and Settings\Administrator\Local Settings\Temp\1\tmp9D.tmp" with error 0x80040155 "Interface not registered".

หลังจากค้นไป ค้นมา ก็เจอทางแก้จาก http://forums.microsoft.com คือ ให้ register MSXML ตามนี้

regsvr32 msxml3.dll
regsvr32 msxml6.dll


เอาคำสั่งไป Run ใน Command Prompt ได้เลย แล้วก็ใช้ได้จริง ทีนี้ลองนึกไปว่าวันนี้ได้ Upgrade Service Pack 2 ตอน Upgrade ก็เห็นอะไร error ตรง MSXML 6.0 Parser แต่ไม่ได้สนใจ นึกว่าเป็นเพราะเครื่องเรา Update แล้ว มันก็เลยฟ้องขึ้นมา ซึ่งน่าสงสัยว่าเจ้านี่แหละ ที่ทำให้ New SSIS Package ไม่ได้

Monday, August 11, 2008

การเริ่ม Error log ไฟล์ใหม่ โดยไม่ต้อง Restart server

โดยปกติแล้ว เรามักจะไม่ค่อยได้ restart server ทำให้ errorlog มีขนาดใหญ่ขึ้นเรื่อย ๆ ดังนั้น ในกรณีที่ต้องการให้เริ่ม errorlog ไฟล์ใหม่ (เรียกว่า cycle log) โดยไม่ต้องการ restart server เรา็สามารถทำได้โดยใช้คำสั่ง sp_cycle_errorlog

ซึ่ง sp_cycle_errorlog ก็จะให้ผลลัพธ์ในการ cycle log เช่นเดียวกันกับการ restart SQL Server คือจะเกิดการ เปลี่ยนชื่อ error log ไฟล์ตัวปัจจุบัน -->ไปเป็น errorlog.1 และ เปลี่ยน errorlog.1 --> errorlog.2 และ errorlog.2 --> errorlog.3

Tuesday, August 5, 2008

วิธีเปลี่ยนชื่อ SQL Server

ใน MS SQL Server 2000 ใช้ขั้นตอนดังนี้

1. Stop SQL Server agent และให้ Start เป็น Manual ไว้ อย่าให้เป็น Automatic Start
2. เปลี่ยนชื่อ Computer Name ใน Windows --> Reboot
3. Run คำสั่ง sp_dropserver 'ชื่อ server เก่า'
4. Run คำสั่ง sp_addserver 'ชื่อ server ใหม่','local'
5. Restart service ของ SQL Server
6. Start SQL Server agent และตรวจสอบ log

( ยังไม่เคยทดสอบกับ Server ที่มี Replication )