Руководства, Инструкции, Бланки

инструкция Foxpro img-1

инструкция Foxpro

Рейтинг: 4.2/5.0 (1821 проголосовавших)

Категория: Инструкции

Описание

Не найдена инструкция parameter

Откуда:
Сообщений: 61

У меня при запуске EXE файла возникла ошибка:"Не найдена инструкция parameter". Я честно говоря "от балды" добавила самую первую строку в запускающий файл строку lparametrs par1,par2. Ошибка ликвидировалась,но я все-таки не поняла почему нужно передавать эти параметры? Мой главный файл проекта приложен здесь, за ошибки в нем прошу сильно не ругать так как я его до конца не отладила.

К сообщению приложен файл (glbal08.rar - 1Kb) cкачать

Re: Не найдена инструкция parameter [new]

Sergey Sizov.
Guest

У меня при запуске EXE файла возникла ошибка:"Не найдена инструкция parameter". Я честно говоря "от балды" добавила самую первую строку в запускающий файл строку lparametrs par1,par2. Ошибка ликвидировалась,но я все-таки не поняла почему нужно передавать эти параметры?


Вот как раз нужность должны определять Вы. И если Вы запускаете с параметрами, то потрудитесь эти параметы объявить.
Дело не в том, что парамеры нужно передать, а в том, что Вы их уже пытаетесь передать и фокс просто сообщает о том, что ему ничего про эти параметры не известно.
Таким образом, смотреть надо не главный файл Вашей программы, а место откуда он вызывается, а вызывается он, судя по приведенным Вами данным, с параметрами. Вот там с ними и разбирайтесь.

Другие статьи

Руководство по использованию FoxPro 2

- Руководство по использованию FoxPro 2

- 42 -
ЗАПУСК
Перед тем как запустить FoxPro на вашем компьютере, вам необходимо ознакомиться с
данным разделом.
Неважен уровень вашей подготовки, перед работой просмотрите все материалы, которые
вы получили с пакетом FoxPro. Ознакомтесь с различными руководствами и их общим
содержанием. Если в дальнейшей работе, вам потребуется помощь, то это позволит вам легче
найти требуемый раздел.
Буклет Замечания к версии содержит полную инструкцию для запуска FoxPro и
последнюю информацию,которая еще не появилась в документах.
ПОИСК НЕОБХОДИМОЙ ИНФОРМАЦИИ
Перед началом работы с FoxPro, прочитайте этот раздел, для того чтобы вы знали где
искать информацию.
Вызов подсказки (Help)
Один из быстрых и легких путей получить информацию о FoxPro - это воспользоваться
возможностями Help.
При выборе Help. из выплывающего меню System осуществляется высветка окна Help
системы FoxPro ( окно Help также может быть вызвано с помощью клавиши F1 или необходимо
набрать на клавиатуре Help, а затем нажать клавишу Enter).
Высвеченный Help - это полный мини-справочник об изделии.
Окно Help содержит расширенный список заголовков разделов, который включает команды
и функциональные ключевые слова, опции меню и общую информацию; список упорядочен в
алфавитном порядке. Это окно может быть прокручено, перемещено, изменены его размеры и
закрыто. После того как вы выбрали нужный вам заголовок, информация об этом разделе
высвечивается в окне.
Для получения более полных инструкций по работе с возможностями Help, обращайтесь к
разделу Руководство главе Интерфейс пользователя.
ДОКУМЕНТАЦИЯ FoxPro
Документация FoxPro предназначена для пользователя любого уровня подготовки. В этих
руководствах вы найдете полную информацию о многих аспектах работы FoxPro, от работы
интерфейса до синтаксиса языка и предлагаемых подходов к программированию.
Соглашения по оформлению текста
Вся документация FoxPro содержит типографские стили, используемые для упрощения
классифицикации различных фрагментов, встреченных вами. Это поможет устранить путаницу и
позволит вам установить соответствие между информацией содержащейся в руководствах и тем,
что высвечено на экране.
Директивы
Имена директив FoxPro, такие как меню, опции, текстовые клавиши, радио клавиши,
контрольные блоки набраны жирным шрифтом.
Например:
Опция Save в выплывшем меню File
Окна и диалоги
Ссылки к окнам и диалогам, которые появляются в системе диалового меню и оконного
интерфейса всегда появляются в очередном тексте с начальной прописной буквы(буквами).
Например:
Введя это утверждение в окне команд будет сделан переход к диалогу модификации
структуры.
Файлы, Поля, Переменные и Ключевые слова
Все файловые имена, имена полей, имена переменных и ключевые слова для команд и
функций с процедурным языком появляется в небольшом тексте UPPERCASE TEXT.
Например:
Для открытия ресурсов файла FOXUSER, вы должны сначало отключить установку
ресурсов SET RESOURCE OFF.
Диалоговые сообщения компьютера
Примеры текста и командных операторов, которые вы набрали, а также диалоговый вывод
компьютера, который появляется на экране напе-
чатан в шрифте Courier.
Например:
REPLACE mdate WITH DATE ()
Краткое руководство
В руководстве FoxPro представлены свойства и возможности FoxPro. Если вы незнакомы с
системами управления данных или уже знакомы с базами данных, индексами, записями и полями,
с помощью руководства вы получите необходимые основы, котрые позволят вам лучше
использовать ваше время и ваш опыт, при изучении FoxPro.
Если вы знакомы с базами данных, но незнакомы с непроцедурными интерфейсами, первый
раздел Краткого руководства описывает основы операционного интерфейса. После того, как вы
достигнете определенных успехов, вы сможете исследовать и решить для себя множество проб-
лем базы данных, имеющих дело с прогрессивными задачами управления данными. Если вам
необходима дополнительная информация. то обратитесь к другим справочным руководствам
FoxPro (или используйте возможности Help).
Руководство пользователя
Руководство пользователя FoxPro содержит полную информацию об использовании FoxPro
, и дополнительную информацию о прикладных разработках. Это руководство может быть
использовано для получения разъяснений на вопросы базовые, средней сложности и повышенной
трудности.
Команды и функции
Руководство Команды и функции FoxPro - полный справочник для программного языка
FoxPro. Оно предназначено для программистов и раз-
работчиков прикладных программ, использующих язык для автоматизации
операций управления и обработки данных. Средние пользователи также
найдут это руководство полезным для себя, в случае разработки сложных
выражений в системе меню или для ответа на вопрос с чего начинать
разработку прикладных программ.
FoxView - FoxCode - FoxDoc
Руководство FoxView - FoxCode - FoxDoc FoxPro содержит три полных справочных
материала.
FoxView
Раздел FoxView содержит полную информацию о блоке рисования изображения на экране
FoxPro. Документация FoxView подразделяется на 12 частей, которые описывают все
возможности операций блока рисования экрана.
FoxCode
Раздел FoxCode содержит полную информацию о компиляторе языка шаблона
FoxPro(FoxCode). Это руководство предназначено для пользователей, которые хотели бы
разработать сложные прикладные системы.Здесь вы сможете найти введение и обзор языка
шаблона, а также полный справочный материал для всех команд и функций, которые являются
частью языка шаблонов.
FoxDoc
Раздел FoxDoc содержит информацию и рекомендации для использования
программной/прикладной документации FoxPro(FoxDoc). В разделе приведены примеры.
Замечания к версии


