Those that know me hear me say often that “I hate computers.” The first time someone hears me say that, their comment is usually “But, you make your living with computers!” I have to politely tell that it doesn’t mean I have to like them.
I was recently working on an issue discovered by our QA tester. We have a feature that allows access to dBase database files. As most programs that provide this access, we utilize the Microsoft Jet Database Engine to perform the heavy lifting. (I know, Jet is on it’s way out, but for now it still works.)
During my development, I tested this feature many times without any problems. Now, our QA tester opens a problem ticket stating that he cannot see any of the database’s columns. I attempt to duplicate it but cannot on my development machine, so I turn to one of my test machines.
Using a few different machines, I find that the issue is not the test file or the version of the operating system. What is strange is that I can get it to work on one machine but cannot on another with the same operating system. What’s worse, is that the error is not throwing an exception so my utility is not displaying anything to the user.
I do manage to finally get the application to throw an exception. What’s strange is that the exception message is “Microsoft jet database engine could not find object ‘xyz.dbf'”. SAY WHAT??? Not possible, the file is RIGHT THERE!!
Next I turn to my favorite tool, the web search. A bit of searching turned up the following interesting text:
3011 – Microsoft jet database engine could not find object ‘xyz.dbf’… Notice the dbf file extension. A dbf file name needs to be in 8.3 DOS name format. It is quite possible that some machines can open the file with a longer file name and others it must be in 8.3 DOS name format.
Now, isn’t that interesting? Long file names have been in existence since Windows 95, but yet the jet database engine doesn’t support them after almost 15 years!
By renaming the file to a DOS 8.3 format name resulted in a successful test on all systems. (Yes, the internal “short” name, the one with the ‘~’, also worked.) What is interesting is that one machine worked just fine with the long file name, but the rest didn’t. If anyone has any input in to why long names work on some systems and not others, I’d appreciate the input.