powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обновление данных на MsSQL через курсор.
6 сообщений из 6, страница 1 из 1
Обновление данных на MsSQL через курсор.
    #32452835
Соня_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Мне нужно сделать курсор с данными из 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 все работает и обновляется.
...
Рейтинг: 0 / 0
Обновление данных на MsSQL через курсор.
    #32452998
SSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSV
Гость
автор
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.
lSuccess=CURSORSETPROP( "Tables" ,  "с_dolgn" ) 
...
Рейтинг: 0 / 0
Обновление данных на MsSQL через курсор.
    #32453028
Соня_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSV, все же правильно
lSuccess=CURSORSETPROP("Tables", "dolgn") ... (я проверила)

Дело не в этом. Таблицу, которую надо обновлять, VFP находит, а вот ключевое поле в ней - нет.... хотя я его указываю.... а если указать name (что конечно неправильно), то отрабатывает.
Может, это из-за свойств этого столбца в таблице? Что на нем первичный ключ и идентити?
Кто-нибудь сможет мне помочь???!!!!!!
:((((((((((((((((
я просто в недоумении что ему еще надо и что не так!!!
...
Рейтинг: 0 / 0
Обновление данных на MsSQL через курсор.
    #32453340
SSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSV
Гость
Да нет, Вы не поняли. У Вас же стоит
Код: plaintext
1.
2.
3.
...
r=SQLEXEC(hConn, "SELECT id,name FROM dolgn" , "c_dolgn" ) 
...

где dolgn - исходная серверная таблица,
а c_dolgn - удаленный курсор клиента.

Далее
Код: plaintext
1.
lSuccess=CURSORSETPROP( "Tables" ,  "dolgn" ) 

где 2-м параметром должен быть именно "c_dolgn" - удаленный курсор клиента, а не серверная таблица "dolgn".

Еще у Вас
Код: plaintext
1.
2.
lSuccess=CURSORSETPROP( "UpdateNameList" , "name dolgn.name" ) 
lSuccess=CURSORSETPROP( "UpdatableFieldList" , "name" ) 

а должно быть наоборот
Код: plaintext
1.
2.
lSuccess=CURSORSETPROP( "UpdateNameList" , "name" ) 
lSuccess=CURSORSETPROP( "UpdatableFieldList" , "name dolgn.name" ) 

и еще можно
Код: plaintext
1.
lSuccess=CURSORSETPROP( "UpdatableFieldList" , "id dolgn.id" )

Поэтому keyFieldList и не устанавливается в id.
...
Рейтинг: 0 / 0
Обновление данных на MsSQL через курсор.
    #32453497
Соня_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSV. спасибо большое!!!

Действительно, надо было добавить :
lSuccess=CURSORSETPROP("UpdatableFieldList","id dolgn.id, name dolgn.name")
))))))
Сейчас все нормально работает!

А в остальном все же правильнее:
lSuccess=CURSORSETPROP("Tables", "dolgn")
и
lSuccess=CURSORSETPROP("UpdateNameList","name dolgn.name")
lSuccess=CURSORSETPROP("UpdatableFieldList","name")

проверено опытным путем)))))))
Спасибо!!!!!!
...
Рейтинг: 0 / 0
Обновление данных на MsSQL через курсор.
    #32481542
ArDo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы будете смеяться, но я наступил на те же грабли!

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" опять таки при любом варианте второй строки.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обновление данных на MsSQL через курсор.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]