- Руководство по использованию FoxPro 2

Visual FoxPro 9

Visual FoxPro 9.0

Visual FoxPro – это приложение, которое является визуализированной средой проектирования систем управления реляционными базами данных ОС Windows. Программа работает на базе языка программирования FoxPro, который считается одним из самых удобных для создания БД. Разработчик компания Microsoft.

Тесная связь между данными, языком и другими важными функционалами, позволяют FoxPro быть одной из самых качественных программ для выполнения работ разного уровня, которые касаются БД.

  • Использование широко распространённого формата таблиц баз данных, что позволяет организовывать простой обмен информации с другими приложениями Microsoft.
  • Высокая скорость работы с базами повышенного объёма.
  • Наглядность работы.
  • Возможность создания приложений, работающих по принципу «Клиент-сервер».
  • Наличие большого количества предустановленных шаблоном и примеров.
  • Удобство работы за счёт специальных конструкторов, мастеров, сервиса подсказок и т.д.
  • Возможность работы более чем с 40 различными форматами.
Скачать Visual FoxPro 9.0 бесплатно

Для полного комплекта мы рекомендуем вам также скачать Денвер (программа, создающая локальный сервер на вашем ПК).

Методические указания Программирование в среде FoxPro

/ Методические указания Программирование в среде FoxPro Методические указания по выполнению лабораторной работы №2 «Программирование в среде FoxPro»

Данная работа состоит в создании модели базы данных определенной предметной области и реализации этой модели как приложения VisualFoxPro. Таким образом лабораторная работа будет состоять из следующих частей:

Создание модели базы данных на Erwin(можно использовать модель, созданную в лабораторной работе №1).

Отображение модели БД из ErwinвFoxPro.

Создание приложения VisualFoxProс пользовательским интерфейсом.

1. Теоретическое введение.

VisualFoxPro– одна из наиболее популярных систем управления базами данных.VisualFoxPro– это объектно-ориентированный, визуально-программируемый язык, управляемый по событиям, в полной мере соответствующий требованиям, предъявляемым к современным средствам проектирования и реализации программного обеспечения.

Визуальное средство разработки

Совмещение языка программирования Xbase,SQLи объектно-ориентированного языкаVisualFoxPro

Поддержка объектно-событийного программирования

Возможность создания собственных классов и подклассов, включая наследование, инкапсуляцию и полиморфизм

Возможность работы в операционных системах WindowsNT,Windows95,Windows98

Наличие большого набора элементов управления, позволяющих создать удобный пользовательский интерфейс

Наличие визуального отладчика прикладных программ

Возможность создания независимого запускаемого модуля пользовательского приложения в виде exe-файла и его свободное распространение

Возможность создания отчетов для печати данных

Объектная модель VisualFoxPro.

VisualFoxProсодержит новые языковые конструкции, позволяющие применять возможности объектно-ориентированного программирования.

Объектно-ориентированное программирование позволяет программировать в терминах классов: определять классы; конструировать новые и производные (дочерние) классы на основе существующих классов; создавать объекты, принадлежащие классу (экземпляры класса). [4]

Основные понятия

Любой элемент управления или объект в Visual FoxPro всегда является экземпляром класса. Класс описывает свойства (атрибуты) объекта и методы обработки событий (процедуры). При создании объекта он наследует структуру и поведение своего класса. В свою очередь класс, называемый производным или дочерним классом (подклассом), также может быть создан на основе другого родительского класса и при этом наследует его структуру и поведение. Для каждого элемента управления Visual FoxPro существует свой класс, называемый базовым классом. В том случае если используемый элемент управления основан только на базовом классе, то его родительский класс совпадает с базовым классом Visual FoxPro.

Наследование позволяет определять новые классы в терминах существующих классов.

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

Полиморфизм - это возможность различных объектов реагировать по-разному на одни и те же события.

Классы

В Visual FoxPro существуют следующие базовые классы :

CheckBox, Column, ComboBox, CommandButton, CommandGroup, Container, Control, Custom, EditBox, Grid, Header, Hyperlink, Image, Label, Line, ListBox, OLEControl, OptionButton, OptionGroup, Page, PageFrame, Shape, Spinner, TextBox, Timer.

Свойства.

Каждый объект обладает набором свойств. Свойства могут быть как наследуемые от родительского класса, так и добавленные индивидуально для создаваемого объекта. Список всех свойств объекта и их значений отображается в диалоговом окне Properties. Это окно имеет пять вкладок для отображения списка всех свойств и определенных подгрупп свойств.

Ссылка на свойство записывается как Имя_объекта.Свойство.

Методы.

Для каждого объекта в Visual FoxPro существует свой набор методов. Методом называется некоторая процедура в Visual FoxPro. Список методов отображается совместно со всеми свойствами в диалоговом окнеProperties. Существуют стандартные методы, наследуемые создаваемыми объектами из базовых классов Visual FoxPro, и определяемые пользователем методы.

События.

В Visual FoxPro для каждого объекта возможен определенный набор событий. На каждое событие любого объекта можно добавить исполняемую процедуру.

2. Практическая часть.

В качестве практической части создадим простейшую модель базы данных с помощью Erwin, отобразим модель вFoxProи затем создадим простейшее приложение в средеVisualFoxPro, реализующее данную модель.

2.1. Модель базы данных на Erwin.

При создании модели выберем тип модели как Logical/Physical, а в качестве целевой базы данных выберемFoxPro. Это позволит нам в дальнейшем перенести модель в средуFoxPro.

Создание модели базы данных подробно описано в лабораторной работе №2. Здесь приведем только саму логическую и физическую модель.

В качестве предметной области выберем часть модели, рассмотренной в лабораторной работе №1.

2.2. Отображение модели данных из ErwinвFoxPro.

Для отображения модели в среду FoxProследует выбрать пункт меню

Tools->Forward Engineer/Shema Generation…

Затем следует нажать кнопку «Generate» и указать папку, куда будут сгенерированы файлы таблиц базы данных:

В указанной директории появятся файлы таблиц FoxProс расширением .dbf:branch.dbfиstaff.dbf, которые мы сможем использовать при создании приложения наVisualFoxPro.

2.3. Создание приложения на FoxPro.

Первое, что необходимо сделать, это запустить VisualFoxProи создать новый проект.

File->Newпоявится окно, в котором следует выбратьProjectи нажатьNewfile:

В новом окне следует указать директорию для проекта и дать название файлу проекта. Будет создан новый проект:

Второе, что мы сделаем, это создадим базу данных и добавим в нее наши файлы, созданные ранее. Для этого перейдем в окне проекта на вкладку Data(данные), и нажмем на кнопкуNew. В появившемся окне выберемNew Database.

Создастся пустая база данных. В нее необходимо добавить наши таблицы через пункт меню Addtable. Получим базу данных, состоящую из двух таблиц.

Теперь создадим первую форму с помощью VisualFoxPro. На этой форме будем добавлять отделения фирмы в базу данных.

Для создания формы прейдем на вкладку Documents->Formsи нажмем на кнопкуNew. Создастся новая пустая форма. Расположим на ней элементыLabel,TextBox,EditBoxиCommandButtonкак показано на рисунке:

