Juri Shutenko Personal Homepage. Visual FoxPro.

Часть 4. Пара статей из Microsoft KnowledgeBase связанных с предметом нашего рассмотрения.

Статья 160916 из Базы Знаний Microsoft. Оригинал статьи находится здесь.
Article ID : 160916 /Last Review : July 1, 2004 / Revision : 1.0

How To Ensure Form Uses Tables from Correct .dbc File Location - Как убедиться, что форма использует таблицы из корректного местонахождения файла базы данных .dbc?

Резюме.

Если вы создаете форму и вводите таблицы в ее DataEnvironment из файла .dbc в определенном каталоге и затем вы перемещаете форму или меняете структуру каталогов, вы можете обнаружить, что продолжает использоваться доступ к файлу .dbc в его изначальном каталоге. Если вы желаете убедиться, что форма с таблицами в ее Data Environment использует таблицы из определенного каталога (а именно, из определенного файла или файлов), укажите путь к файлу .dbc для каждого объекта курсора в методе события BeforeOpenTables объекта DataEnvironment формы.

Подробнее.

Для того, чтобы принудить вашу форму использовать таблицы из файла .dbc из каталога C:\Mydatadir, указажите путь к файлу .dbc коде метода события BeforeOpenTables. Файл .dbc в приведенном примере называется Mydbc.dbc. Независимо от расположения файла .dbc., используемого во время разработки формы, если вы используете приведенный ниже код, будет использоваться файл .dbc в каталоге C:\Mydatadir когда вы запустите форму.

* Place this in the DataEnvironment.BeforeOpenTables() code
 LOCAL lcDatapath, lnBufferMode, lnI, lcI

 * This could be in a format of "\\\share\" or
 * ":\directory\"
 lcDatapath = "C:\myDataDir\"

lnBufferMode = 5

FOR lnI = 1 TO 10            && Assume only 10 or less Cursor objects
   * This assumes that the cursors have been left with the default names
   * in the format of Cursor1, Cursor2, etc.
   IF TYPE("this.cursor"+ALLTR(STR(lnI)))=="O" && Is this cursor an object?

      lcI=ALLTR(STR(lnI))    && Convert the counter to a string

      * Macro substitute the string value into cursorname to set property
      THIS.CURSOR&lcI..DATABASE=(lcDatapath)+'mydbc.dbc'

      * You may also set other properties for cursors here
      THIS.CURSOR&lcI..BUFFERMODEOVERRIDE=lnBufferMode
   ENDIF
ENDFOR


 

Статья 136996 из Базы Знаний Microsoft. Оригинал статьи находится здесь.
Article ID : 136996 / Last Review : August 19, 1999 /Revision : 1.0

Advantages of Manual vs. Automatic DataEnvironment Behavior - Преимущества ручного по сравнению с автоматическим управления поведением DataEnvironment

Таблицы в DataEnvironment могут быть открыты и закрыты либо вручную, либо автоматически. Оба способа открытия и закрытия таблиц имеют определенные преимущества.

Если свойства объекта DataEnvironment' - AutoOpenTables и AutoCloseTables - используют свои значения по умолчанию, а именно - "истинно" - True (.T.), то вам не нужно писать никакого кода для обеспечения открытия и закрытия таблиц и представлений в DataEnvironment.

Установка свойства AutoOpenTables объекта DataEnvironment - в "фальш" - False (.F.) дает разработчику чуть больше контроля над процессом. Таблицы открываются автоматически до наступления события формы Load, но после срабатывания события BeforeOpenTables объекта DataEnvironment. Это означает, что если код в методе, ассоциированном с событием Load формы определяет состояние ошибки (такой как в случае если пользователь открывает форму, которую он или она не имеют права использовать) и возвращает False (.F.), предохраняя форму от открытия, то в результате вы будете иметь отрицательное воздействие на производительность (нравится мне это выражение - performance penalty), так как таблицы будут открыты, но вообще не будут использованы. В таком случае, вызов метода OpenTables объекта вручную, после проверки разрешений безопасности для пользователя, может поднять скорость выполнения приложения. В реальности, открытие таблиц с помощью метода OpenTables вручную не является существенно более быстрым или более медленных, как в случае позволения объекту DataEnvironment открывать их автоматически , но время может быть сохранение в случае если не открывать таблицы вообще, если они не нужны или не могут быть использованы конкретным пользователем в силу указанной выше причины.

Если большая часть или все таблицы в объекте DataEnvironment используются следующей формой, набором форм или объектов DataEnvironment отчета, установка свойства AutoCloseTables объекта DataEnvironment в False (.F.) поднимет скорость закрузки следующего объекта DataEnvironment (формы, набора форм или отчета), так как таблицы уже открыты.

Немного комментария к указанным выше статьям.

Селектор для быстрого перехода на сайты, связанные с Visual FoxPro.