Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обновление данных на 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, 12: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:28 |
|
||
|
Обновление данных на MsSQL через курсор.
|
|||
|---|---|---|---|
|
#18+
SSV, все же правильно lSuccess=CURSORSETPROP("Tables", "dolgn") ... (я проверила) Дело не в этом. Таблицу, которую надо обновлять, VFP находит, а вот ключевое поле в ней - нет.... хотя я его указываю.... а если указать name (что конечно неправильно), то отрабатывает. Может, это из-за свойств этого столбца в таблице? Что на нем первичный ключ и идентити? Кто-нибудь сможет мне помочь???!!!!!! :(((((((((((((((( я просто в недоумении что ему еще надо и что не так!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 13:39 |
|
||
|
Обновление данных на 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, 15:51 |
|
||
|
Обновление данных на 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") проверено опытным путем))))))) Спасибо!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 16:47 |
|
||
|
Обновление данных на 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" опять таки при любом варианте второй строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 17:29 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32452998&tid=1596811]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 406ms |

| 0 / 0 |