При нажатии на кнопку Выход будем выходить из формы, на кнопку Добавить – добавлять отделение фирмы в базу данных. Сделаем двойной щелчок на кнопке Выход и добавим код, закрывающий форму:

Выполнение данного кода закрывает активную форму.

Рассмотрим код для кнопки «Добавить».

close tables all

SELECT count(*) FROM branch INTO ARRAY ccount WHERE bno=cod

insert into branch values (cod,thisform.text5.value, val(thisform.text2.value),thisform.text3.value,thisform.edit1.value,thisform.text4.value)

messagebox('Ошибка! Введены не все данные')

MESSAGEBOX('Отделение с таким номером уже есть')

В данном коде мы сначала закрываем все открытые таблицы. Это делается, чтобы избежать возможных исключительных ситуаций. Затем мы запоминаем в переменную codномер отделения, который должен быть уникальным. Затем с помощью первого запроса проверяем, нет ли уже отделения с таким номером. Если нет, то добавляем новое отделение, выводим сообщение о том, что отделение добавлено, и закрываем форму, иначе – выводим сообщение об ошибке.

Теперь можно попробовать просмотреть работу созданной формы. Для этого необходимо в контекстном меню формы выбрать пункт RunForm. Введем данные и добавим отделение.

Теперь создадим еще одну форму, на которой будем отображать отделения фирмы, занесенные в базу данных. Внешний вид формы:

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

Загрузку номеров отделений будем проводить при активизации формы (событие Form.Activate):

close tables all

USE branch.dbf in A

SELECT bno FROM branch INTO ARRAY Br order by bno

FOR i=1 to alen(Br)

Теперь на событие «Выбор элемента в ComboBox» добавим код, выводящий данные о выбранном отделении. Но прежде создадим в таблицеbranchиндексное поле для более эффективного поиска. Индексным полем будет номер отделения (bno).

А теперь приведем код для события Combo1.Click:

close tables all

USE 'branch.dbf' in A

set index to 'branch' order bno

seek(alltrim(thisForm.combo1.value)) in branch

use staff.dbf in B

select count(*) from staff into array A where bno=thisform.combo1.value

Поясним данный код. В начале мы ищем по индексному полю нужную запись и выводим в текстовые поля данные. Затем мы ищем число сотрудников, числящихся в данном отделении.

Рассмотрим теперь код кнопки «Удалить»:

close tables all

messagebox("Нельзя удалить отделение, в котором числятся сотрудники")

delete from branch where bno=cod

Создание и управление базой данных в СУБД FoxPro - реферат, курсовая работа, диплом

Создание и управление базой данных в СУБД FoxPro

Хочу данную работу! Нажмите на слово скачать

Чтобы скачать работу бесплатно нужно подписаться на нашу группу ВКонтакте! Просто подпишитесь, нажав на кнопку внизу.


Через несколько секунд после проверки подписки появится ссылка на продолжение загрузки работы.

>>>>> Перейти к скачиванию файла с работой
Кстати! В нашей группе ВКонтакте мы бесплатно помогаем с поиском рефератов, курсовых и информации для их написания. Не спешите выходить из группы после загрузки работы, мы ещё можем Вам пригодиться ;)

Сколько стоит заказать работу? Бесплатная оценка

Повысить оригинальность данной работы. Обход Антиплагиата.

Сделать работу самостоятельно с помощью "РЕФ-Мастера" ©
Узнать подробней о Реф-Мастере

РЕФ-Мастер - уникальная программа для самостоятельного написания рефератов, курсовых, контрольных и дипломных работ. При помощи РЕФ-Мастера можно легко и быстро сделать оригинальный реферат, контрольную или курсовую на базе готовой работы - Создание и управление базой данных в СУБД FoxPro.
Основные инструменты, используемые профессиональными рефератными агентствами, теперь в распоряжении пользователей реф.рф абсолютно бесплатно!

Секреты идеального введения курсовой работы (а также реферата и диплома) от профессиональных авторов крупнейших рефератных агентств России. Узнайте, как правильно сформулировать актуальность темы работы, определить цели и задачи, указать предмет, объект и методы исследования, а также теоретическую, нормативно-правовую и практическую базу Вашей работы.

Как оформить список литературы поГОСТу ?

к курсовой работе по дисциплине:

"Технология разработки баз данных"

Тема курсовой работы:

"Создание и управление базой данных в СУБД FoxPro".

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

  • Аннотация
    • ВВЕДЕНИЕ
    • 1 Содержательная постановка задачи
    • 2. Формализованная постановка задачи
    • 3. Структура входной, хранимой и выходной информации
    • 4. Структура программы, структура диалога, формы
    • 5. Результаты работы программы
    • 6. Руководство пользователя по работе с программой "Товары-почтой"
    • Заключение
    • Список использованных источников
    • Приложение А
ВВЕДЕНИЕ

Использование баз данных (БД) сегодня является неотъемлемой частью функционирования большинства предприятий и деловой деятельности математика и системного программиста. В связи с этим все большую актуальность приобретает освоение студентами основных принципов построения и эффективного применения соответствующих технологий и программных продуктов - систем управления базами данных (СУБД).

Целью изучения дисциплины "Базы данных" является ознакомление студентов с теоретическими основами построения БД, в первую очередь реляционных, возможностями современных СУБД, современными тенденциями развития СУБД, а также овладение технологиями и практическими навыками их применения в своей будущей профессиональной деятельности.

Выбор FoxPro обусловлен прежде всего разносторонностью этой СУБД, удобством как для разработчика приложений, так и для обычного пользователя. Наличие в ней языка программирования позволяет создавать сложные системы обработки данных, ориентированные на конкретные задачи и даже под конкретного пользователя. С другой стороны, в ней отражены и в разной мере используются многие современные технологии программирования: ActiveX, COM, SQL, OLE, API и многое другое. При всем этом она сохранила совместимость со старыми версиями под DOS, созданными еще фирмой Fox Software. Если еще добавить, что FoxPro реализован также в средах Macintoch и Unix, то наш выбор становится обоснованным.

Целью выполнения курсовой работы является приобретение студентами практических навыков проектирования баз данных и разработки программного обеспечения по управлению базами данных с использованием СУБД.

В задачи курсовой работы по дисциплине "Базы данных и знаний" входят:

1. Разработка структуры баз данных.

2. Работа с несколькими таблицами и установление взаимосвязей между таблицами.

3. Разработка системы меню.

4. Разработка и формирование отчетов.

5. Использование расширенных средств СУБД ввода и вывода данных.

6. Организация справочной системы.

1 Содержательная постановка задачи

В рамках данной курсовой работы необходимо разработать программное обеспечение по управлению базой данных "Товары - почтой" с использованием СУБД Visual FoxPro. Программное обеспечение должно обеспечивать просмотр, редактирование, вставку, удаление записей базы данных, формирование запросов и отчетов.

2. Формализованная постановка задачи

База данных "Товары - почтой" должна содержать три отношения: "Товар" (wares), "Заказ" (buyer), "Поставщик" (supply). На основе того, что я выбрал в качестве товара "игры для ПК на дисках", я создал четвертое отношение "Жанры игр" (zhanr), для более подробной и полной базы.

