Удалите последнюю запятую в операторе SQL UPDATE, используя StrUtils в Delphi. - PullRequest
0 голосов
/ 08 октября 2011

Предположим, что у нас есть этот оператор SQL:

UPDATE article SET saison='12E', mode='ECH', client='SAS', WHERE ID='3448fe81-1bec-e011-8546-001f3ccf8f20'

Этот оператор SQL генерируется связанными строками, подобными этому:

// saison change
procedure TarticleEditForm.saisonComboChange(Sender: TObject);
begin
    SQLQuery := SQLQuery + 'saison=''' + saisonCombo.Text + ''',';
end;

// client change
procedure TarticleEditForm.clientComboChange(Sender: TObject);
begin
    SQLQuery := SQLQuery + 'client=''' + clientCombo.Text + ''',';
end;
.
.
.

Как видите, перед запятой стоит "ГДЕКак я могу удалить последнюю запятую, чтобы иметь правильное утверждение:

UPDATE article SET saison='12E', mode='ECH', client='SAS' WHERE ID='3448fe81-1bec-e011-8546-001f3ccf8f20'

RMQ: число запятой не является фиксированным, это может быть 1, 2, 5 ...

благодарюВы.

Решение заменяет «, ГДЕ» на «ГДЕ»

 SQLQuery := StringReplace(SQLQuery , ', WHERE', 'WHERE', [rfReplaceAll]);

Я использую это для отслеживания каждого изменения в таблице HISTORY.Спасибо всем.

Ответы [ 2 ]

7 голосов
/ 08 октября 2011

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

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

[псевдокод]

for i=0 to fields_changed.count {
  sql = sql + fields_changed(i).field_name + " = " + fields_changed(i).new_value
  if i < fields_changed.count {
    sql = sql + ", "
  }
}
sql = sql + " WHERE ..."

РЕДАКТИРОВАТЬ: другой вариант - просто выполнить замену строки в , WHERE на WHERE непосредственно перед выполнением оператора;поскольку слово «где» является зарезервированным словом и не должно встречаться более одного раза в вашем операторе SQL.Это может быть более простым решением, даже если это похоже на взлом.

2 голосов
/ 08 октября 2011

другой вариант - уменьшить длину строки на 1 символ перед добавлением предложения WHERE.

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