Оператор обновления SQL (MS ACCESS) - PullRequest
1 голос
/ 13 февраля 2011

Я выполнил следующее утверждение, но оно обновляет только строки цен для всех, кроме символа Assasin (пустое значение).Кроме того, по иронии судьбы были очищены цены в других строках моей таблицы, которые не определены ниже (пустое значение).Кажется, он работает нормально, если я обновлю 2 продукта, хотя.Что может быть не так?

(разрывы строк только для переноса на экран)

"UPDATE Products SET Price = IIf(Product = 'Crysis Wars'," +
CrysisWarsInput.Text +
", IIf(Product = 'Far Cry 2'," + FarCry2Input.Text +
", IIf(Product = 'Day of Defeat Source'," + DODSourceInput.Text +
", IIf(Product = 'GTA 4'," + GTA4Input.Text +
", IIf(Product = 'Asassins Creed'," + AssassinsCreedInput.Text + ")))))";

Ответы [ 2 ]

0 голосов
/ 13 февраля 2011

Re Assasins Creed - вероятно, опечатка. Внимательно посмотрите на значение в ячейке и в вашем запросе - например, это убийца против убийц?

Re остальных (не в запросе); вам нужно добавить предложение where, иначе оно применяется к каждой строке в таблице; это то, как работает SQL ... Я предполагаю, что фильтр IN будет лучше здесь. Например,

where Product in ('some title', 'another title', ...)
0 голосов
/ 13 февраля 2011

Может быть, потому что вы неправильно написали "Assasins Creed"?Либо установите предложение WHERE, либо добавьте Price в качестве значения по умолчанию в последних IIF

"UPDATE Products SET Price = " +
"  IIf(Product = 'Crysis Wars',"          + CrysisWarsInput.Text +
", IIf(Product = 'Far Cry 2',"            + FarCry2Input.Text +
", IIf(Product = 'Day of Defeat Source'," + DODSourceInput.Text +
", IIf(Product = 'GTA 4',"                + GTA4Input.Text +
", IIf(Product = 'Assasins Creed',"       + AssassinsCreedInput.Text + ", Price)))))";
  • других строк в моей таблице, которые не определены ниже

Это то, для чего предназначено WHERE, для ограничения того, какие записи обновлять.

"UPDATE Products SET Price = " +
"  IIf(Product = 'Crysis Wars',"          + CrysisWarsInput.Text +
", IIf(Product = 'Far Cry 2',"            + FarCry2Input.Text +
", IIf(Product = 'Day of Defeat Source'," + DODSourceInput.Text +
", IIf(Product = 'GTA 4',"                + GTA4Input.Text +
", "                                      + AssassinsCreedInput.Text + ")))) +
" WHERE Product in ('Crysis Wars','Far Cry 2','Day of Defeat Source'," +
"  'GTA 4','Assasins Creed')";

Вы также можете использовать оператор SWITCH вместо нескольких IIF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...