Функции для таблиц Visual FoxPro
« Назад Многие функции имеют необязательный параметр nWorkArea | cTableAlias. Его присуствие означает, что результат возвращается для таблицы либо открытой в рабочей области nWorkArea, либо с псевдонимом cTableAlias. Если параметром cTableAlias задан неиспользуемый псевдоним, то VFP сгенерирует ошибку. Если параметр nWorkArea | cTableAlias опущен, то результата возвращается для текущей таблицы. Функция USED([nWorkArea | cTableAlias])определяет, используется ли рабочая область nWorkArea или псевдоним cTableAlias. То есть по номеру рабочей области nWorkArea определяет, открыта ли в ней таблица, или по имени псевдонима cTableAlias, – открыта ли ассоциированная с ним таблица. Возвращает .T., если рабочая область или псевдоним используются, или .F. – в противном случае. Если параметр nWorkArea | cTableAlias опущен, то функция вернет .T., если в текущей рабочей области открыта таблица, или .F. – в противном случае. Рабочая область может быть обозначена как символом – 'A', 'B' и т. д., так и цифрой – 1, 2 и т. д. Пример: close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors in 1 && или: in 'A' use Books in 'B' && или: in 2 ? Used('A') && Напечатает: .T. ? Used('Books') && Напечатает: .T. Функция ALIAS([nWorkArea | cTableAlias])возвращает строку, содержащую псевдоним таблицы, открытой в рабочей области nWorkArea. Функция вернет пустую строку, если в области nWorkArea таблица не открыта. Если задан параметр cTableAlias, то функция вернет псевдоним cTableAlias, если таблица с таким псевдонимом открыта, или сгенерирует ошибку – в противном случае. Если параметр nWorkArea | cTableAlias опущен, то функция вернет псевдонимом таблицы, открытой в текущей рабочей области, или пустую строку, если в этой области таблица не открыта. Пример 1: close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors in 1 use Authors in 2 again alias AuthorsAgain ? Alias(1) && Напечатает: Authors ? Alias('B') && Напечатает: AuthorsAgain Пример 2. Ищется первая свободная рабочая область. nWorkArea = 1 do while not Empty(Alias(nWorkArea)) and nWorkArea < Select(1) nWorkArea = nWorkArea + 1 enddo MessageBox('Свободна область под номером ' + Transform(nWorkArea)) Функция DBF([nWorkArea | cTableAlias])возвращает имя файла текущей или заданной таблицы. Функция вернет пустую строку, если в текущей области таблица не открыта. Функции вернет полное имя файла, если SET FULLPATH установлен в ON, или имя файла с именем диска, если SET FULLPATH установлен в OFF. close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors in 1 use Authors in 2 again alias AuthorsAgain set fullpath on ? DBF(1) && Напечатает: D:\HOMELIBRARY\AUTHORS.DBF set fullpath off ? DBF('AuthorsAgain') && Напечатает: D:AUTHORS.DBF Функция SELECT([0 | 1 | cTableAlias])возвращает, если задан параметр 0, номер текущей рабочей области или, если задан параметр 1, наибольший номер неиспользованной рабочей области. Если задан псевдоним cTableAlias, то функция вернет номер рабочей области, в которой этот псевдоним использован. Если задан неиспользуемый псевдоним, то функция вернет 0. Если функция вызвана без параметра, то она вернет номер текущей рабочей области. Пример: close databases open database d:\HomeLibrary\HomeLibrary.dbc select 2 use Authors ? Select(1) && Напечатает: 32767 ? Select(0) && Напечатает: 2 ? Select("Authors") && Напечатает: 2 ? Select("Au") && Напечатает: 0 Функция FIELD(nFieldNumber | cFieldName [, nWorkArea | cTableAlias [, nFlags]])возвращает для текущей или заданной таблицы имя ее поля или имя заголовка поля. Имя поля, если опущен параметр nFlags, возвращается прописными буквами. Параметры: nFieldNumber – номер поля, имя которого нужно определить. Если значение параметра больше числа полей в таблице, то функция вернет пустую строку. cFieldName – имя поля, для которого формируется результат. Функция вернет cFieldName, если nFlags = 0; функция вернет заголовок поля, если nFlags = 1. Если параметр cFieldName содержит имя несуществующего поля, то функция вернет пустую строку. Замечание. Заголовок поля может быть задан только для таблицы базы данных. nFlags – если равен 0, то возвращается имя поля прописными буквами. Если nFlags = 1, то функция вернет заголовок поля. Если заголовок задан в виде выражения, то функция вернет результат этого выражения. Функция генерирует ошибку, если выражение не может быть оценено. Если заголовок отсутствует, то функция вернет имя поля, сохраняя регистр его букв. Пример: close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors ? Field(1) && Напечатает: AUTHORID ? Field('Author') && Напечатает: AUTHOR && Поле Author не имеет заголовка ? Field('Author', 'Authors', 1) && Напечатает: author && && Выводим имена всех полей таблицы Authors for k = 1 to Fcount( ) ? Field(k) next Функция DELETED([nWorkArea | cTableAlias])возвращает .T., если текущая запись таблицы имеет пометку удаления, или .F. – в противном случае. Если в рабочей области нет таблицы, то функция вернет .F. Записи, индексированные на DELETED( ), являются рашмор-оптимизируемыми. Пример. Просматриваются записи таблицы с пометкой удаления. close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors browse last for Deleted( ) Функция LUPDATE([nWorkArea | cTableAlias])возвращает дату последнего обновления текущей или заданной таблицы. Тип результата – Date. Если таблицы в рабочей области не имеется, то функция вернет пустую дату. Замечание. Последние две цифры года обновления таблицы записываются в ее заголовок. Функция RECCOUNT([nWorkArea | cTableAlias])возвращает число записей в текущей или заданной таблице. Функция вернет 0, если в рабочей области нет таблицы. На результат функции RECCOUNT( ) не влияют установки команд SET DELETED и SET FILTER. Функция RECNO([nWorkArea | cTableAlias])возвращает номер текущей физической записи текущей или заданной таблицы. Функция вернет 0, если в рабочей области нет таблицы. Функция RECNO( ) возвращает отрицательную величину для записей, добавленных в буфер таблицы. Функция вернет значение RECCOUNT( ) + 1, если файл позиционирован за последней записью таблицы (например после неудачного SEEK в индексированной таблице). Если SEEK неудачен, то можно употребить RECNO(0) для мягкого поиска (поиска ближайшей соответствующей записи). Функция RECNO(0) вернет нуль, если такая запись не может быть найдена. При этом попытка выполнить GO RECNO(0) приведет к генерации ошибки Функция вернет 1, если файловый указатель находится перед первой записью таблицы. Пример. Печатается номер первой с пометкой удаления записи таблицы Authors. close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors select Authors locate for Deleted( ) if Found( ) then ? Recno( ) else wait 'В таблице нет записей с пометкой удаления' window endif Функция RECSIZE([nWorkArea | cTableAlias])возвращает размер в байтах одной записи текущей или заданной таблицы. Функция вернет 0, если в рабочей области нет таблицы. Выражение RECSIZE( ) * RECCOUNT( ) + HEADER( ) вернет размер текущей таблицы. Функция HEADER([nWorkArea | cTableAlias])возвращает число байт в заголовке текущей или заданной таблицы. Функция вернет 0, если в рабочей области нет таблицы. Заголовок таблицы содержит информацию о самой таблице, такую, как имена полей, их размер, наличие memo-поля и структурного составного индекса. Функция FSIZE(cFieldName [, nWorkArea | cTableAlias] | cFileName)возвращает размер в байтах поля cFieldName текущей или заданной таблицы или файла cFileName. Имя файла может содержать путь; расширение, если таковое имеется, обязательно. Функция вернет 0, если в рабочей области нет таблицы. Результат функции зависит от установки SET COMPATIBLE. Если SET COMPATIBLE установлен в OFF или FOXPLUS (по умолчанию), то FSIZE( ) возвращает размер поля; если SET COMPATIBLE установлен в ON или DB4 – размер файла. Размер поля также может быть отображен командой DISPLAY | LIST STRUCTURE. Пример. Выводится размер таблицы Authors. set compatible on close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors select Authors && Выводим размер таблицы Authors && Обе команды ? напечатают одно и то же значение ? RecSize( ) * RecCount( ) + Header( ) ? Fsize('d:\HomeLibrary\Authors.dbf') Функция FCOUNT([nWorkArea | cTableAlias])возвращает число полей в текущей или заданной таблице. Функция FILTER([nWorkArea | cTableAlias])возвращает строку, содержащую выражение фильтра, установленного командой SET FILTER для текущей таблицы или заданной таблицы. |