Отношение "Товар" должно содержать информацию о предоставляемых товарах и представлено следующими атрибутами:

Первичным ключом данного отношения является "Шифр".

Отношение "Заказ" содержит список людей, которые заказали товар по почте, и содержит следующие атрибуты:

Поставщик доставивший товар

Первичным ключом данного отношения выступает атрибут "Шифр".

Отношение "Поставщик" содержит список поставщиков и содержит следующие атрибуты:

Номер удостоверения личности

Первичным ключом данного отношения выступает атрибут "Номер УЛ".

Отношение "Жанры игр" содержит список возможных жанров игр и содержит следующие атрибуты:

Название жанра игры

Первичным ключом данного отношения выступает атрибут "Шифр".

Отношение "Товар" и "Поставщик" являются родительским по отношению к отношению "Заказ". Отношение "Товар" в свою очередь является дочерним по отношению к отношению "Жанры игр". Вид связи между отношениями "Товар" - "Заказ", "Поставщик" - "Заказ", "Жанры игр" - "Товар", - один-ко-многим.

Взаимодействие с данными вышеописанных отношений должно осуществляться посредством форм, запросов и отчетов.

В рамках данного приложения должны быть реализованы следующие запросы и отчеты:

Выдать статистику в разрезе "товар".

Выдать списки поставщиков в разрезе "Город".

3. Структура входной, хранимой и выходной информации

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

Структура отношений "Заказ", "Товар", "Поставщик" и "Жанры игр" базы данных "Товары - почтой" представлена на рисунках 1, 2, 3, 4 соответственно.

Рисунок 1 Структура отношения "Заказ"

Рисунок 2 Структура отношения "Товар"

Рисунок 3 Структура отношения "Поставщик"

Рисунок 4 Структура отношения "Жанры игр"

В каждой таблице данной СУБД существует первичный ключ, обеспечивающий однозначное определение записей таблицы. Ключ предназначен для более быстрого выполнения запросов к базе данных. По ключевым полям организуется связь между таблицами.

После создания структуры таблиц необходимо создать связи между ними. Так как одной записи таблиц "Товар" и "Поставщик" может ставиться в соответствие несколько записей в таблице "Заказ" и одной записи из таблицы "Жанры игр" - несколько из таблицы "Товар", то были созданы связи один ко многим. Схема представлена на рисунке 5

Рисунок 5. Схема связей между таблицами

4. Структура программы, структура диалога, формы

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

Таблица 1 Структура меню.

На рисунке 6 показан результат работы системного меню. Как видно, все команды данного меню имеют "горячие клавиши", нажатие на которых тоже приведет в выполнению нужной команды.

Рисунок 6 Системное меню

Рисунок 7 Главная форма приложения

Для просмотра, ввода и редактирования данных, хранящихся в таблицах, используются формы, являющиеся более наглядным средством представления информации. В рамках данной курсовой работы все формы были построены с помощью конструктора форм. Все функции кнопок, расположенных на формах приложения, описаны в листинге программы (Приложение А). Форма "Заказы", представленная на рисунке 8, позволяет осуществить просмотр всех сведений о заказах, отредактировать их, удалить и добавить данные. Для перехода по записям используются кнопки навигации.

Рисунок 8 Форма "Заказы"

Форма "Поставщик", макет которой представлен на рисунке 9, позволяет осуществить просмотр и редактирование сведений о поставщиках.

Рисунок 9 Форма "Поставщик"

Форма "Товар" показывает информацию о доступном товаре, так же можно отредактировать, удалить и добавить данные (Рисунок 10). Выбор жанра осуществляется через выпадающий список.

Рисунок 10 Форма "Товар"

Форма "Руководство пользователя" предоставляет подробную информацию по работе с данной программой (Рисунок 11).

Рисунок 11 Форма "Руководство пользователя"

5. Результаты работы программы

В рамках разработки приложения "Товары-почтой" были сформированы запросы, которые и являются результатами работы программы.

Отчет "Статистика по товарам" выводит отчет содержащий в себе шифр товара, цену, количество проданных, процентную надбавку и прибыль с каждого товара. Отчет представлен на рисунке 13.

Рисунок 13 Отчет "Статистика по товару"

Отчет "Поставщики по регионам" выдает список поставщиков, сгруппированных по региону. Отчет представлен на рисунке 14.

Рисунок 12 Результат выполнения запроса "Книги в единственном экземпляре"

Все формы созданы в едином стиле, позволяющем пользователю быстро сориентироваться в использовании программы.

Одной из основных задач создания и использования баз данных является предоставление пользователям необходимой информации на основе существующих данных. В базе данных "Товары-почтой" используются табличные отчеты. Все отчеты были построены с помощью Мастера отчетов и в последствии отредактированы в конструкторе отчетов.

6. Руководство пользователя по работе с программой "Товары-почтой"

Приложение "Товары-почтой" предназначено для автоматизированного ввода и обработки данных БД "Товары-почтой".

После запуска программы перед оператором появится форма, которая позволяет открыть остальные формы БД и запустить на выполнение отчеты и запросы.

В формах редактирования данных, изначально стоит режиме обозревателя, т.е. в этом режиме форма не позволит изменять данные. Это предохраняет от случайной (неумышленной) потери данных. Чтобы выйти из режима обозревателя, необходимо нажать на кнопку "Изменить". Форма перейдет в режим редактора, т.е. теперь поля будут доступны для изменения данных. Удалить запись в режиме обозревателя невозможно.

Для добавления данных необходимо нажать кнопку "Добавить" и ввести соответствующие данные.

Для удаления записи нажмите кнопку "Изменить", затем "Удалить".

Переход по записям осуществляется с помощью кнопок навигации:

"Первая" - перейти к первой записи

"Пред." - перейти к предыдущей записи

"След." - перейти к следующей записи

"Посл." - перейти к последней записи

При нажатии на кнопку "Выход" выйдет сообщение о подтверждении выхода из формы. Если ответ был отрицательный, то форма останется открытой. Если положительный, то данная форма закроется и откроется главная форма.

Работа со всеми формами осуществляется аналогично.

База данных для полной работоспособности должна находиться в директории C: \Program Files\DB

В курсовой работе были рассмотрены приемы проектирования и реализации реляционных баз данных и таблиц в СУБД Visual FoxPro. Была спроектирована структура реляционной таблицы, в нее были внесены данные с помощью специальных запросов. В данной курсовой работе была разработана база данных "Товары-почтой", содержащая сведения о продаже игр для ПК.

В результате курсовой работы был получен опыт в том, как использовать основные модели данных и их организацию, принципы построения языков запросов и манипулирования данными в БД. Было получено представление о том, как эффективно использовать среду разработки приложений Microsoft Visual Fox Pro.

Список использованных источников

Хансен Гэри, Хансен Джеймс. Базы данных: разработка и управление: Пер. с англ. - М. ЗАО [. В соответствие с ФЗ-99 от 05.05.2014 данная форма заменена на непубличное акционерное общество] "Издательство БИНОМ", 1999.

Живаева А.В. Лимарева И.Г. Методические указания по выполнению курсовой работы по дисциплине "Базы данных", Караганда: КарГТУ, 2006. 17 с.

Событие Кнопки "Руководство пользователя" главной формы:

