2016-08-25 3 views
0

Работая с некоторыми запросами на вставку/обновлении приложения сегодня и наткнулся на результат, которого я не ожидал.Почему я не могу использовать имя поля в качестве параметра в запросе параметра Access?

Запросы

Мои вставки запросов выглядеть примерно так:

PARAMETERS nm TEXT(10), st TEXT(2); 
INSERT INTO park(pname, pstate) 
VALUES([nm],[st]); 

И их обновления компаньоны были такими:

PARAMETERS id LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [id]; 

В таблице они обновляют было похоже на это :

park 
ID LONG | pname TEXT(10) | pstate TEXT(2) 

Неожиданный результат

Работа через написание запросов, я проверил каждый, запустив его с базой данных и предоставление тестовых значений для различных параметров. После запроса на вставку я проверил обновление, обновив вновь вставленную запись.

В большинстве случаев таблицы были пустыми, поэтому обновление просто обновило бы одну запись на месте.

Однако как только я побежал обновления на ранее населенной таблицы, я обнаружил, что запрос пытается обновить ВСЕ записи, а не только тот, чей ID был снабжен через параметр.

Вопрос почему ??

ответ

5

Проблема

Хотя ID, конечно, было поле в park таблице, используя id в качестве параметра по существу с указанием следующих в WHERE пункте:

WHERE ID = id; 

или

WHERE ID = ID; 

С тех пор ID is всегда, равный самому себе, UPDATE попытался обновить ВСЕ записей вместо ожидаемой записи с предоставленным ID.

Решение

Чтобы устранить эту проблему, я просто использовал первый и последняя буква таблицы обновляется до id для каждого случая я обновляя записи, идентифицированной ее ID. Таким образом, рабочий код - который обновляет только запись определена - это:

PARAMETERS pkid LONG, nm TEXT(10), st TEXT(2); 
UPDATE park 
SET 
pname = [nm], pstate = [st] 
WHERE 
ID = [pkid]; 

Очевидно, что я не обращал внимание в то время как я пишу запрос - в то время как я использовал разные имена для других параметров, я Бесполезный Не делайте этого, когда дело доходит до ID для запроса на обновление.

Bottom Line

Всякий раз, когда работа с paramaterized запросов, убедитесь, что имена параметров НЕ соответствуют имена полей вашей таблицы.

Выполнение этого позволит избежать упомянутой выше проблемы, а также других связанных с этим вопросов.

Вы также должны избегать зарезервированных слов для имен таблиц, полей и параметров.

Надеюсь, это поможет кому-то избежать неприятного сюрприза при обновлении записей - или попытаться выяснить, почему их запросы параметров не работают.