Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
23.03.2004, 12:28
|
|||
|---|---|---|---|
Обновление данных на MsSQL через курсор. |
|||
|
#18+
Добрый день! Мне нужно сделать курсор с данными из MsSQL, при изменении в котором обновляются данные на сервере. таблица dolgn, обновляемое поле name, ключевое id. id - identity, not null, int(4), первичный ключ. Я пишу: nSet=SQLSETPROP(hConn, "Asynchronous", .F. ) nSet=SQLSETPROP(hConn, "Transactions", 1 ) r=SQLEXEC(hConn,"SELECT id,name FROM dolgn","c_dolgn") lSuccess=CURSORSETPROP("SendUpdates", .T.) lSuccess=CURSORSETPROP("Tables", "dolgn") lSuccess=CURSORSETPROP("UpdateNameList","name dolgn.name") lSuccess=CURSORSETPROP("WhereType",1) lSuccess=CURSORSETPROP("KeyFieldList","id") lSuccess=CURSORSETPROP("UpdatableFieldList","name") После этого в открытом курсоре c_dolgn при попытке изменения возникает сообщение: No key column was specified for the update table "dolgn". Use the KeyFieldList property of the cursor. В чем ошибка? При назначении ключевым полем name все работает и обновляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.03.2004, 13:28
|
|||
|---|---|---|---|
|
|||
Обновление данных на MsSQL через курсор. |
|||
|
#18+
автор nSet=SQLSETPROP(hConn, "Asynchronous", .F. ) nSet=SQLSETPROP(hConn, "Transactions", 1 ) r=SQLEXEC(hConn,"SELECT id,name FROM dolgn","c_dolgn") lSuccess=CURSORSETPROP("SendUpdates", .T.) lSuccess=CURSORSETPROP("Tables", "dolgn") lSuccess=CURSORSETPROP("UpdateNameList","name dolgn.name") lSuccess=CURSORSETPROP("WhereType",1) lSuccess=CURSORSETPROP("KeyFieldList","id") lSuccess=CURSORSETPROP("UpdatableFieldList","name") Имя удаленного курсора же "c_dolgn", так что надо заменить на Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.03.2004, 13:39
|
|||
|---|---|---|---|
Обновление данных на MsSQL через курсор. |
|||
|
#18+
SSV, все же правильно lSuccess=CURSORSETPROP("Tables", "dolgn") ... (я проверила) Дело не в этом. Таблицу, которую надо обновлять, VFP находит, а вот ключевое поле в ней - нет.... хотя я его указываю.... а если указать name (что конечно неправильно), то отрабатывает. Может, это из-за свойств этого столбца в таблице? Что на нем первичный ключ и идентити? Кто-нибудь сможет мне помочь???!!!!!! :(((((((((((((((( я просто в недоумении что ему еще надо и что не так!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.03.2004, 15:51
|
|||
|---|---|---|---|
|
|||
Обновление данных на MsSQL через курсор. |
|||
|
#18+
Да нет, Вы не поняли. У Вас же стоит Код: plaintext 1. 2. 3. где dolgn - исходная серверная таблица, а c_dolgn - удаленный курсор клиента. Далее Код: plaintext 1. где 2-м параметром должен быть именно "c_dolgn" - удаленный курсор клиента, а не серверная таблица "dolgn". Еще у Вас Код: plaintext 1. 2. а должно быть наоборот Код: plaintext 1. 2. и еще можно Код: plaintext 1. Поэтому keyFieldList и не устанавливается в id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.03.2004, 16:47
|
|||
|---|---|---|---|
Обновление данных на MsSQL через курсор. |
|||
|
#18+
SSV. спасибо большое!!! Действительно, надо было добавить : lSuccess=CURSORSETPROP("UpdatableFieldList","id dolgn.id, name dolgn.name") )))))) Сейчас все нормально работает! А в остальном все же правильнее: lSuccess=CURSORSETPROP("Tables", "dolgn") и lSuccess=CURSORSETPROP("UpdateNameList","name dolgn.name") lSuccess=CURSORSETPROP("UpdatableFieldList","name") проверено опытным путем))))))) Спасибо!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.04.2004, 17:29
|
|||
|---|---|---|---|
Обновление данных на MsSQL через курсор. |
|||
|
#18+
Вы будете смеяться, но я наступил на те же грабли! SQLEXEC(_sqlconn, _otm_query, "cur_otm") CURSORSETPROP("SendUpdates", .T.) CURSORSETPROP("Tables", "OTM_TRANSACTION") или ("Tables", " CUR_OTM ") CURSORSETPROP("UpdateType",1) CURSORSETPROP("KeyFieldList","VOUCHER") CURSORSETPROP("WhereType",4) CURSORSETPROP("UpdateNameList","AMOUNTMST, QTY") CURSORSETPROP("UpdatableFieldList", "AMOUNTMST, QTY") По выходу из курсора (если он изменялся) пролучаю : No update tables are specified. Use the Table property of the cursor Если изменяю последнюю строку CURSORSETPROP("UpdatableFieldList", "AMOUNTMST OTM_TRANSACTION.AMOUNTMST, QTY OTM_TRANSACTION.QTY") То до изменений в курсоре дело не доходит, получаю останов на последней строке: Invalid update column name "OTM_TRANSACTION.AMOUNTMST" опять таки при любом варианте второй строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&tablet=1&tid=1596811]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 384ms |

| 0 / 0 |