Событие Кнопки "О программе" главной формы:

DO FORM "C: \Program Files\DB\about"

Событие Кнопки "Выход" главного меню

if messagebox ('Вы подтверждаете выход из программы? ', 4+32+256,"Выйти") =6 then

_screen. activeform. release ()

set sysmenu to default

События кнопок навигации форм "Заказы", "Поставщик", "Товар", "Жанры игр" очень схожи и различие между ними только из-за различия в количестве используемых объектов на форме. Приведу пример из формы "Товар"

this. enabled =. f.

thisform.command1. enabled =. t.

thisform.command2. enabled =. f.

thisform.command4. enabled =. t.

_screen. activeform. refresh ()

thisform.command3. enabled =. t.

thisform.command1. enabled =. t.

thisform.command4. enabled =. t.

_screen. activeform. refresh ()

this. enabled =. f.

thisform.command3. enabled =. f.

_screen. activeform. refresh ()

thisform.command2. enabled =. t.

thisform.command3. enabled =. t.

thisform.command4. enabled =. t.

_screen. activeform. refresh ()

this. enabled =. f.

thisform.command4. enabled =. f.

_screen. activeform. refresh ()

this. enabled =. f.

thisform.command1. enabled =. f.

thisform.command2. enabled =. t.

thisform.command3. enabled =. t.

_screen. activeform. refresh ()

_screen. activeform. refresh ()

IF thisform.command8. Caption = "Изменить"

thisform. text1. ReadOnly =. F.

thisform. text2. ReadOnly =. F.

thisform. text3. ReadOnly =. F.

thisform. text4. ReadOnly =. F.

thisform. text5. ReadOnly =. F.

thisform. text6. ReadOnly =. F.

thisform.combo1. ReadOnly =. F.

thisform.command2. Enabled =. F.

thisform.command1. Enabled =. F.

thisform.command3. Enabled =. F.

thisform.command4. Enabled =. F.

thisform.command5. Enabled =. F.

thisform.command7. Enabled =. F.

thisform.command9. Enabled =. T.

thisform.command8. Caption = "Принять"

thisform. text1. ReadOnly =. T.

thisform. text2. ReadOnly =. T.

thisform. text3. ReadOnly =. T.

thisform. text4. ReadOnly =. T.

thisform. text5. ReadOnly =. T.

thisform. text6. ReadOnly =. T.

thisform.combo1. ReadOnly =. T.

thisform.command2. Enabled =. T.

thisform.command1. Enabled =. T.

thisform.command3. Enabled =. T.

thisform.command4. Enabled =. T.

thisform.command5. Enabled =. T.

thisform.command7. Enabled =. T.

thisform.command9. Enabled =. F.

thisform.command8. Caption = "Изменить"

IF thisform.command5. Caption = "Добавить"

thisform. text1. ReadOnly =. F.

thisform. text2. ReadOnly =. F.

thisform. text3. ReadOnly =. F.

thisform. text4. ReadOnly =. F.

thisform. text5. ReadOnly =. F.

thisform. text6. ReadOnly =. F.

thisform.combo1. ReadOnly =. F.

thisform.command2. Enabled =. F.

thisform.command1. Enabled =. F.

thisform.command3. Enabled =. F.

thisform.command4. Enabled =. F.

thisform.command8. Enabled =. F.

thisform.command7. Enabled =. F.

thisform.command9. Enabled =. T.

thisform.command5. Caption = "Принять"

thisform. text1. ReadOnly =. T.

thisform. text2. ReadOnly =. T.

thisform. text3. ReadOnly =. T.

thisform. text4. ReadOnly =. T.

thisform. text5. ReadOnly =. T.

thisform. text6. ReadOnly =. T.

thisform.combo1. ReadOnly =. T.

thisform.command2. Enabled =. T.

thisform.command1. Enabled =. T.

thisform.command3. Enabled =. T.

thisform.command4. Enabled =. T.

thisform.command8. Enabled =. T.

thisform.command7. Enabled =. T.

thisform.command9. Enabled =. F.

thisform.command5. Caption = "Добавить"

_screen. ActiveForm. Refresh ()

if messagebox ('Вы подтверждаете выход из формы? ', 4+32+256,"Выход") =6 then

_screen. activeform. release ()

DO FORM "C: \Program Files\DB\main"

дипломная работа по дисциплине Программирование, компьютеры и кибернетика на тему: Создание и управление базой данных в СУБД FoxPro; понятие и виды, классификация и структура, 2014-2015, 2016 год.

Пишем программу на Fox Pro

Пишем программу на Visual FoxPro

После того, как проделана очень большая подготовительная работа, сама программа получается короткой и простой.

Сам текст программы такой:

Вот и вся программа. Остальное или в формах, или в процедурах.

Главную программу даже изменять в дальнейшем не придется, нечего здесь исправлять. Изменениям будут подвергаться процедуры. Единственное, что, быть может, вы захотите изменить - это убрать строкуDO forms\mainform . Если ее удалить, то первая форма (со списком фамилий) автоматически, при старте программы, появляться не будет.

Назвав этот файл start.prg сохраните его в папке с программами. Можно и в корневой папке проекта, но тогда придется корректировать путь в некоторых командах.

Сохранив файл, сообщите системе, что он - главный, сама Foxpro не может этого определить. Для этого, щелкнув по его имени правой кнопкой мыши, выберите Set Main:

Теперь и exe-шник будет создан правильно, и вы не запутаетесь, поскольку это единственный программный файл, выделенный жирным шрифтом.

Близкие контакты третьего вида с Visual Foxpro

Близкие контакты третьего вида с Visual Foxpro

Автор Редакция. 21.02.2013

Многие наверняка, в свое время, задавались интересным вопросом: «А вот как бы задействовать всю силу применяемой в моем проекте СУБД? Не только стандартные SQL запросы, а и скрытые возможности». Тогда ведь можно будет получать результат наиэффективнейшими методами…

Верно. Не так уж и сложно разработать свой провайдер, по крайней мере для FoxPro. Думаю, что эта СУБД еще имеет широкое применение. А вот как – описано в статье.

Ну, что ж. Вот и я дожил до того, что пишу собственную статью. Возможно потому что хочется поделиться наработками или из альтруистических побуждений, или потому что не нашел аналогичных статей (может искал плохо). Но истинный смысл в том, что многие знают и умеют интегрировать свои программы с СУБД обычными путями (непрекословными истинами, прописанными кем-то из аналогичных побуждений), а ведь на них свет клином не сошелся. Очень жаль, что не всегда то, что кажется хорошим – хорошее на самом деле.

Вот и я столкнулся с весьма нетривиальной ситуацией, в которой нужно было разработать программу, хранящую и обрабатывающую данные в какой-нить удобной локальной СУБД. Первое, что пришло в голову* – это воспользоваться стандартным набором ADO, благо Delphi его любит и уважает. А что? Неплохо, методы стандартные, хорошо задокументированные (от BDE, которого изучают в любых универах, отличающиеся мало).

А тут читатель скажет: «А что же еще могло прийти?».

Да никто и не спорит: ADO удобно, можно подключить любую СУБД, проинсталированную на локальном компьютере или подключить провайдера удаленно.

