- •Microsoft Visual FoxPro. Учебно-справочное пособие
- •Предисловие
- •Возможные значения type
- •1. Соглашения
- •1.1. Имена
- •1.1.1. Имена в тексте и комментарии
- •1.1.2. Имена в программе
- •1.1.3. Рекомендуемые имена
- •1.1.3.1. Переменные
- •Возможные значения scope
- •1.1.3.2. Поля таблиц
- •Возможные значения type
- •1.1.3.3. Объекты
- •Возможные значения prefix
- •1.1.3.4. Константы и окна
- •1.2. Команды, функции и объекты
- •1.2.1. Способ представления
- •1.2.2. Синтаксис команд и функций
- •1.2.3. Параметры команд и функций
- •Возможные значения type
- •1.3. Примеры
- •1.4. Структура пособия и поиск материала
- •1.5. Часто употребляемые опции и параметры
- •Общие опции команд, оперирующих диалогами и файлами
- •Общие опции команд, оперирующих таблицами
- •2. Простое приложение
- •2.1. Назначение и состав приложения
- •2.2. База данных и проект HomeLibrary
- •Поля таблиц базы данных HomeLibrary
- •Индексы таблиц базы данных HomeLibrary
- •2.3. Связи между таблицами
- •2.4. Триггеры и правило проверки записи
- •2.5. Файлы проекта
- •2.5.1. Перечень файлов и порядок их описания
- •Файлы приложения HomeLibrary
- •2.5.2. Главный файл проекта
- •2.5.3. Форма "Авторы"
- •2.5.3.1. Состав формы
- •Элементы управления формы "Авторы"
- •2.5.3.2. Добавленные свойства формы
- •2.5.3.3. Обработчики событий формы и ее элементов
- •Действия кнопок формы
- •2.5.4. Форма AuthorEdit
- •2.5.4.1. Обработчик события Init
- •2.5.4.2. Запись данных на диск
- •2.5.4.3. Ввод даты
- •2.5.4.4. Альтернативный вариант ввода и записи данных
- •2.5.5. Форма "Книги"
- •2.5.6. Форма BookEdit
- •2.5.7. Форма "Содержание книг"
- •2.5.8. Форма WorkEdit
- •2.5.9. Форма "Виды произведений"
- •2.5.10. Анализ ошибки 1995
- •2.5.11. Отображение пометки удаления
- •2.5.12. Упаковка таблиц
- •2.5.13. Меню приложения
- •3. Типы данных
- •3.1. Общие сведения
- •3.1.1. Перечень функций
- •Список функций
- •3.1.2. Перечень типов данных
- •Типы данных vfp
- •Типы данных vfp, употребляемые только для полей таблиц
- •3.1.3. Получение информации о типе данных
- •Символ, возвращаемый type( ) и vartype( )
- •3.1.4. Null-величины
- •3.1.4.1. Понятие null
- •3.1.4.2. Функции и команда для null
- •3.1.4.3. Null в логических выражениях
- •Null в логических выражениях
- •3.1.4.4. Null в командах и встроенных функциях vfp
- •3.1.5. Пустые значения
- •Пустые значения
- •3.1.6. Чистые значения
- •Чистые значения
- •3.1.7. Преобразование типов данных
- •Значения параметра cDataType и флаги присутствия параметров nFieldWidth и nPrecision
- •Возможные преобразования типов данных, выполняемые cast( )
- •3.2. Числовые типы данных
- •3.2.1. Перечень команд
- •Список команд для числовых данных
- •3.2.2. Числовые константы
- •3.2.3. Операции для числовых данных
- •Операции для числовых данных
- •3.2.4. Преобразование числовых данных
- •3.2.5. Форматирование числовых данных
- •3.2.6. Функции для числовых данных
- •Функции для числовых данных
- •3.2.7. Вычисления в таблицах
- •Опции и параметры команд, выполняющих вычисления в таблицах
- •Функции, употребляемые в eExpressionList команды calculate
- •Данные таблицы Test.Dbf
- •3.3. Битовые функции
- •Результаты битовых операций
- •Битовые функции
- •3.4. Тип данных Currency
- •3.4.1. Перечень команд и функций
- •Список команд и функций
- •3.4.2. Употребление типа Currency
- •3.5. Логический тип данных
- •3.5.1. Логические операции
- •Логические операции
- •3.5.2. Операции отношения
- •Операции отношения
- •3.6. Приоритет выполнения операций
- •3.7. Типы данных Character и Varbinary. Кодовые страницы
- •3.7.1. Перечень команд
- •Список команд для символьных данных и кодовых страниц
- •3.7.2. Символьные константы
- •3.7.3. Операции для символьных данных
- •3.7.4. Команды для символьных данных
- •Примеры влияния set exact на результат сравнения
- •3.7.5. Функции для символьных данных
- •Символьные функции
- •Описание параметра nConversionSetting
- •Описание параметра nFlag
- •Описание параметра nFlag
- •Преобразования transform( ) при опущенном cFormatCodes
- •3.7.6. Кодовые страницы, поддерживаемые vfp
- •Кодовые страницы
- •3.7.7. Команды и функции для кодовых страниц
- •Функции для кодовых страниц
- •3.7.8. Тип данных Varbinary
- •3.7.9. Типы данных Varchar и Varchar (Binary)
- •3.8. Работа с полями типа Memo
- •3.8.1. Перечень команд и функций
- •Список команд и функция для memo-полей
- •3.8.2. Интеактивное редактирование memo-поля
- •3.8.3. Функции для memo-полей
- •3.9. Дата и время
- •3.9.1. Перечень команд и функций
- •Список команд и функций
- •3.9.2. Задание даты и времени
- •3.9.3. Изменение представления даты и времени
- •3.9.4. Константы, задающие дату и время
- •3.9.5. Даты по григорианскому и юлианскому календарям
- •3.9.6. Операции для данных типа Date и DateTime
- •3.9.7. Команды для данных типа Date и DateTime
- •Установки set date и соответствующие им форматы представления дат и дат и времени
- •3.9.8. Функции для данных типа Date и DateTime
- •Встроенные функции для данных типа Date и DateTime
- •3.9.9. Вывод системных календаря и часов
- •3.9.9.1. Вывод системных часов
- •3.9.9.2. Вывод системного календаря
- •3.9.10. Использование ole-календаря
- •4. Вывод данных в окно vfp, текстовый файл, на принтер и в порт
- •4.1. Перечень команд, функций и системных переменных
- •Список команд, функций и системных переменных
- •4.1.1. Слияние текста и его выражений
- •Значения параметра eExpression
- •4.1.2. Управление выводом
- •4.1.2.1. Организация вывода на принтер
- •4.1.2.2. Команды и функции, управляющие выводом
- •Символы, входящие в cFontStyle
- •Значения параметра nAttribute
- •Функциональные коды
- •Картинные коды
- •4.2. Вывод сообщений
- •Значения, применяемые для задания nDialogBoxType
- •Возвращаемые значения
- •Кнопки диалога и их действия
- •Варианты получения дополнительных данных о set-команде
- •4.3. Команды display и list
- •Display-команды
- •Опции и параметры display-команд
- •4.4. РАбота с текстовыми файлами
- •Функции для работы с текстовыми файлами
- •5. Элементы программирования
- •5.1. Перечень команд, функций и директив
- •Список команд, функций и директив
- •5.2. Основная программа
- •5.3. Структура программы
- •5.4. Вложенные вызовы программ
- •5.5. Создание констант и переменных
- •5.5.1. Константы
- •5.5.2. Переменные
- •5.5.2.1. Виды переменных
- •5.5.2.2. Имя переменной
- •5.5.2.3. Локальные переменные
- •5.5.2.4. Глобальные переменные
- •5.5.2.5. Частные переменные
- •5.5.2.6. Инициализация переменных
- •Ограничения на скалярные переменные и массивы
- •5.5.2.7. Освобождение переменных
- •5.5.2.8. Сохранение и восстановление значений переменных
- •5.6. Выражения
- •5.6.1. Построение и вычисление выражения
- •5.6.2. Оценка выражения
- •5.7. Управляющие конструкции
- •5.8. Процедуры и функции
- •5.8.1. Способы употребления
- •5.8.2. Обмен данными между программными компонентами
- •5.8.3. Число переданных параметров
- •5.8.4. Передача параметров по значению и ссылке
- •5.8.5. Поиск программных компонентов
- •5.8.6. Компиляция исходного текста
- •Расширения исходных и объектных файлов
- •5.8.7. Команды для процедур и функций
- •5.8.7.1. Задание и редактирование программных компонентов
- •Результаты, возвращаемые EditSource( )
- •Редакторы, открываемые функцией EditSource( )
- •5.8.7.2. Вызов Внешних функций
- •Возможные значения параметров cFunctionType и cParameterType1
- •5.8.7.3. Запуск программных компонентов
- •Имена для параметра KeyLabelName
- •Значения параметра cOnCommand
- •5.9. Макросы
- •5.9.1. Понятие макроса
- •5.9.2. Интерактивное формирование макроса
- •5.9.2.1. Запись макроса
- •5.9.2.2. Программирование макроса
- •5.9.3. Команды для макросов
- •6. Массивы
- •6.1. Перечень команд и функций
- •Список команд и функций для массивов
- •6.1.2. Создание и присваивание массива
- •6.1.3. Создание массива
- •Значения cType и варианты преобразования типа, заданного cType
- •6.1.4. Массив как параметр программных компонентов
- •6.1.5. Функции для массивов
- •Содержимое строки массива, формируемого adir( )
- •Содержимое строки массива, формируемого adockstate( )
- •Состав массива arrayDockState
- •Значения элементов массива ArrayName, созданного aerror( )
- •Элементы массива ArrayName, когда второй параметр равен 0
- •Элементы массива ArrayName, когда второй параметр равен 1
- •Содержимое строки массива ArrayName, когда задан параметр oEventObject
- •Содержимое строки массива, формируемого afields( )
- •Значения параметра nType и варианты возвращаемых результатов
- •Значения параметра nFlags
- •Информация об объекте vFunc
- •Состав массива ArrayName
- •Состав массива ArrayName для разных объектов проектирования
- •Значения параметра nValue
- •Действие параметра nType
- •Биты параметра nFlags
- •Условия поиска, задаваемые параметром nFlags
- •Элементы строки массива, формируемого astackinfo( )
- •Состав строки массива, формируемого ataginfo( )
- •Состав строки массива, формируемого avcxclasses( )
- •6.1. Отображение массива в форме
- •6.2.1. Решаемые задачи
- •6.2.2. Элементы управления формы
- •Элементы управления формы ArrayShow
- •6.2.3. Свойства и событие Init формы
- •Новое и измененные свойства формы
- •6.2.4. Поле списка формы
- •6.2.5. Кнопки формы
- •6.2.6. Счетчик и переключатели формы
- •6.2.7. Надписи формы
- •6.2.8. Массив как параметр формы
- •7. Обработка ошибок исполнения
- •7.1. Перечень команд и функций
- •Список команд и функций
- •7.2. Виды обработчиков ошибок
- •Значения, возвращаемые функцией sys(2410)
- •7.3. On error-обработчик ошибок
- •Функции для локализации и расшифровки ошибки
- •Команды cancel, resume, retry, return и suspend
- •7.4. Обработчик события Error
- •7.5. Конструкция try ... Catch ... Finally
- •7.5.1. Синтаксис и порядок выполнения конструкции
- •7.5.2. Дополнительные команды конструкции
- •7.5.3. Throw в try-конструкции
- •7.5.4. Итоговые замечания
- •7.6. Взаимодействие обработчиков
- •7.7. Генерация ошибок vfp
- •8. Оптимизация функционирования
- •8.1. Перечень команд и функций
- •Список команд и функций
- •8.2. Рашмор-оптимизация
- •8.2.1. Бинарный поиск
- •8.2.2. Сравнение последовательного и бинарного поиска
- •8.2.3. Использование индексов для оптимизации вычислений
- •8.2.4. Потенциально оптимизируемые Команды
- •8.2.5. Управление рашмор-оптимизацией
- •Уровни рашмор-оптимизации запроса
- •8.2.6. Оптимизация выражений
- •8.2.7. Составление оптимизируемых выражений
- •Варианты рашмор-выражений
- •8.3. Оптимизация программ
- •8.3.1. Некоторые приемы программирования
- •8.3.2. Оптимизация повторных обращений к свойствам объектов
- •8.3.3. Обращение к нескольким свойствам объекта
- •9. Проект
- •9.1. Перечень Команд и объектов
- •Список команд и объектов, употребляемых с проектом
- •9.2. Проект и диспетчер проекта
- •9.3. Проект как объект vfp
- •9.4. Создание и редактирование проекта
- •9.5. Включаемые и не включаемые файлы
- •9.6. Главный файл проекта
- •9.7. Добавление, изменение и удаление файлов проекта
- •9.8. Закрытие проекта
- •9.9. Построение приложения
- •Значения параметра nBuildAction
- •9.10. Запуск и выход из приложения
- •10. Формы
- •10.1. Перечень команд, функций и объектов
- •Список команд, функций и объектов
- •10.2. Создание формы
- •10.3. Выполнение формы
- •10.3.1. Команда do form
- •10.3.2. Отображение формы, созданной программно
- •10.4. Форма как объект
- •10.4.1. Свойства, события и методы формы
- •Категории доступности свойств формы
- •10.4.2. Форма как контейнер
- •10.4.3. Обеспечение доступа к объектам формы и набора форм
- •10.5. Набор форм
- •10.6. Окружение данных
- •10.6.1. Объект DataEnvironment
- •10.6.2. Объекты Cursor и Relation
- •10.7. Объекты, размещаемые в форме
- •10.7.1. Перечень объектов
- •Объекты формы
- •10.7.2. Координаты объектов
- •10.7.3. Примеры управления вложенными объектами
- •10.7.4. Список с различными источниками данных
- •10.8. Панель инструментов: создание и пример употребления
- •10.9. Дополнительные сведения для форм
- •10.9.1. Обмен данными между формами
- •10.9.2. Устранение главного окна vfp
- •10.9.3. Использование изображений
- •10.9.4. Сессия данных
- •11. Меню
- •11.1. Команды и функции для меню
- •Команды и функции
- •11.2. Применение меню
- •11.2.1. Проектировщик меню
- •11.2.2. Создание меню средствами проектировщика
- •Skip For-выражения
- •11.2.3. Короткое меню
- •11.2.4. Меню в sdi-форме
- •11.3. Системное меню
- •Заголовки и имена пунктов горизонтального подменю системного меню vfp
- •Заголовки и имена пунктов вертикальных подменю системного меню vfp
- •12. Извлечение и отображение данных
- •12.1. Перечень команд и системных переменных
- •Список команд и системных переменных
- •12.2. Проектировщик запроса
- •12.3. Перекрестные таблицы
- •Параметры генератора перекрестной таблицы
- •12.4. Диаграммы
- •12.5. Проектировщик отчета
- •12.6. Проектировщик этикетки
- •12.7. Команды для отчета и этикетки
- •13. Классы и объекты
- •13.1. Перечень команд и функций
- •Список команд и функций
- •13.2. Классы
- •Базовые классы vfp
- •Описание элементов массива pemName_comattrib
- •Флаги атрибута
- •13.3. Объекты
- •13.4. События объектов vfp
- •Значения параметра nFlags
- •Значения параметра nInfoType
- •Значения cProperty
- •Значения параметра nNewValue
- •13.6. Информация о классе и объекте
- •Значения параметра nAttribute
- •13.7. Объекты, встроенные в vfp
- •Объекты, встроенные в vfp
- •14. БазА данных
- •14.1. Перечень команд и функций
- •Список команд и функций
- •14.2. Реляционная модель данных
- •Отношение "Сотрудник – Дата рождения"
- •14.3. Функциональные зависимости и нормализация таблиц данных
- •14.3.1. Представление функциональных зависимостей
- •Уточненное однотабличное представление зависимости "Сотрудник – Дата рождения"
- •Уточненное двухтабличное представление зависимости "Сотрудник – Дата рождения"
- •14.3.2. Нормализация отношений
- •Изделия и поставщики
- •Реализация изделий
- •Изделия
- •Поставщики изделий
- •Поставщики
- •Поставщики изделий
- •Виды изделий
- •Изделия
- •14.4. Ссылочная целостность данных
- •14.5. Состав и свойства базы данных и ее компонентов
- •14.6. Команды для баз данных
- •14.6.1. Команды, оперирующие базой данных
- •14.6.2. Команды, оперирующие таблицей базы данных
- •14.6.3. Триггеры
- •14.6.4. Хранимые процедуры
- •14.7. Функции для баз данных
- •Возможные значения параметра cType
- •Возможные значения параметра cType
- •15. Команды и функции для таблиц и их индексов
- •15.1. Перечень команд
- •Список команд и функций
- •15.2. Выбор рабочей области
- •15.3. Открытие и закрытие таблицы
- •15.4. Создание и изменение таблиц
- •Варианты задания параметров FieldType, nFieldWidth и nPrecision
- •Поля таблицы, создаваемой copy structure extended
- •15.5. Сортировка таблицы
- •15.6. Редактирование записей таблиц
- •15.6.1. Общие опции и параметры команд
- •Опции и параметры команд
- •15.6.2. Предварительные замечания
- •15.6.3. Добавление записей
- •Значения по умолчанию полей разных типов
- •15.6.4. Обновление записей
- •15.6.5. Копирование записей
- •15.6.6. Удаление и восстановление записей
- •15.7. Сопутствующие команды
- •Значения для параметра nLevel
- •Команды и функции, на которые влияет установка set compatible
- •15.8. Функции для таблиц
- •15.9. Управление индексами
- •15.9.1. Индексирование таблиц
- •15.9.2. Команды для индексов
- •15.9.3. Функции для индексов
- •Значения nIndexNumber
- •15.10. Поиск и перемещение в таблице
- •15.10.1. Команды для Поиска и перемещения в таблице
- •15.10.2. Функции для Поиска и перемещения в таблице
- •15.11. Блокировка таблиц и записей
- •15.11.1. Автоматическая блокировка
- •Команды и функции, выполняющие автоматическую блокировку
- •15.11.2. Команды, используемые при блокировке таблиц и записей
- •15.11.3. Функции, используемые при блокировке таблиц и записей
- •15.12. Экспорт и импорт данных
- •Типы экспортируемых и импортируемых файлов
- •15.13. Управление свойствами таблиц и курсоров
- •Свойства курсора vfp
- •Свойства курсора vfp, не описанные в табл. 15.11
- •15.14. Курсор-адаптер
- •15.15. Буферизация
- •15.15.1. Виды буферизации
- •15.15.2. Фиксация и отмена изменений
- •Значения параметра nRows
- •Результаты функции getfldstate( ) и параметр nFieldState функции setfldstate( )
- •15.16. Транзакции
- •15.17. Связывание таблиц
- •15.18. Просмотр и редактирование таблиц
- •15.18.1. Команда browse
- •Возможные символы cFormatCodes
- •15.18.2. Вычисляемые поля
- •15.18.3. Поддержка set skip
- •15.18.4. Обновление данных
- •15.18.5. Команды edit и change
- •15.19. Выбор данных
- •Агрегатные функции
- •Значения параметра JoinType
- •Опции и параметры выражения отбора
- •Допустимые неявные преобразования типов данных
- •Результаты неявного преобразования типов данных двух полей
- •Особенности поведения sql-опций в версии 8.0
- •Особенности поведения sql-опций в версии 9.0
- •16. Представление данных
- •16.1. Перечень команд и функций
- •Перечень команд и функций для именованных соединений
- •Перечень функций для sql-соединений
- •Перечень команд и функций для sql-видов
- •16.2. Именованные Соединения
- •16.2.1. Создание Именованного Соединения
- •16.2.2. Команды для именованных соединений
- •16.3.1. Работа с удаленным источником данных
- •16.3.2. Описание базы данных BookSale
- •Некоторые таблицы базы данных BookSale.Mdb
- •Поля таблиц базы данных BookSale.Mdb
- •Индексы таблиц базы данных BookSale.Mdb
- •16.3.3. Параметр и результат sql-Функций
- •16.3.4. Выполнение sql-функций в асинхронном режиме
- •Свойства sql-соединения
- •Столбцы курсора, создаваемого sqltables( )
- •Имена столбцов курсора в формате "foxpro"
- •Имена столбцов курсора в формате "native"
- •Состав массива aCountInfo
- •16.3.6. Пример с запросом к нескольким таблицам
- •16.4. Виды
- •16.4.1. Понятие вида. Интерактивное построение
- •16.4.2. Команды и функции для sql-видов
- •16.4.3. Автономные виды
- •17. Динамический обмен данными
- •Список dde-функций
- •Служебные имена dde-серверов
- •Параметры, передаваемые процедуры, заданной cUdfName
- •Значения параметра cOption
- •Параметр Action и соответствующие значения параметров Item, Data и AdviseStatus
- •Значения параметра cOption
- •Параметры cUdfName-функции
- •Номера dde-ошибок
- •18. Окна, клавиатура, мышь и цвет
- •Команды и функции для окон
- •Команды и функции для клавиатуры
- •Команда и функции для мыши
- •Управление цветом
- •19. Файлы и директории
- •19.1. Перечень команд
- •Список команд
- •19.2. Команды для файлов и директорий
- •19.3. Функции для файлов и директорий
- •Функции для файлов и директорий
- •19.4. Диалоги
- •Одноименные параметры рассматриваемых в разделе функций
- •Наиболее часто употребляемые значения параметра nFlags
- •Форматы графических файлов, поддерживаемые vfp
- •20.1. Перечень команд и функций
- •Список команд и функций
- •20.2. Некоторые понятия xml
- •20.3. Набор символов Unicode
- •20.4. Кодировка utf-8
- •20.5. Базовые правила xml
- •Кодирование зарезервированных символов
- •Формы представления различных типов данных
- •20.6. Схемы
- •20.7. Формат экспортируемых данных
- •20.8. Описание xml-функций
- •Значения параметра nOutputFormat
- •Значения для параметра nFlags
- •Значения параметра nFlags
- •Соответствия Windows-совместимых кодовых страницы и значений xml-атрибута encoding
- •Значения параметра cSchemaName
- •Значения для параметра nFlags
- •Соответствие типов данных vfp и xsd
- •Значения для параметра nFlags
- •Литература
- •Предметный указатель
- •Содержание
Опции и параметры display-команд
Опция [параметр] |
Описание |
FIELDS FieldList |
Задает список полей, содержимое которых отображается. Если опция опущена, то отображаются все поля (кроме memo). Содержимое memo-поля выводится, если поле явно указано в FieldList; на вид результата действует установка SET MEMOWIDTH |
LIKE FileSkeleton | cVarSkeleton | cObjectSkeleton |
Задает маску, под управлением которой осуществляется отбор файлов (переменных, объектов). Может содержать символы ? и * |
NOCONSOLE |
Подавляет вывод в главное или пользовательское окно VFP |
OFF |
Подавляет вывод числа записей. При отсутствии OFF номер записи выводится перед каждой записью |
ON Drive |
Задает диск или том расположения файлов |
TO FILE FileName |
Направляет вывод в файл FileName |
TO PRINTER [PROMPT] |
Направляет вывод на принтер. Если задана опция PROMPT, то перед выводом появляется диалог настройки принтера |
Примеры:
&&
&& DISPLAY. Отображаются имена авторов, && сведения о которых занесены в таблицу Authors.dbf после 01.01.2004
&&
clear
close databases
close tables all
open database d:\HomeLibrary\HomeLibrary.dbc
use Authors
display fields Author, InputDate for InputDate > {^2004-01-01} off
&&
&& DISPLAY FILES. Выводятся имена PRG-файлов в папке d:\FoxPrgs
&&
set default to d:\FoxPrgs
display files like *.prg
&&
&& DISPLAY MEMORY
&&
local a1, a2, ab1, ab2
&& Выводим данные о переменных a1 и a2
display memory like a?
&& Выводим данные о переменных a1, a2, ab1 и ab2
display memory like a*
Каждая команда DISPLAY имеет команду-аналог LIST. Чтобы ее получить, достаточно в DISPLAY-команде заменить DISPLAY на LIST.
LIST-команды практически идентичны DISPLAY-командам за исключением следующих различий:
по умолчанию параметр Scope команды LIST [[FIELDS] FieldList] [Scope]… имеет значение ALL;
LIST-команда осуществляет непрерывный вывод данных в окно VFP (главное или пользовательское), в то время как DISPLAY-команда приостанавливает вывод после заполнения окна и продолжает его после нажатия любой клавиши клавиатуры или кнопки мыши;
LIST-команда не выводит имеющие пометку удаления записи, когда SET DELETED установлен в ON.
4.4. РАбота с текстовыми файлами
Вывод данных в текстовый файл может быть организован при помощи вышерассмотренных команд SET TEXTMERGE, SET ALTERNATE и SET PRINTER, употребляемых соответствующим образом с командами \ | \\, TEXT … ENDTEXT и ? | ??. Кроме того, SET PRINTER позволяет направлять данные с последовательный или параллельный порт компьютера.
Помимо этих возможностей VFP позволяет организовать доступ к текстовому файлу, используя приведенные в табл. 4.13 функции.
Таблица 4.13
Функции для работы с текстовыми файлами
Функция |
Описание |
FCHSIZE(nFileHandle, nNewFileSize) |
Изменяет размер файла, открытого с идентификатором nFileHandle, устанавливая его равным nNewFileSize. Функция вернет либо размер файла в байтах, либо –1, если нет возможности изменить размер файла, например, по причине неверно указанного идентификатора или из-за отсутствия места на диске, или если файл открыт только для чтения |
FCLOSE(nFileHandle) |
Закрывает файл, открытый с идентификатором nFileHandle, передавая предварительно в него данные из буфера (если вывод осуществляется с буферизацией) и освобождая идентификатор файла. Функция вернет .T., если файл удалось закрыть, или .F. – в противном случае. Замечание. Команда CLOSE ALL также закрывает файлы, открытые функциями FCREATE( ) и FOPEN( ) |
FCREATE(cFileName [, nFileAttribute]) |
Создает и открывает файл cFileName. Если имя файла не содержит пути, то файл создается в директории по умолчанию. Если файл cFileName существует, то функция FCREATE перезапишет его без предупреждения. Необязательный параметр nFileAttribute может принимать следующие значения: 0 – (по умолчанию) чтение-запись; 1 – только чтение; 2 – скрытый; 3 – только чтение / скрытый; 4 – системный; 5 – только чтение / системный; 6 – системный / скрытый; 7 – только чтение / скрытый / системный. Функция возвращает идентификатор файла либо –1, если файл не может быть создан. Замечание. Доступ к файлу проще организовать, если сохранить его идентификатор в системной переменной _TEXT |
FEOF(nFileHandle) |
Возвращает .T., если позиция файла, открытого с идентификатором nFileHandle, находится в конце файла, или .F. – в противном случае |
FERROR( ) |
Возвращает номер последней ошибки, возникшей при выполнении функции работы с текстовыми файлами. FERROR( ) вернет 0, если функции обработки текстовых файлов выполняются успешно. Возможны следующие ошибки: 2 – файл не найден; 4 – открыто слишком много файлов; 5 – отказано в доступе; 6 – неверный идентификатор файла; 8 – выход за границы памяти; 25 – ошибка при выполнении FSEEK; 29 – нет места на диске; 31 – ошибка при открытии файла |
FFLUSH(nFileHandle [, lForce])) |
Пересылает данные из буфера в файл, открытый с идентификатором nFileHandle, освобождая при этом память, отданную для буферизации. Тип возвращаемого результата – логический. Если параметр lForce задан и равен .T., то данные на диск передаются немедленно, если параметр опущен и равен .F. (по умолчанию), то данные передаются на диск при первой возможности. Замечание. Употребление функции имеет смысл при записи в файл с буферизацией |
FGETS(nFileHandle [, nBytes]) |
Возвращает, если задан параметр nBytes, из файла, открытого с идентификатором nFileHandle, nBytes байт при условии, что в процессе чтения не встречен символ возврата каретки. Если символ обнаружен, то функция возвращает байты, расположенные начиная от текущей позицией файла до найденного символа возврата каретки. Если параметр nBytes опущен, функция читает символы, расположенные начиная от текущей позицией файла до очередного символа возврата каретки, но не более 254 байт. Если символ возврата каретки обнаружен, то после чтения позиция файла устанавливается вслед за этим символом, который, кстати, не возвращается как частью прочитанной строки. Символы новой строки также при чтении игнорируются |
FOPEN(cFileName [, nFileAttribute]) |
Открывает файл cFileName. Если путь в имени файла отсутствует, то VFP ищет файл в директории по умолчании или заданной командой SET PATH. Необязательный параметр nFileAttribute может принимать следующие значения: 0 – (по умолчанию) только чтение, с буферизацией; 1 – только запись, с буферизацией; 2 – чтение-запись, с буферизацией; 10 – только чтение, без буферизации; 11 – только запись, без буферизации; 12 – чтение-запись, без буферизации. Функция возвращает идентификатор файла либо –1, если файл не может быть создан. Замечание. Информацию об открытом или созданном файле можно просмотреть или направить на принтер при помощи команды DISPLAY | LIST STATUS |
FPUTS(nFileHandle, cExpression [, nCharWritten]) |
Выполняет и возвращает то же, что и FWRITE( ), проставляя в конце строки символы возврата каретки и новой строки |
FREAD(nFileHandle, nBytes) |
Возвращает из файла, открытого с идентификатором nFileHandle, nBytes байт. Число прочитанных символов будет меньше, если при чтении обнаружен конец файла |
FSEEK(nFileHandle, nBytesMoved [, nRelativePos])) |
Перемещает позицию файла, открытого с идентификатором nFileHandle, на nBytesMoved байт от начала файла, если параметр nRelativePos не задан или равен 1, либо от позиции, устанавливаемой nRelativePos. Позиция перемещается по направлению к концу файла, если nBytesMoved > 0, или к началу файла – в противном случае. Параметр nRelativePos может принимать следующие значения: 0 – (по умолчанию) сдвиг позиции от начала файла; 1 – сдвиг от текущей позиции файла; 2 – сдвиг от конца файла. Функция после перемещения возвращает позицию файла (в байтах), отсчитываемую от начала файла. Замечание. При вызове FSEEK(h, 0, 2) функция вернет размер файла, открытого с идентификатором h |
FWRITE(nFileHandle, cExpression [, nCharWritten]) |
Записывает в файл, открытый с идентификатором nFileHandle, строку cExpression или nCharWritten ее символов, если этот параметр задан и его величина меньше длины строки cExpression. Функция в отличие от FPUTS( ) не размещает в конце строки символы возврата каретки и новой строки. Функция возвращает число переданных байтов, либо 0 если запись выполнить не удалось. Замечание. Каждый ANSI-символ занимает 1 байт памяти |
Замечание. Файлы, создаваемые FCREATE( ), называются в VFP файлами низкого уровня.
Пример. В текстовом файле d:\Authors.txt находится следующий список авторов:
Список авторов
23 |
Арабов Юрий Николаевич |
21.11.2004 0:00:00 |
12 |
Булгаков Михаил Афанасьевич |
01.01.0001 0:00:00 |
9 |
Варламов Алексей Николаевич |
01.01.0001 0:00:00 |
17 |
Галактионова Вера Григорьевна |
21.11.2004 0:00:00 |
18 |
Головин Геннадий Николаевич |
21.11.2004 0:00:00 |
14 |
Дегтев Вячеслав Иванович |
21.11.2004 0:00:00 |
19 |
Крупин Владимир Николаевич |
21.11.2004 0:00:00 |
4 |
Лимонов Эдуард Вениаминович |
15.09.2004 0:00:00 |
1 |
Личутин Владимир Владимирович |
21.11.2004 0:00:00 |
30 |
Распутин Валентин Григорьевич |
01.01.0001 0:00:00 |
20 |
Сегень Александр Юрьевич |
21.11.2004 0:00:00 |
22 |
Сычева Лидия Андреевна |
21.11.2004 0:00:00 |
5 |
Тельников Константин Павлович |
01.01.0001 0:00:00 |
16 |
Тюрин Юрий Петрович |
21.11.2004 0:00:00 |
В качестве разделителя между полями файла использован символ табуляции.
Из файла d:\Authors.txt в таблицу d:\Authors2.dbf добавляются сведения об авторах, в этой таблице отсутствующие. Запись добавляется в том случае, если:
в строке файла имеются три поля с данными;
задана дата ввода данных об авторе (дата, указанная в третьем поле файла, больше даты 01/01/0001);
в таблице Authors нет записи с кодом, указанным в первом поле текстового файла (вводятся только свежие данные).
Соответствие между полями текстового файла и таблицы Authors2.dbf следующее:
поле 1 файла соответствует полю AuthorId типа Integer;
поле 2 – полю Author типа Character;
поле 3 – полю InputDate типа Date.
В приводимой программе таблица d:\Authors2.dbf, если она отсутствует, получается как копия таблицы Authors базы данных HomeLibrary.dbc.
#define TAB Chr(9) && Chr(9) – код символа табуляции
h = Fopen('d:\Authors.txt')
&& Следующий оператор позволит при отладке закрывать файл d:\Authors.txt,
&& выполняя в командном окне Fclose(_TEXT)
_TEXT = h
if h > 0
&& Устанавливаем соответствующий формат даты
set date to German
close databases
open database 'd:\HomeLibrary\HomeLibrary'
&& Открываем таблицу Authors.dbf
use Authors
if not File('d:\Authors2.dbf') then
copy structure extended to d:\AuStucture
create d:\Authors2 from d:\AuStucture
else
use d:\Authors2
endif
index on AuthorId to d:\AuthorId2
&& Число записей до добавления
nRecBefore = Reccount( )
&& Пропускаем заголовок
Fgets(h)
do while not Feof(h)
textLine = Fgets(h)
&& Создаем массив aAuthor из слов строки;
&& в качестве разделителя берем символ табуляции
Alines(aAuthor, textLine, TAB)
&& Пропускаем строку textLine, если число элементов в массиве не равно 3-м
if Alen(aAuthor) != 3 then
loop
endif
&& Преобразовываем строку с датой и временем
&& первоначально в дату и время, а затем в дату
aAuthor(3) = Ttod(Ctot(aAuthor(3)))
&& Проверяем дату для поля InputDate
if aAuthor(3) > {^0001–01–01}
&& Проверяем, если запись с кодом aAuthorId(1) в таблице Authors.dbf
&& Если нет, то добавляем новую запись в таблицу
if not Seek(Val(aAuthor(1))) then
&& Контрольный вывод данных в окно VFP
? aAuthor(1) picture '999', aAuthor(2), aAuthor(3) at 90
insert into Authors2 from array aAuthor
endif
endif
enddo
&& Закрываем файл 'd:\Authors.txt'
Fclose(h)
wait "Добавлено записей: " + Transform(Reccount( ) – nRecBefore) window
&& Просмотр таблицы Authors.dbf
browse last nowait
else
MessageBox("Не могу открыть файл со списком авторов!")
endif
Если структура всех строк исходного файла одинакова, то данные в текущую таблицу можно добавить из файла, употребив команду APPEND FROM. В нашем примере файл будет пригоден для обработки этой командой, если удалить из него заголовок и в третьем поле взамен даты и времени оставить только дату. Кроме того, в файле не должно быть записей, нарушающих уникальность ключа AuthorId.
Таким образом, если каждая строка файла имеет следующую структуру:
23 Арабов Юрий Николаевич 21.11.2004
то программа, выполняющая добавление, может быть такой:
set date to German
close databases
use d:\Authors2
if File('d:\Authors2.txt')
&& Authors2.txt – файл со списком авторов, не содержащий заголовка
&& и имеющей вместо даты и времени только дату
append from d:\Authors2.txt;
fields AuthorId, Author, InputDate;
for InputDate > {^0001–01–01};
delimited with tab
wait "Добавлено записей: " + Transform(_TALLY) window
brow last nowait
else
MessageBox("Текстовый файл со списком авторов не найден!")
endif
