Распечатать страницу

Функции для баз данных в VFP

« Назад

Функция

DBUSED(cDatabaseName)

возвращает .T., если база данных cDatabaseName открыта, или .F. – в противном случае.

Пример:

close databases

open database d:\HomeLibrary\HomeLibrary

? DBUsed('HomeLibrary')  && Напечатает: .T.

Функция

DBC( )

возвращает полное имя DBC-файла текущей базы данных или, если таковой не имеется, пустую строку. База данных становится текущей после выполнения команд OPEN DATABASE, CREATE DATABASE или устанавливается командой SET DATABASE.

Функция

INDBC(cDatabaseObjectName, cType)

возвращает .T., если указанный объект имеется в текущей базе данных, или .F. – в противном случае.

Если нет текущей базы данных, тогда функция INDBC( ) генерирует ошибку.

Параметры:

cDatabaseObjectName – имя соединения, поля, индекса, таблицы или SQL-вида, принадлежность которого текущей базе данных нужно установить.

cType – тип объекта cDatabaseObjectName. Может принимать приведенные в табл. 14.13 значения.

Таблица 14.13

Возможные значения параметра cType

Значение cType

Описание cDatabaseObjectName

"CONNECTION"

Имя соединения

"FIELD"

Имя поля таблицы или вида

"INDEX"

Имя индекса

"TABLE"

Имя таблицы

"VIEW"

Имя SQL-вида

Имени поля должны предшествовать длинное имя таблицы или вида и точка.

Пример. Создается база данных с двумя таблицами и проверяется, есть ли поле Name в таблице Seas базы данных World.

create database d:\World

create table d:\Countries (Name C(50))

create table d:\Seas (Name C(50))

&& Проверяем, есть ли текущая база данных

if not Empty(DBC( )) then

&& Проверяем, есть в базе данных таблица Seas

if InDBC('Seas', "TABLE") then

    && Проверяем, есть в базе данных поле Seas.Name

if InDBC('Seas.Name', "FIELD") then

wait window "В базе данных World имеется поле Name таблицы Seas"

endif

endif

endif

&& Закрываем базу данных и ее таблицы

&& и удаляем файлы базы данных и ее таблиц с диска

close databases

delete database d:\World deletetables

Функция

DBGETPROP(cName, cType, cProperty)

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

База данных, которой принадлежит объект cName, должна быть открыта. Использовать команду USE, чтобы открыть таблицу или вид базы данных, прежде чем вызвать DBGETPROP( ), нет необходимости.

Параметры:

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

? DBGetProp('WorkType.TypeId', 'FIELD', 'Caption')

cType – вид компонента, значение свойства которого возвращает DBGETPROP( ). Может принимать приведенные в табл. 14.14 значения.

Таблица 14.14

Возможные значения параметра cType

Значение cType

Описание cName

"CONNECTION"

Имя соединения в текущей базе данных

"DATABASE"

Имя текущей базы данных

"FIELD"

Имя поля таблицы или вида текущей базы данных

"TABLE"

Имя таблицы текущей базы данных

"VIEW"

Имя вида текущей базы данных

cProperty – строка с именем свойства, значение которого возвращает DBGETPROP( ). Может принимать приведенные в табл. 14.15 – 14.20 значения.

Таблица 14.15

Свойства соединения (cType = "CONNECTION")

cProperty

Тип

Описание

Статус

"Asynchronous"

L

Режим соединения. Значение .F. (по умолчанию) означает синхронное соединение, .T. – асинхронное

Чтение /
запись

"BatchMode"

L

Если равно .T. (по умолчанию), то все результаты передаются сразу; в противном случае, если равно .F., результаты передаются порциями (пакетами)

"

"Comment"

C

Комментарий соединения

"

"ConnectString"

C

Строка, употребляемая для установления соединения

"

"ConnectTimeout"

N

Интервал ожидания (в секундах), после превышения которого возникнет ошибка соединения. Если задать равным нулю, то интервал будет бесконечным и ошибка ожидания (простоя) никогда не возникнет. Значение по умолчанию – 15 с. ConnectTimeOut можно задавать в диапазоне 0 – 600 с