«Что ж, можно попробовать» – подумал я. Но, только я начал набирать программу и базы, как оказалось, что все это до меня уже набрано хитрыми программистами. Базы, коды-расчетчики… Все уже есть, но не в Delphi, а в достаточно популярной ранее СУБД – FoxPro.

«УРА!» – сказал я и попытался почитать «километровый» код программы… Скажу вам, что малоприятно читать чужие писульки, особенно, если они плохо закоментированны…

Основное для себя уяснил – функции, которые мне нужны были оформлялись в виде подпрограмм с четкими названиями, соответствуя своим задачам, дабы их аргументы были предельно понятны, и вызывать их не составляло труда. Но, это можно было сделать только в FoxPro… Так что пришлось мне выбирать: либо писать свои, и терять время, либо как-то заставит самого Фокса выполнять этот код.

Я выбрал второе, поскольку я ленивый и мне никак не хотелось перелопачивать заново всю методику. И вот, что из этого вышло…

Для начала пару слов об ADO. Говоря о компоненте Delphi, ADO позволяет обрабатывать команды классического SQL плюс SQL навороты, которые поддерживает провайдер в командах. Для этого можно использовать: либо ADOQuery, как привычный компонент, либо ADOCOmmand, позволяющий выполнять как отдельные команды, так и целый файл с таковыми.

Однако и в этой ложке меда оказалась своя бочка дегтя. И дело здесь вот в чем. Многим известно, что FoxPro – это одна из первых СУБД, являющаяся на то время весьма революционной. Помимо применения сверхбыстрых (на то время) технологий обработки данных RushMore, она еще и имела мощный язык обработки данных, который, кстати, не очень сильно изменился и по сей день. Его возможности позволяли достаточно гибко работать с данными, написав при этом кода меньше, чем скажем в Клиппере. К тому же, ядро FoxPro было сделано оверлеями – прадедушками нынешней DLL, что само по себе давало неплохую экономию ресурсов и прирост скорости даже на слабеньких машинах 8086.

С переходом под крылышко Микрософтовцев, эта СУБД приобрела полноценный модуль провайдера, и стала доступна как COM система.

«Что ж, гарно» – сказали программисты и… слегка обломались – провайдер настолько урезали, что он уже перестал понимать стандартные команды этой СУБД, кроме тех, что попадают под определение классического SQL (SELECT,DELETE,UPDATE,CREATE,ALTER…).

Но оригинальный язык Фокса был помимо этих команд наполнен массой функций, которые увы оказались запертыми в недрах ядра системы, и могли выполняться лишь программами, написанными в самом FoxPro.

Практически все функции (а их в FoxPro множество) больше не могли работать в ADO. А ведь было бы удобно, тем кто знает эту СУБД как пять своих пальцев, использовать ВСЕ ее возможности в своих программах, написанных на других языках.

Тут я сделаю отступление, ибо может кто-то скажет: «Да ради бога, пусть пишут прям на Фоксе». Однако, тут много минусов. Дело все в том, что прибрав к рукам СУБД Микрософт не особо позаботилась о ее прогрессе, оно и понятно – купил конкурента, чтоб задавить своими продуктами. Поэтому, наверняка именно такими мыслями руководствовались тамошние разработчики, подарив Фоксу весьма корявую среду разработки, совершенно неудобную в пользовании и кучу багов в ядре. Да и обьектная модель ее желает лучшего. Уж лучше бы не трогали вообще, от оконных разработок на Фоксе одни проблемы. Взять хотя бы распространенный баг с закрытием окна – не всегда срабатывает крестик закрытия окна, а иногда просто вешает программу. И смех и грех. Выходили из этой проблемы банально – ставили свою кнопку «Закрыть». Где же тут удобства?

Впрочем, ладно, разговор не об этом… Вернемся к нашим баранам. Поскольку ADO мы отбрасываем, возникает вопрос: «…а что вместо него?». Резонно. Что ж, есть возможность решения этой проблемы. Дело в том, что FoxPro была сделана во времена, когда большой славой пользовались интерпретаторы – программы, пошагово выполняющие код написанный программистом. Каждая строчка программы переводилась в код и сразу же исполнялась, потом интерпретатор повторял этот фокус на следующей строчке. Эта возможность в FoxPro осталась до сих пор, правда FoxPro не совсем интерпретатор, а скоре псевдокомпилятор, а ядро на самом деле работает со скомпилированными байт-кодами (На P-CODE Visual Basiс похоже), но это нам совершенно не важно. Главное, что все-таки источником является именно «писанина» программиста аз есьм, даже одна строчка команды, посланной интерпретатору, будет рассматриваться им как целостная программа, и будет успешно переведена в псевдокод и выполнена.

Причем, строчка эта может быть представленная такими типами как String и Pchar. Уже неплохо. Но как послать интерпретатору строку-команду? Вот мы и подошли к самому главному. Дело в том, что одна из магических возможностей FoxPro – есть инструкция, которая выполняет переданную ей строку-параметр как команду.

На Фоксе это называется макроподстановкой и звучит так:

Где: StrCommand:String. говоря языком Вирта, строка содержащая команду.

При этом интерпретатору все равно, что там будет находиться, если это правильная команда он ее выполнит. С этим можно провести примерно такую аналогию:

«Ну и что такого?» – скажут многие. Чем круче макроподстановка? А те, кто знают FoxPro на пять, ответят – макроподстановка позволяет не только выполнять ВСЕ команды, но и еще возвращать результат, если в качестве команды поступило выражение. То есть:

А вот аналогия в SQL:

К тому же, как по мне, не этично создавать отдельный курсор (курсор в FoxPro – это набор данных, полученный каким-либо образом) ради одного значения. Можно конечно и так, но что будет, если в выражении повстречаются команды, которые заложены в ядре, но неизвестные провайдеру?

Например, команду замены в поле, где содержится имя файла расширения с TIF на JPG в таблице А1:

Query подавится ею. Впрочем, для любителей классики есть менее эффективная команда – UPDATE. Но, если поздороваться так с интерпретатором тет-а-тет, то команда будет выполнена немедля.

А значит, таким образом, можно легко взять старые программы и построчно (или прям целиком программу из файла, указав его имя в SET PROCEDURE TO… после чего, пустив на выполнение процедуру командой DO или, если это функция просто выполнить ее) скармливать их интерпретатору напрямую обходя, или вообще не имея установленного провайдера.

Вот эту идею я взял за основу

Первоначально пришлось почитать литературу по FoxPro. Смысл связи оказался простым: дело все в том, что на FoxPro можно писать компоненты, которые потом с легкостью применять в Delphi, поскольку Микросовтовцы все таки пошли навстречу и снабдили СУБД возможностью компиляции (на сей раз, полноценной) кода в COM Server в виде DLL. Опа! Собственный интерфейс – вот то, что нужно. И там же можно навертеть все чего пожелаем.

Ну что ж, приступим к разработке стратегии. Нам нужно написать на FoxPro DLL с функциями, которые бы общались напрямую с интерпретатором, передавая ему строку команды, и возвращали бы результат выполнения этой команды. Для передачи строки без возвращения результата напишем процедуру, ибо может понадобиться выполнять такие команды как, скажем: Use или Replace (подобной вышеописанной, из тех, что не возвращают результат или генерируют курсоры). Для получения результата выполненного выражения системой напишем функцию. Потом все это скомпилируем как DLL с COM сервером и зарегистрировав на машине (командой Regsvr32 <Имя DLL> в консоли) вставим в Delphi через команду меню Project->Import type library, где выберем эту DLL. После чего можно будет распоряжаться этими функциями, как методами компонента.

