Form генерит длинный SQL update

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет, всем!

Уважаемые, подскажите такую вещь:
Можно ли заставить шаблон FORM ABC генерить более короткий SQL update, а то стандартно он вносит все поля из формы в where.

Например:
Clarion 5B, ABC

Код: Выделить всё

user    FILE,DRIVER('ODBC'),PRE(usr)
PRIMARY   KEY(usr:id),PRIMARY
Record    RECORD
id          LONG
name        STRING(20)
phone       STRING(15)
birthday    DATE
          END
        END
В форме меняем поле phone и
генерируется такой SQL update
UPDATE user SET phone='122334' WHERE id = 10 AND name = 'John Zorn' AND
phone='777478' AND birthday='19950828'
А если полей в файле 20, то они таким же образом перечисляются в where.
В то время как достаточно сказать:
UPDATE user SET phone='122334' WHERE id = 10
Ведь у меня есть первичный ключ, однозначно определяющий запись.

---
С уважением, Власов Никита
ООО "БАЙТ" г. Братск
тел/факс (3953) 41-11-21, 41-38-34
факс (3953) 41-41-86
nvlasov@bytebratsk.ru


(Добавление)

такой WHERE порождается использованием WATCH, т е это проверка на изменение записи с другой рабочей станции

если такая проверка тебе не нужна, закоментарь WATCH, ну и конечно же должён быть Primary Key

RTFM:
89 Record Changed By Another Station

The WATCH statement has detected a record on disk that does not match the original version of the record about to be updated in a network situation.

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
IRC: IRC.RINET.RU:6669, Channel #Clarion, AndrewM
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com
Написал: ClaList(2)
Гость

Сообщение Гость »

Первичный ключ должен быть в словаре.

С уважением, Владимир Уколов.
Написал: ClaList(2)
Гость

Сообщение Гость »

Проверка нужна. Как-то я это упустил из виду. Значит пусть будут длинные where.

Nikita Vlasov

можно и по друглму с короткими Where

Открыть транзакцию
Заблокировать запись, UPDATE Файл SET
ПоляПервичногоКлюча=ПоляПервичногоКлюча WHERE
ПоляПервичногоКлюча=ПоляПервичногоКлюча
Закачать её и проверить на изменение
в случае совпадения UPDATE с WHERE по полям первичного ключа
Закрыть транзакцию

Andrew Myalin

Люди, просветите. Зачем здесь проверка таким (имхо) странным образом, с кучей where, если на попытку обновления записи, обновленной с другой станции, SQL сервер даст отлуп? Или это у велосипедистов такой же подход, как и у 1С-ников - с SQL-ем работать как с файлами?
Или все дело в том, что транзакция начинается не при входе в форму редактирования, а при нажатии на OK в этой форме?

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: (057) 7177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

Глянь "Историю создания языка" от CW4, там ББ это обосновывал. Помнится, как раз для обеспечения единого синтаксиса для доступа к БД, но не более того :D

С уважением,
Вячеслав Черников support@finsoft.ryazan.ru

не даст отлуп, а молча обновит запись на серваке

Andrew Myalin

А если транзакция Read Commited и конкурирующая транзакция успела обновить запись первой?

--
Best regards,
Maxim Yemelyanov

(Добавление)
Проверка нужна. Как-то я это упустил из виду. Значит пусть будут длинные where.
повесь проверку на тригеры, а update проводи хп.

--
Всего наилучшего, porutchik mailto:porutchik@mail.primorye.ru
http://personal.primorye.ru/porutchik/
---------------------------------------------------------
Советские боевые слоны - самые боевые слоны в мире!

Написал: ClaList(2)
Ответить