Вопрос про UPDATE SQL

Добрый день! Есть некая процедура записи изменений в таблицу через UPDATE...
Никак не могу причесать её к нормальному виду. Данные переносятся в таблицу из курсора, вот вырезка из процедуры:
[code]************************************************************
* Запись данных
************************************************************
*** Параметры ***********
* tcTable - Таблица, в которую пишем
* tnDataSessionId - Датасессия
* tnBuferMode - тип буферизации
* tcKeyField - поле с ID изменяемой записи
* tcFieldSet - установки SET для изменяемых полей
* tcCursor - курсор, на основе которого вносятся изменения в таблицу
*****
* В курсоре должно быть специальное поле edit_mode со следующими значениями:
* 0 - запись не изменилась
* 1 - новая запись
* 2 - изменённая запись
* 3 - удаление записи
**************************************
* Пример вызова
* savetable("bases",,5,"id_","NAME_ = m.NAME_, PATH_ = m.PATH_",cur_kfg)[/code]
Дальше пропускаю код и вот суть проблемы:
[code]SELECT (tcCursor)
LOCAL lcId
SCAN FOR edit_mode > 0
m.lcId = eval(tcKeyField)
DO CASE
CASE edit_mode = 1 && новая запись
SCATTER MEMO MEMVAR
INSERT INTO (tcTable) FROM MEMVAR
CASE edit_mode = 2 && корректировка записи
SCATTER MEMO MEMVAR
SELECT (tcTable)
*!* LOCATE FOR eval(tcKeyField) == m.lcId
*!* GATHER MEMVAR MEMO
LOCAL lcCommand
lcCommand = "UPDATE " + tcTable + " SET " + tcFieldSet + " WHERE " + tcKeyField + " == m.lcId"
&lcCommand
* UPDATE (tcTable) SET &tcFieldSet WHERE eval(tcKeyField) == m.lcId
CASE edit_mode = 3 && удаление записи
DELETE FOR eval(tcKeyField) == m.lcId IN (tcTable)
ENDCASE
ENDSCAN [/code]
Проблема именно в корректировке записи. В приведённом коде, с использованием макро [b]lcCommand[/b] всё работает, но хотелось бы обойтись без макроподстановки. А напрямую команду UPDATE сформировать нормально не получается. То молча не записывает, то выдаёт ошибки...
Вот это, например: [code]UPDATE (tcTable) SET &tcFieldSet WHERE eval(tcKeyField) == m.lcId[/code] просто не пишет ничего, а вот так: [code]UPDATE (tcTable) SET (tcFieldSet) WHERE eval(tcKeyField) == m.lcId[/code] выдаёт ошибки синтаксиса... Вариаций было несколько - результат один.
Можно ли как-то победить? Или оставить как есть?

0

Автор публикации

Пользователи не найдены
Оставить комментарий
Авторизация
*
*
Генерация пароля