"

"Database"

C

Имя базы данных, задаваемое в проектировщике соединений или опцией DATABASE команды CREATE CONNECTION

"

"DataSource"

C

Имя ODBC-источника данных

"

DisconnectRollback

L

Задает, будет ли выполняемая транзакция завершаться (.F., по умолчанию) или отменяться (.T.), при вызове функции SQLDISCONNECT( ).
На соединения с автоматически управляемыми транзакциями эта установка влияния не оказывает

 

"DispLogin"

N

Целое число, определяющее, когда появляется ODBC Login-диалог (входа в соединение). Свойство DispLogin принимает следующие значения:
·              1 или DB_PROMPTCOMPLETE (по умолчанию) – VFP открывает ODBC Login-диалог, если отсутствует часть требуемой для установления соединения информации;
·              2 или DB_PROMPTALWAYS – ODBC Login-диалог открывается всегда, позволяя изменить параметры соединения;
·              3 или DB_PROMPTNEVER – ODBC Login-диалог никогда не открывается. Если часть информации, необходимой для установления соединения, отсутствует, то VFP генерирует ошибку.
Константы DB_PROMPTCOMPLETE и др. могут быть заданы взамен цифр, если имеется ссылка на файл FoxPro.h

"

"DispWarnings"

L

Если равно .T. (по умолчанию), то выводятся предупреждения, не вызывающие прерывание и поступающие от удаленной таблицы, ODBC или VFP; предупреждения не выводятся, если значение свойства равно .F.

"

"IdleTimeout"

N

Интервал бездействия (в минутах). Активное соединение  становится неактивным после бездействия в течение этого интервала. Значение по умолчанию – 0 (неопределенный)

"

"PacketSize"

N

Размер сетевого пакета, используемый соединением. Подбор нужного значения позволяет существенно увеличить производительность. Равен 512, 1024, 2048, 4096 или 8192 байт. Значение по умолчанию – 4096 байт (4K)

"

"PassWord"

C

Пароль соединения

"

"QueryTimeout"

N

Интервал ожидания выполнения запроса (в секундах), после превышения которого генерируется ошибка. Значение по умолчанию – 0 (бесконечный). Диапазон изменения от 0 до 600 с

"

"Transactions"

N

Целое число, определяющее, как соединение управляет транзакциями удаленной таблицы. Свойство принимает следующие значения:
·              1 или DB_TRANSAUTO (по умолчанию) – транзакции выполняются автоматически;
·              2 или DB_TRANSMANUAL – транзакции управляются программно; для этого употребляются функции SQLCOMMIT( ) и SQLROLLBACK( )

"

"UserId"

C

Идентификатор пользователя

"

"WaitTime"

N

Время (в миллисекундах), которое VFP ожидает, прежде чем выполняет проверку, завершился ли SQL-оператор или нет. Значение по умолчанию – 100 мс

"

Таблица 14.16

Свойства базы данных (cType = "DATABASE")

cProperty

Тип

Описание

Статус

"Comment"

C

Комментарий базы данных

Чтение /
запись

"DBCEventFileName"

C

Относительный путь и имя файла внешней программы-обработчика DBC-событий

"

"DBCEvents"

L

Содержит .T., если используются DBC-события, или .F. – в противном случае

"

"Version"

N

Номер версии базы данных

Чтение

Таблица 14.17

Свойства поля таблицы базы данных (cType = "FIELD")

cProperty

Тип

Описание

Статус

"Caption"

C

Заголовок поля. Если содержит в начале знак "=", то интерпретируется VFP как выражение. В противном случае воспринимается как строка символов

Чтение /
запись

"Comment"

C

Комментарий поля

"

"DefaultValue"

C

Значение по умолчанию

Чтение

"DisplayClass"

C

Имя класса, используемого для отображения поля

Чтение /
запись

"DisplayClassLibrary"

C

Путь к библиотеке классов, содержащей класс, указанный в свойстве DisplayClass

"

"Format"

C

Формат, используемый при представлении значения поля

"

"InputMask"

C

Маска для форматирования вводимых данных

