Я создал таблицу ExportG3R с текстовыми полями для Расширение и имя . Ваш запрос работал с name значениями типа "Litzner, Mike". Однако значение name , которое не включает запятую, такое как «Litzner Mike», дало мне #Error для LastName и «Litzner Mike» для FirstName. И если name равно Null, это дает мне #Error для обоих. Ни один из них не был прерывателем сделки для SELECT, пока я не попытался отсортировать по LastName и / или FirstName. При попытке выполнить такие сортировки обработчик базы данных Access 2003 ответил «Недопустимый вызов процедуры», что не является тем же сообщением об ошибке, которое вы получаете.
Итак, хотя я не уверен, что моя ситуация в точности совпадает с вашей, я предлагаю вам попробовать запрос с предложением WHERE, чтобы получить только те строки, которые имеют ненулевые значения name , а также содержат запятая.
SELECT
e.Extension,
Left(e.[name],InStr(e.[name],",")-1) AS LastName,
Trim(Mid(e.[name],InStr(e.[name],",")+1,Len(e.[name])-InStr(e.[name],","))) AS FirstName
FROM ExportG3R AS e
WHERE e.name Like "*,*"
ORDER BY ORDER BY 2,3;
Другая проблема заключается в том, что имя является зарезервированным словом. При создании этой таблицы в режиме конструктора с помощью Access 2007 выдается предупреждение об имени этого поля. Попробуйте создать одноразовую таблицу в представлении «Дизайн» и прочитайте справку, которую он предлагает, когда он предупреждает о name . Если это вообще возможно, замените его на что-то, что не является зарезервированным словом ... Возможно, FullName.
Наконец, я думаю, что было бы проще, если бы поле имени было разделено на два поля в самой таблице. Хранение имен как «Last, First» объединяет 2 атрибута в одном поле. Поэтому, когда вам нужен любой из них, вы должны разделить их. Их проще хранить отдельно, а затем объединять, когда они вам нужны, как «Last, First»:
SELECT LastName & ", " & FirstName AS FullName