You are correct, Roger.
DLookup() fails to recognise a ZLS, and wrongly reports it as a Null.
I reported this to Microsoft years ago, but after 15 years of Access, it's
never been fixed.
In the mean time, here's a replacement that does handle the ZLS correctly,
runs faster than DLookup(), and allows you to specify which value you want
if there are several matches:
ELookup() - an extended replacement for DLookup()
at:
http://allenbrowne.com/ser-42.html

Signature
Allen Browne - Microsoft MVP. Perth, Western Australia
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.
> If a table field is configured to ALLOW zero length strings and NOT ALLOW
> nulls, then you would think that a DLOOKUP function that successfully
[quoted text clipped - 14 lines]
>
> http://www.microsoft.com/office/community/en-us/default.mspx?mid=3eb91502-faad-4
d4e-a409-b55824d8104b&dg=microsoft.public.access.modulesdaovba