"

"RuleExpression"

C

Выражение проверки значения поля

Чтение

"RuleText"

C

Текст, выводимый при обнаружении ошибки

"

Таблица 14.18

Свойства поля вида (cType = "FIELD")

cProperty

Тип

Описание

Статус

"Caption"

C

То же, что и для поля таблицы базы данных

Чтение /
запись

"Comment"

C

"

"

"DataType"

C

Тип данных поля; первоначально устанавливается равным типу поля в источнике данных.
Изменение типа выполняется функцией DBSETPROP( ), с использованием при задании типа синтаксиса команды CREATE TABLE – SQL, например:

DBSetProp('Test.NumF, 'FIELD', 'DataType', 'N(4,2)')

Также может быть включена опции NOCPTRANS

Чтение /
запись
для удаленных видов

"DisplayClass"

C

То же, что и для поля таблицы базы данных

Чтение /
запись

"DisplayClassLibrary"

C

"

"

"DefaultValue"

C

"

"

"KeyField"

L

Содержит .T., если поле использовано в индексном выражении, или .F. – в противном случае

"

"RuleExpression"

C

То же, что и для поля таблицы базы данных

"

"RuleText"

C

"

"

"Updatable"

C

Содержит .T., если значение поля может обновляться, или .F. – в противном случае

"

"UpdateName"

C

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

"

Таблица 14.19

Свойства таблицы базы данных (cType = "TABLE")

cProperty

Тип

Описание

Статус

"Comment"

C

Комментарий таблицы

Чтение /
запись

"DeleteTrigger"

C

Выражение триггера удаления

Чтение

"InsertTrigger"

C

Выражение триггера вставки

"

"Path"

C

Путь относительно DBC-файла, включающий имя DBF-файла

"

"PrimaryKey"

C

Имя первичного индекса

"

"RuleExpression"

C

Выражение проверки записи таблицы

"

"RuleText"

C

Текст, генерируемый при обнаружении ошибки (когда RuleExpression возвращает .F.)

"

"UpdateTrigger"

C

Выражение триггера обновления

"

Таблица 14.20

Свойства вида (cType = "VIEW")

cProperty

Тип

Описание

Статус

"AllowSimultaneousFetch"

L

Применяется с удаленными видами, разделяемыми соединениями и ODBC-курсорами.
Равно .T., когда одинаково конфигурируемые курсоры, разделяющие соединение, могут обновлять записи одновременно, или .F. – в противном случае

Чтение /
запись

"BatchUpdateCount"

N

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

"

"Comment"

C

Комментарий вида

"

"CompareMemo"

L

Содержит .T. (по умолчанию), если memo- и general-поля, а для удаленного вида timestamp-поля включаются в опцию WHERE для обновления, или .F. – в противном случае

"

"ConnectName"

C

Именованное соединение, используемое, когда вид открывается

Чтение

"FetchAsNeeded"

L

Если равно .T., то данные выбираются, когда это необходимо, например когда выполняется перемещение на запись, данные которой не выбраны.
Если равно .F., то дополнительные данные выбираются во время бездействия.
Свойство не используется, когда прогрессивная выборка отключена (FetchSize = –1)

Чтение /
запись

"FetchMemo"

L

Если равно .T. (по умолчанию), то доставляются memo- и general-поля вида; если .F., то не доставляются

"

"FetchSize"

N

Число записей, доставляемых единовременно удаленной таблице. По умолчанию равно 100. Установка FetchSize в –1 означает получение полного результата, ограниченного величиной MaxRecords
Замечание. Единовременная выборка захватывает соединение на все время доставки данных. Это надо учитывать, задавая FetchSize, при работе с разделяемым соединением (ShareConnection = .T.)

"

"MaxRecords"

N

Максимальное число записей в возвращаемом результате. По умолчанию –1 – возвращаются все записи. MaxRecords = 0 означает, что вид выполняется, но результаты не доставляются

"

"Offline"

L

Содержит .T., если вид является автономным, или .F. – в противном случае

Чтение

"ParameterList"

C

Параметры опции WHERE. Формат списка следующий: ''ParameterName1, 'Type1'; ParameterName2, 'Type2'; ...'', где Type – это символ C, D, T, N, F, B, I, Y или L, означающий тип данных параметра: C – Character, D – Date, T – DateTime, N – Numeric, F – Float, B – Double, I – Integer, Y – Currency, L - Logical

Чтение /
запись

"Prepared"

L

Содержит .T., если SQL-оператор подготовлен для вызовов функции SQLEXEC( ), или .F. – (по умолчанию) в противном случае. Детали см. в описании функции SQLPREPARE( )

"

"RuleExpression"

C

Выражение правила для записи вида

"

"RuleText"

C

Текст сообщения, выдаваемого при редактировании данных, например в Browse- или Edit-окне

"

"SendUpdates"

L

Содержит .T., если SQL-обновление посылается таблицам-источникам данных (обновленные в виде данные будут доставлены таблицам-источникам), или .F. – (по умолчанию) в противном случае

"

"ShareConnection"

L

Содержит .T., если вид может разделять свой идентификатор соединения с другими соединениями, или .F. – в противном случае

"

"SourceType"

N

Тип источника данных вида:
·              1 – вид использует локальные таблицы;
·              2 – вид использует удаленные таблицы

Чтение

"SQL"

C

SQL-оператор, выполняемый при открытии вида

"

"Tables"

C

Список разделенных запятыми имен удаленных обновляемых таблиц

Чтение /
запись

"UpdateType"

N

Тип обновления:
·              1 или DB_UPDATE – (по умолчанию) старые данные обновляются новыми;
·              2 или DB_DELETEINSERT– старые данные удаляются, а новые добавляются.
Константы DB_UPDATE и DB_DELETEINSERT могут быть использованы, если имеется ссылка на файл FoxPro.h

"

"UseMemoSize"

N

Размер результата (в байтах), превышение которого приводит к тому, что данные для столбца вида возвращаются как memo-поле. Может изменяться от 1 до 255. По умолчанию – 255

"

"WhereType"

N

Тип опции WHERE в SQL-обновлении удаленных таблиц. Опция WHERE состоит, если значение свойства WhereType равно:
·              1 или DB_KEY – из первичных полей (первичные поля задаются свойством KeyFieldList);
·              2 или DB_KEYANDUPDATABLE – из первичных и обновляемых полей;
·              3 или DB_KEYANDMODIFIED (по умолчанию) – из первичных и изменяемых полей;
·              4 или DB_KEYANDTIMESTAMP – из первичных полей и полей, выявляемых в результате сравнения времени их обновления.
Константы DB_KEY и пр. доступны, если в приложении имеется ссылка на файл FoxPro.h

"

Пример. Выводится имя первичного ключа таблицы Authors базы данных HomeLibrary.

close databases

open database d:\HomeLibrary\HomeLibrary

primaryKey = DBGetProp('Authors', 'TABLE', 'PrimaryKey')

? primaryKey                      && Напечатает: АuthorId

Функция

DBSETPROP(cName, cType, cProperty, ePropertyValue)

устанавливает значение свойства текущей базы данных или поля, именованного соединения, таблицы или вида текущей базы данных. При попытке изменить значения свойства, предназначенного только для чтения, VFP генерирует ошибку с текстом "This property is read-only".

Функция возвращает .T., если значение свойства установлено. Если значение свойство установить нельзя, то VFP генерирует ошибку.

Параметры:

Смысл параметров cName, cType и cProperty см. в описании функции DBGETPROP( ).

ePropertyValue – устанавливаемое значение свойства. Тип значения должен совпадать с типом свойства.

Замечание. VFP не проверяет правильность устанавливаемого значения свойства RuleExpression (оно может изменяться только для вида и его поля).

Пример. Изменяются свойства Comment и RuleExpression соответственно для базы данных HomeLibrary и локального вида SomeLocalView.

? DBSetProp("HomeLibrary", "DATABASE", "Comment", "Новый комментарий")

? DBSetProp("SomeLocalView", "VIEW", "RuleExpression", "SomeLocalView.TypeId > 0")