Начнем с написания библиотеки. Для этого понадобится Visual Foxpro. Я делал на 8-й версии, но и более ранние тоже подходят.

Запустим Foxpro и в меню File выберем пункт New. В появившемся окошке File Type выберем Project, и нажмем на кнопку New File. Нас попросят написать имя проекта. Имя, допустим, будет TFoxPro. Ок. Появилось окошко с описанием проекта – это шаблон компонента (см. рисунок 1):

Создадим новый класс, для чего, став на ветку Class Library, кликнем по кнопке New. Появившееся окошко попросит нас написать имя класса и его наследование (см. рисунок 2):

Допустим, имя будет TFoxPro (назвать можно как угодно). Наследовать мы будем пользовательский «чистый» класс, поскольку нам визуальные и контейнерные классы никак не нужны, поэтому в поле Based On выбираем Custom. В поле Store In укажем путь куда сохранится класс. Жмем Ок.

Теперь добавим в него методы. Тем кто знает, как в Delphi писать ActiveX, будет не сложно понять следующие действия, поскольку они схожи. В главном меню Class выбираем New Method. Чтобы меню Class появилось, нужно стать в окно Class Designer созданного класса. В появившемся окошке создаем ему метод. Допустим, назовем его MyProc с видимостью Public. Жмем Add. И так же добавим еще один метод MyFunc (см. рисунок 3):

Если на экране есть окно Properties, то можно в нем увидеть как появляются новые методы. Если окошка этого нет, нужно его открыть либо с тулбара, либо контекстным меню по формочке класса (который у нас называется tFoxPro в окне Class Designer) выбрать элемент Properties. Добавив методы, впишем в них код. Сначала в MyProc, для чего в окне Properties найдем строчку с его названием и откроем ее, кликнув дважды. Открывшееся окно редактора всем своим видом пригласит нас писать программку, чем и займемся (см. рисунок 4):

Текст программы будет весьма простой: подобный тому, что приведен выше. Добавим только команду описания параметра, ибо нам же нужно в метод передавать команду в виде строки, вот и опишем его как строка:

