I prefer using external tables to store values for data entry fields - this helps enforce data integrity and minimize data entry errors that cause problems down the road (e.g. a report that is expected to contain certain values, but don't because the end-users are typing in variations of names).
My previous programming language provided a tool that enabled me to add a picklist procedure for a data entry field. If that entry field was active, the user could type alphanumeric characters in the data entry field - the closest match would automatically be displayed (which a WinDev Table control does). If a hotkey (Alt-DownArrow) was pressed, the picklist popup window is displayed onscreen - that picklist popup window allowed users to add / edit / delete picklist database contents "on the fly". This is very intuitive, and adds real value to applications that are used "in the field" by power users.