After you're finished offline, you can update the data on the server using the same table update transactions you usually use with online data. При работе с удаленными данными, придерживайтесь приведенных ниже советов:
-
Для обновления единичной записи используйте автоматические транзакции.
-
Для пакетного обновления используйте ручные транзакции.
-
При необходимости включите код для обнаружения конфликтов обновления, создайте журнал регистрации конфликтов (log-файл) и разберитесь с конфликтами.
Перед началом процесса обновления, вам необходимо использовать команду USE с ключевым словом ONLINE для восстановления соединения с базой данной на сервере. После выбачи команды, Visual FoxPro попытается найти базу данных на сервере, используя информацию об источнике данных, хранящуюся в представлении. После того, как соединение будет установлено, вы можете использовать TABLEUPATE( ) для процесса обновления данных на сервере данными с локального компьютера.
Чтобы убедиться в том, что информация о соединении корректна, независимо от нахождения либо сервера, либо таблиц представления, вам необходимо использовать синтаксис строки соединения вместо именованного соединения.
Обновление пакта записей в локальных
Для процесса пакетного изменения на локальных таблицах, вы можете используовать ручные транзакции, которые позволяют вам вести процесс всего пакета изменений внутри единичной транзакции, вместо серии отдельных транзакций.
Код | Комментарии |
---|---|
|
Восстанавливает соединение с сервером и открывает представление. |
|
Проверяет наличие конфликтов обновления и производит соответствующее обновление. |
Пакетное обновление записей в удаленных таблицах
Для производства пакетного обновления на удаленных таблицах, используйте ручные транзации: начиная с TABLEUPDATE( ) и заканчивая процесс либо с SQLCOMMIT( ) или SQLROLLBACK( ).
Для установки соединения для обслуживания ваших транзакций, производимых вручную, вам необходимо использовать CURSORGETPROP( ) на представлении курсора для получения дескриптора соединения, затем установить свойство Transactions в ручной режим.
В приведенном ниже коде, текущая идентификация соединения представления, myview
, хранится в hConn1
. hConn1
используется для установки свойства Transactions в значение "2", которое соответствует ручным транзакциям.
![]() | |
---|---|
hConn1 = CURSORGETPROP("CONNECTHANDLE","myview") ; SQLSETPROP(hConn1,"TRANSACTIONS",2) |
После того, как вы установите соединение для обработки обновлений, вы можете использовать TABLEUPDATE( ) для обработки ваших транзакций.
Если главные таблицы размещены на удаленном сервере, таком как SQL Server, вы можете использовать приведенный ниже код в качестве руководства.
Код | Комментарий |
---|---|
|
Восстановление соединения с сервером и открытие представления. |
|
Установка соединений на представлениях для обработки транзакций вручную. |
|
Обработка обновлений и их конфликтов. |
Обновление одной записи
Если вы обновляете одну строку, вы можете использовать автоматические транзакции. Поскольку каждое предложение, для производства обновления, удаления или вставки, обрабатывается как отдельная транзакция, откат предыдушей транзакции невозможен.
![]() | |
---|---|
USE customerview ONLINE EXCLUSIVE GO TO 3 IF TABLEUPDATE (0, .F. workarea) * conflict handling code ENDIF |
![]() |
---|
Для обнолвения единичной записи в локальной таблице используйте функцию GETNEXTMODIFIED( ). |
Прекращение автономных обновлений
Если вы решили, что желаете удалить автономные данные и вернуть представление назад в подключенное представление, вы можете использовать функцию DROPOFFLINE( ).
Для прекращения автономных обновлений, используйте функцию DROPOFFLINE( ) с именем представления.
Для гарантии проверьте возвращаемые значения. (.T.) указывает что процесс завершился успешно, а (.F.) указывает на то, что представление не было закрыто перед выпуском команды.
Приведенный ниже код сбрасывает все изменения, произведенные в поднаборе данных в представлении myview
. Представление остается частью базы данных, но его текущий поднабор данных сброшен:
![]() | |
---|---|
DROPOFFLINE("myview") |
Вы можете удалить автономные записи, но вы не можете использовать с автономным представлением команды PACK, ZAP или INSERT.