Здесь: && — означают комментарии (как // в Делфи или Си), так что можно копипастить эти строки полностью.

«Всего-то?» – удивится кто-то. А что тут такого? Все проще простого.Принимаемая строка будет расценена как команда.

Займемся теперь функцией: «…те же яйца, только в профиль». Так же открываем ее код и вписываем вышеприведенный пример, не забыв прикрутить параметр, в который будет передана команда:

LPARAMETERS lcrun as String (см. рисунок 5):

Das Ist Alles – сохраним проект. Теперь дело за малым: скомпилировать библиотеку, но сначала укажем, что методы класса являются OLE видимыми. Для чего в меню Class откроем окно Class Info. Здесь поставим галочку на OLE Public. Если этого не сделать, компилятор не впишет класс в сервер заругавшись строчкой «Cannot build a DLL without OLE Public Class». Непонятно, зачем создатели сделали эту опцию, могли бы сделать так, чтобы компилятор сам проверял необходимость публикации класса, если компилируется COM Server (см. рисунок 6):

После перепрыгиваем в окно Project Manager и кликаем по кнопке Build. В появившемся окне Выберем Multi-threaded COM server DLL и выставим все птички в Options, чтобы перекомпилирование прошло над всеми фалами (Recomile All Files). Если всплывут ошибки, мы их захотим увидеть (Display errors) и пусть перестраивает ID компонента (см. рисунок 7):

Жмем ОК. Итак, как говорил Слепой Пью: «Дело сделано…». Заглянув в папку с проектом можно увидеть, что в нем лежит библиотека <tfoxpro.dll> (учитывая, что я все файлы называл одинаковым именем и сложил в одну папку). Компилятор также любезно предоставил нам библиотеку типов <tfoxpro.tlb>. Остальные файлы принадлежат самому проекту FoxPro. Например: VCX – это тот самый класс, VCT – описание его методов (можно посмотреть в блокноте), тот код, что мы написали. Остальные файлы: версия проекта и описания проектов.

Вот и наступил второй этап. Своего провайлера мы написали. Теперь его нужно зарегистрировать (я рекомендую сделать это программой RegSVR32, расположенной, как правило, в папке “C:\WINDOWS\system32\.”. Далее нужно импортировать библиотеку типов, «превратив» ее в компонент Delphi и кинуть на форму, чтобы пользоваться им как родным.

Поместив DLL в какой-нибудь каталог, где она будет жить, зарегистрируем ее (можно даже в System32, но я не рекомендую загаживать его). Если вы используете Total Commander или подобные проводники, то вам проще – стали на тот файл и в командной строке набрали RegSvr32 TFoxPro.DLL. Энтер и Ок. На самом деле это можно сделать и в Delphi при импорте, но я лично сталкивался с непонятными для меня глюками, когда импорт в «компонент» проходит успешно, а регистрации его в реестре нет. Поэтому «чтоб уж наверняка не было ни одного упырька» зарегим дедовским способом. Если библиотека правильно сделана, сообщение об успешной регистрации вылезет на экран. Кстати, если у вас нет regsvr32, не нужно отчаиваться, его аналог можно написать и на Delphi. Эта возможность имеется благодаря наличию в такого рода библиотеках функций DLLRegisterServer, которая регистрирует в реестре Windows свои классы. И соответственно DLLUnregisterServe, которая отменяет регистрацию. Эти функции regsvr32 и вызывает. Для регистрации или ее отмены достаточно просто вызвать эти функции из библы.

В Delphi это выглядит так:

Соответственно предполагается, что эта программа-регистратор лежит возле DLL. В реестр библиотеку с классом мы поселили, теперь получим компонентик. Для этого откроем окно Import Type Library из меню Project. По крайней мере, так делается в Delphi 6. Если у вас другая версия, то нужно найти соответствующую возможность импорта библиотеки. Предположим нашли. Найдем в списке нашу библиотеку и проинсталлируем ее класс в какой-нибудь package. Выберите сами ему название (см. рисунок 8):

После всего, если вы правильно проинсталлировали пакет, компонент должен появиться на соответствующей вкладке палитры. Теперь можно им пользоваться.

Для начала создадим таблицу в FoxPro. Да не важно, что там будет. Предположим, список файлов в строковом поле. Назовем таблицу «а1». Допустим, в ней будет поле Filename, где прописаны пути к файлам.

Кинем на форму наш компонент. Дадим ему имя FoxPro. Теперь мы хотим отобразить содержимое этого поля в таблице. «Долой тяжелые и неповоротливые DB компоненты» – скажу я и растяну на форме обычный StringGrid. Его и будем наполнять данными. Программно нам нужно проделать следующее:

получить количество записей функцией RECNO();

в цикле вписать записи в таблицу.

Для этого в FoxPro используется команда USE. Если нужно получить не все записи можно следующей командой послать что-то типа SELECT * FROM… WHERE <Условие отбора> ибо FoxPro понимает классический SQL..

Все, приступаем. Предположим код этот будет выполняться при создании формы. А можно его описать*** в отдельную функцию:

А в событии OnClose() формы закроем все курсоры командой foxpro.MyProc(‘close all’), дабы не оставлять мусора.

Обратите внимание. Я легко воспользовался стандартным набором функций FoxPro и выражениями. Аналог Alltrim конечно и в Delphi есть, но почему бы не напрячь саму СУБД?

Не очень много кода. Кто-то скажет «А зачем все это, если можно применить DBGrid не написав ни одной строчки кода?». Можно, но работать с DB компонентами в Delphi – сущий мазохизм.

К тому же, в качестве еще одного довода, приведу еще один аргумент:

Растяните на чистой форме DBGrid и ADOQuery. Скомпилируйте и посмотрите размер файла. У меня он равен 758 с копейками килобайт. А теперь скомпильте проект с TFoxPro. 453 с копейками. И это при том, что я в первом проекте ни строчки кода не написал. Убедил? Если нет, попробуйте написать тяжеловесный проект с кучей DB компонентов и посмотрите, что разница будет в десятки раз****.

Когда-то я писал весьма сильный проект по обработке конструкторской документации. Не PDM, но все же. Применил соответственно BDE. Когда база разрослась, а лежала она на расшаренной папке, программа заметно начала тормозить. Даже оптимизация толком не дала прироста скорости. После того как я перешел на FoxPro таким способом программа опять стала летать. Я практически не замечал тормозов. Плюс ко всему эту программу поставили на убитый горем старый компьютер, который еще «Ленина видел живым». Вот тогда оператор-расчетчик с удивлением сказал, что новая версия доставляет удовольствие от работы, и спросил: «…что я сделал?».

Ну, да ладно. Продолжим. Теперь наша задача – редактирование. Редактировать будем прямо в Гриде, благо тот позволяет это сделать, выставив в свойстве Options флажок goEditing и к нему goAlwaysShowEditor, чтоб не выходить из режима редактирования.

Писать сам код можно в событии OnSetEditText. Тактика будет такова:

становимся на запись, индекс которой передается в OnSetEditText (здесь очень важно, чтобы количество строк в гриде совпадало с количеством строк в курсоре базы);

заменяем значение в поле.

Все это делается примерно так:

Как видим, тоже ничего мудренного. И это притом, что DBGrid в паре с Query так просто не позволит провернуть такую операцию – обязательно повыбрыкивается чем-нибудь вроде «DataSet not in edit or insert mode». FoxPro такого не скажет, потому как запись-то открыта по умолчанию и для чтения и для записи, если конечно на этой записи не стоит какой-нибудь другой клиент при многопользовательской работе. Тогда запись блокируется. Но речь сейчас не о многопользовательском сеансе. Плюс к этому (опять я похвалю FoxPro), это правило действует в любых курсорах даже тех, которые были получены классическими SELECT * FROM… или подобными. TQuery без шаманских танцев с бубном над ним подавится такими запросами. Как ни странно, это касается очень многих СУБД с которыми взаимодействует этот компонент, не потому что это плохие СУБД, а потому что сам компонент не рассчитан на такую гибкость. Впрочем, и с ним можно решить такую задачу, но чего это будет стоить… Мигрени точно.

А теперь представим, что проект ведет человек хорошо знающий FoxPro, но хуже знающий Delphi. Естественно ему выгоднее будет основную работу с БД написать командами FoxPro, а на Delphi сделать только интерфейс и выполнение таких команд. Есть два выхода из этой ситуации:

  1. Написать или взять командные файлы FoxPro (.PRG) и просто в Delphi считывая построчно скармливать их интерпретатору.
  2. FoxPro имеет возможность выполнять целые файлы, которые содержат код, самостоятельно их читая.

Первый способ неплох, но только в случае линейной программы, без процедур и функций, так как, если бы оператор ручками вводил команды в консоль FoxPro. К тому же механизм выражений теряет свою силу. Поэтому мы возьмемся за второй способ – пакетное выполнение программ и модулей. Для этого в FoxPro предусмотрена команда SET PROCEDURE TO, которая действует примерно по аналогии с Include некоторых языков, ну или, скажем, отдаленно напоминает uses в паскале. В параметрах этой инструкции указывается либо линейная программа, либо модуль с процедурами или функциями.

Для начала напишем простенький модуль с расширением PRG. Для этого подойдет обычный блокнот, либо можно писать в среде FoxPro. Допустим, в нем будет две функции. Одна будет глобально менять разрешения файлов в записи, а другая просто искать введенную строку. Вот как он будет выглядеть:

Теперь откроем этот файлик в FoxPro и скомпилируем его*****. Полученный в результате компиляции FXP псевдокод ложем в папку с программой. В Delphi пишем следующий код. В OnCreate() инициализируем модуль:

Увы, последние версии FoxPro обязательно нуждаются в псевдокомпиляции – это минус. Впрочем нужно отдать должное разработчикам – они оставили команду COMPILE. Так что можно не компилировать ничего, но перед вызовом SET PROCEDURE TO выполнить COMPILE.

Предполагается, что он называется <File1.prg>. На самом-же деле выполняться будет лежащий рядом FXP. Теперь поместим на форму две кнопки. Одна будет скармливать функцию ReplExtension, другая FindName.

Код первой кнопки:

В первом случае – возвращаемое значение мы не обрабатываем, во втором случае – присваиваем его свойству Грида, отвечающему за позиционирование курсора в Гриде. Опять таки ничего сложного, зато весь управляющий код мы спихнули на совесть FoxPro. А ведь это только пример… Мне довелось повидать расчеты в бухгалтерии, в частности – калькулирование себестоимости, где модули такие насчитывали около 100 строк. Там очень много деталей учитывалось. Удобная схема – не нужно менять EXE-шник. По аналогии с этим есть компонент TStoredProc. Но его возможностей гораздо меньше.

Вот так вот, други мои. Против лома – нет приема, если нет другого лома. Я не настаиваю на том, что FoxPro круче всех и вся, но умелое применение возможностей этой СУБД извне позволит достичь весьма эффектных результатов достаточно простыми путями. Кто-то скажет: «Да ну… Это нужно ставить на каждую машину FoxPro полностью». Необязательно. Например, достаточно поставить ее на сервер, а в Delphi в свойстве компонента RemoteMachineName указать сервер. Плюс на сервере правильно настроить достут к нему удаленно. Это обычная практика для хорошего администратора. Или есть еще возможность (если ее уже не отменили разработчики), просто проинсталлировать одно ядро (это около 10 DLL’ок) на машину. Подобное мне показывал один фан этой СУБД, и ничего – заработало нормально. Опять таки повторюсь – данная статья описывает однопользовательскую систему. В многопользовательских нужно покрупнее пошаманить, например запретить клиенту вызовы компиляции, чтобы не повесить сервер.

В общем, главное, что нам предоставили выбор: либо править бал заученными до дыр возможностям, либо писать креативы, что тоже не так уж и плохо. Самое главное – учесть требования задачи, ибо может оказаться, что креатив даст большую выгоду, благодаря своей неформальности.