Abstract
Our Finance organization uses QuickBooks, which they run on their Macs via a Windows virtual machine. After our Controller and Financial Analyst were given new MacBooks, they began to receive “Error: Connection Has Been Lost” from their QuickBooks session several times a day, forcing them to re-open QuickBooks. We discovered that by modifying the MacBooks’ Energy Saver preferences, changing the Computer sleep setting from 15 minutes to 2 hours, we were able to eliminate the problem.
Our QuickBooks Setup
- QuickBooks Premier Accountant Edition 2010
- multi-user mode
- The QuickBooks file is kept on a fileserver; it’s accessed over the network
- Older Client:
- iMac OS X 10.7 Lion
- Parallels Desktop 6 for Mac
- Windows XP (Virtual Machine)
- Newer Client
- MacBook OS X 10.8 Mountain Lion
- VMware Fusion 5
- Windows 7 64-bit (Virtual Machine)
The Differential Diagnosis
We weren’t sure why the newer clients were having this problem but the older clients were not. We checked the log files on Windows Virtual Machine (Event Viewer → Windows Logs → Application):
"An unexpected error has occured in ""QuickBooks: Premier Accountant Edition 2010"":
DQE execution failed. Could not retrieve COUNT(user name)."
"An unexpected error has occured in ""QuickBooks: Premier Accountant Edition 2010"":
ExecuteQuery failed (DETAIL AVAILABLE), error id: -6019, sub id: 0, 'Succeeded', ''"
"An unexpected error has occured in ""QuickBooks: Premier Accountant Edition 2010"":
DB error -101 ErrorMessage:'Not connected to a database' from file:'..srcSQLDynamicQuery.cpp' at line 274 from function:'DQE::DMDQEDynamicQuery::DBDoQuery'"
"An unexpected error has occured in ""QuickBooks: Premier Accountant Edition 2010"":
DB error -101 ErrorMessage:'Not connected to a database' from file:'..srcDMSQLTransaction.cpp' at line 318 from function:'DBMgr::SADMTransaction::DBSQLGetUTCTimestamp'"
"An unexpected error has occured in ""QuickBooks: Premier Accountant Edition 2010"":
DB error -308 ErrorMessage:'Connection was terminated' from file:'..srcDMSQLTransaction.cpp' at line 318 from function:'DBMgr::SADMTransaction::DBSQLGetUTCTimestamp'"
[ warning] [vmusr:vmusr] pbrpc::AsyncSocketRpcServer::SocketErrorOccurred: An error 4 occurred on Socket 1F55660
And we checked the logs (/var/log/system.log) on the OS X host, too:
vmnt: VMNetDisconnect called for port 0xfffffff80
False Starts
We tried to fix this a number of ways:
- Changed their Windows Virtual Machine’s interface from NAT to bridged (note: we later switched back to NAT because that made VPN connections much easier)
- Turned off their Windows Virtual Machine’s 3D Acceleration (fixed an unrelated java problem, but didn’t fix this one)
- Changed their Windows Virtual Machine’s energy settings (Control Panel → System and Security → Power Options → Change when the computers sleeps → Put the computer to sleep (30 minutes) → Never)
The Solution
We finally noticed (while perusing /var/log/system.log on the OS X machine) that a sleep event preceded every QuickBooks disconnect.
kernel[0]: Previous Sleep Cause: 5
At that point we modified the sleep settings (System Preferences → Energy Saver → Computer sleep) from 10 minutes to 2 hours. Since we made that change a week ago, the problem has only occurred once.