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. При работе с удаленными данными, придерживайтесь приведенных ниже советов:

Перед началом процесса обновления, вам необходимо использовать команду USE с ключевым словом ONLINE для восстановления соединения с базой данной на сервере. После выбачи команды, Visual FoxPro попытается найти базу данных на сервере, используя информацию об источнике данных, хранящуюся в представлении. После того, как соединение будет установлено, вы можете использовать TABLEUPATE( ) для процесса обновления данных на сервере данными с локального компьютера.

Чтобы убедиться в том, что информация о соединении корректна, независимо от нахождения либо сервера, либо таблиц представления, вам необходимо использовать синтаксис строки соединения вместо именованного соединения.

Обновление пакта записей в локальных

Для процесса пакетного изменения на локальных таблицах, вы можете используовать ручные транзакции, которые позволяют вам вести процесс всего пакета изменений внутри единичной транзакции, вместо серии отдельных транзакций.

Обновление локальных таблиц с автономными представлениями (offline views)
Код Комментарии

USE myofflineview ONLINE EXCLUSIVE

Восстанавливает соединение с сервером и открывает представление.

BEGIN TRANSACTION

IF TABLEUPDATE (2, .F., "myofflineview")

END TRANSACTION

ELSE

MESSAGEBOX("Error Occurred: Update unsuccessful.")

ROLLBACK

ENDIF

Проверяет наличие конфликтов обновления и производит соответствующее обновление.

Пакетное обновление записей в удаленных таблицах

Для производства пакетного обновления на удаленных таблицах, используйте ручные транзации: начиная с TABLEUPDATE( ) и заканчивая процесс либо с SQLCOMMIT( ) или SQLROLLBACK( ).

Для установки соединения для обслуживания ваших транзакций, производимых вручную, вам необходимо использовать CURSORGETPROP( ) на представлении курсора для получения дескриптора соединения, затем установить свойство Transactions в ручной режим.

В приведенном ниже коде, текущая идентификация соединения представления, myview, хранится в hConn1. hConn1 используется для установки свойства Transactions в значение "2", которое соответствует ручным транзакциям.

  CopyCode imageСкопировать код
hConn1 = CURSORGETPROP("CONNECTHANDLE","myview") ;
SQLSETPROP(hConn1,"TRANSACTIONS",2)

После того, как вы установите соединение для обработки обновлений, вы можете использовать TABLEUPDATE( ) для обработки ваших транзакций.

Если главные таблицы размещены на удаленном сервере, таком как SQL Server, вы можете использовать приведенный ниже код в качестве руководства.

Обновление удаленных таблиц с автономными представлениями (offline views)
Код Комментарий

USE myofflineview ONLINE EXCLUSIVE

Восстановление соединения с сервером и открытие представления.

SQLSetProp(liviewhandle,"transactions",2)

SQLSetProp(custviewhandle,"transactions",2)

SQLSetProp(ordviewhandle,"transactions",2)

Установка соединений на представлениях для обработки транзакций вручную.

IF NOT TABLEUPDATE(.T.,.F.,"lineitemsview")

=SQLROLLBACK(ordviewhandle)

=MESSAGEBOX("Can't update line items table")

IF NOT TableUpdate(.T.,.F.,"ordersview")

=SQLROLLBACK(liviewhandle)

=MESSAGEBOX("unable to update the orders table")

IF NOT TABLEUPDATE(.T.,.F.,"customerview")

=SQLROLLBACK(custviewhandle)

=MESSAGEBOX("Can't update customer table")

Else *# check out failure scenarios

IF NOT SQLCOMMIT(liviewhandle)

=SQLROLLBACK(liviewhandle)

IF NOT SQLCOMMIT(ordviewhandle)

=SQLROLLBACK(ordviewhandle)

IF NOT SQLCOMMIT(custviewhandle)

=SQLROLLBACK(custviewhandle)

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

Обработка обновлений и их конфликтов.

Обновление одной записи

Если вы обновляете одну строку, вы можете использовать автоматические транзакции. Поскольку каждое предложение, для производства обновления, удаления или вставки, обрабатывается как отдельная транзакция, откат предыдушей транзакции невозможен.

  CopyCode image Скопировать код
USE customerview ONLINE EXCLUSIVE
GO TO 3
IF TABLEUPDATE (0, .F. workarea)
   * conflict handling code
ENDIF
NoteСовет

Для обнолвения единичной записи в локальной таблице используйте функцию GETNEXTMODIFIED( ).

Прекращение автономных обновлений

Если вы решили, что желаете удалить автономные данные и вернуть представление назад в подключенное представление, вы можете использовать функцию DROPOFFLINE( ).

Для прекращения автономных обновлений, используйте функцию DROPOFFLINE( ) с именем представления.

Для гарантии проверьте возвращаемые значения. (.T.) указывает что процесс завершился успешно, а (.F.) указывает на то, что представление не было закрыто перед выпуском команды.

Приведенный ниже код сбрасывает все изменения, произведенные в поднаборе данных в представлении myview. Представление остается частью базы данных, но его текущий поднабор данных сброшен:

  CopyCode image Скопировать код
DROPOFFLINE("myview")

Вы можете удалить автономные записи, но вы не можете использовать с автономным представлением команды PACK, ZAP или INSERT.

Смотрите также