Для набора данных ADO в зависимости от его назначения можно выбрать тип и местоположение используемого курсора. Местоположение курсора задается свойством
type TCursorLocation = (clUseServer, clUseClient); property CursorLocation: TCursorLocation;
Курсор может находиться на сервере (CIUseServer) или на клиенте
(CIUseClient).
Серверный курсор используется при работе с большими
наборами данных, которые нецелесообразно пересылать клиенту целиком. При этом
несколько снижается скорость работы клиентского набора данных.
Клиентский курсор обеспечивает передачу набора данных
клиенту. Это положительно сказывается на быстродействии, но такой курсор разумно
использовать только для небольших наборов данных, не загружающих канал связи
с сервером.
При использовании клиентского курсора необходимо дополнительно установить свойство
которое управляет обменом данных клиента с сервером. Если соединение с сервером быстрое, можно использовать значение
moMarshalAll, разрешающее возврат серверу всех записей набора данных. В противном случае для ускорения работы компонента можно применить свойство
moMarshalModifiedOnly, обеспечивающее возврат только модифицированных клиентом записей.
ctunspecified — курсор не задан, тип курсора определяется
возможностями источника данных;
ctOpenForwardOnly — однонаправленный курсор, допускающий перемещение только вперед; используется при необходимости быстрого одиночного прохода по всем записям набора данных;
ctKeyset — двунаправленный локальный курсор, не обеспечивающий просмотр добавленных и удаленных другими пользователями записей;
ctDynamic — двунаправленный курсор, отображает все изменения, требует наибольших затрат ресурсов;
ctStatic — двунаправленный курсор, полностью игнорирует изменения, внесенные другими пользователями.
Примечание
Если курсор расположен на клиенте
(CursorType = ciusedient), то для него доступен только один тип — ctStatic.
Соответственно до и после каждого перемещения курсора в наборе данных вызываются методы -
обработчики:
const Error: Error; var EventStatus: TEventStatus)
if object;
property OnMoveComplete: TRecordsetErrorEvent;
где параметр Reason позволяет узнать, какой метод вызвал это перемещение.
Знаете ли Вы, что cогласно релятивистской мифологии "гравитационное линзирование - это физическое явление, связанное с отклонением лучей света в поле тяжести. Гравитационные линзы обясняют образование кратных изображений одного и того же астрономического объекта (квазаров, галактик), когда на луч зрения от источника к наблюдателю попадает другая галактика или скопление галактик (собственно линза). В некоторых изображениях происходит усиление яркости оригинального источника." (Релятивисты приводят примеры искажения изображений галактик в качестве подтверждения ОТО - воздействия гравитации на свет) При этом они забывают, что поле действия эффекта ОТО - это малые углы вблизи поверхности звезд, где на самом деле этот эффект не наблюдается (затменные двойные). Разница в шкалах явлений реального искажения изображений галактик и мифического отклонения вблизи звезд - 1011 раз. Приведу аналогию. Можно говорить о воздействии поверхностного натяжения на форму капель, но нельзя серьезно говорить о силе поверхностного натяжения, как о причине океанских приливов. Эфирная физика находит ответ на наблюдаемое явление искажения изображений галактик. Это результат нагрева эфира вблизи галактик, изменения его плотности и, следовательно, изменения скорости света на галактических расстояниях вследствие преломления света в эфире различной плотности. Подтверждением термической природы искажения изображений галактик является прямая связь этого искажения с радиоизлучением пространства, то есть эфира в этом месте, смещение спектра CMB (космическое микроволновое излучение) в данном направлении в высокочастотную область. Подробнее читайте в FAQ по эфирной физике.