База данных Visual FoxPro 6.0 (основные понятия и инструментальные средства среды разработки) Дроздов Михаил My Page: http://vfpdmur.narod.ru/ Компания «ИВС Софт» http://ics.perm.ru/ mailto:Drozdov@ics.perm.su База данных • Является источником данных приложения • Свою информацию хранит в файлах с расширениями: – *.dbc - основные данные – *.dct - memo поля – *.dcx - индексы Структура файла: • • • • • • • • уникальный код объекта значение кода родительского объекта типа объекта название объекта свойства объекта откомпилированный код тип контроля целостности информация пользователя Свойства базы данных • Version - версия базы данных • Comment - комментарий базы данных Объекты базы данных • • • • • Таблицы локальные представления удалённые представления соединения с вн. источниками сохранённые процедуры Каждый из объектов имеет ряд своих свойств, значения которых хранятся в базе данных. Кроме того, таблицы хранятся в файлах с расширениями: *.dbf, *.fpt, *.cdx Работа с объектами базы данных 1[2] • • • • • • • • • • • • • • • • • • создать таблицу добавить таблицу создать удалённое представление создать локальное представление вызвать среду редактирования текущего объекта просмотр таблицы значений объекта удалить объект из базы данных найти объект базы данных обновить индексы удалить записи, отмеченные на удаление редактировать межтабличные отношения редактирование признаков ссылочной целостности редактирование сохранённых процедур редактирование соединений с внешними источниками переустановить расположение объектов обновить данные об объектах базы данных выполнить команду PACK для базы данных вызвать диалог редактирования свойств базы данных Работа с объектами базы данных 2[2] База данных: ... • • • раскрыть все свернуть все найти объект Таблица: • • • • • список удалить свернуть редактировать помощь Отношение: • • • • удалить редактировать целостность помощь Список свойств таблицы • • • • • • • • • Name DeleteTrigger InsertTrigger UpdateTrigger Path PrimaryKey RuleExpression RuleText Comment - название таблицы - триггер удаления записи из таблицы - триггер добавления записи в таблице - триггер изменения записи в таблице - месторасположение таблицы - первичный ключ таблицы - предикат контроля значений полей уровня записи - сообщение об ошибки значений полей - комментарий таблицы Свойства таблицы • • Это название отображается в Project Manager и используется как alias при открытии таблицы • Name - alias таблицы Record validation - функция контроля данных полей уровня записи: – Rule - функцияпредикат – Message - строкасообщение об ошибки Triggers - функциипредикаты, вызываемые при событиях: добавления (Insert), изменения (Update), удаления (Delete) данных записи. У буферизованных таблиц при вызове функции TABLEUPDATE() Это свойство редактируется также из Project Manager см. Description Эти функции автоматически обновляются при переустановках в Referential Integrity Все перечисленные свойства сохраняются в базу данных Visual FoxPro, и следовательно недоступны для свободных (free) таблиц. Свойства поля таблицы • • • • • • • • • • • • Name - название поля Type - тип поля Size - размер поля Format - формат поля InputMask - шаблон поля Caption - заголовок поля RuleExpression - предикат контроля значения поля RuleText - сообщение об ошибки значения поля DefaultValue - значение поля по умолчанию DisplayLibrary - библиотека элементов управления DisplayClassLibrary - название класса поля Comment - комментарий поля Поля таблицы 1[2] Type - типы полей: Используя эту кнопку, Вы можете изменить порядок полей • • • • * - приводит к появлению файла *.fpt * - приводит к появлению файла *.cdx • * * * * Name - название поля (до 128 символов в *.dbc) Width - общая длина Decimal - количество знаков после точки Index - автоматически добавляет Regular индекс в CDX-файл * NULL - признак допустимости NULL значения поля Поля таблицы 2[2] • Display - обеспечивает форматирование для операции ввода /вывода: – Format - задаёт размер и стиль отображения для Browse, Form и Report – Input mask обеспечивает шаблон ввода данных – Caption - задаёт заголовок столбца/названия Это свойство редактируется также из Project Manager поля для Browse, см. Description Form и Report • Field validation - обеспечивает контроль ввода уровня поля: • – Rule - функция-предикат контроля значения поля – Message - строка-сообщение об ошибке • – Default value - значение поля при добавлении записи Map field type to classes - задаёт элемент управления (Display class) из библиотеки классов (Display library), для поля. Field Comment - комментарий для поля, обычно назначение поля. Свойства индекса таблицы • • • • • Name - название индекса Order - направление сортировки индекса Type - тип индекса Expression - определяющее выражение индекса Filter - фильтрующее выражение индекса Индексы таблицы • • • • • Используя эту кнопку, Вы можете изменить порядок индексов • • • • Order - определяет порядок сортировки данных поля Name - название индекса (до 10 символов) Type - определяет тип индекса Expression «определяющее» выражение для значений индекса Filter - «фильтрующее» выражение значений индекса Primary - не допускает повторение значений, один на таблицу. Candidate - тоже, что и Primary, но может быть несколько в таблице. Unique - допускает повторения, но сохраняет только одно значение. Regular - не контролирует значения. • • • Советы и дополнительная информация: Перед созданием индексов установите необходимое Вам SET COLLATE. Только наличие тип индекса Primary может обеспечивать межтабличную целостность данных (Referential Integrity). Для типов индексов Primary/Candidate настоятельно рекомендую определить фильтр: !DELETED() .AND. !EMPTY(EVALUATE(“Expression”)) Свойства отношения • • • • • • • • • Application ChildAlias ChildOrder Comment Name OneToMany ParentAlias RelationalExpr Tag - ссылка на объект приложения, содержащий данный - название подчинённой таблицы - индекс подчинённой таблицы - комментарий - название - признак один-ко-многим - название родительской таблицы - реляционное выражение родительской таблицы - дополнительная информация Обеспечение ссылочной целостности данных 1[3] Возникнет связь • • Щёлкнув левой клавишей мыши на первичном ключе родительской таблицы и не отпуская клавиши, переместите указатель мыши на индекс подчинённой таблицы. Названия индексов: – – в родительской - первичный (primary) [только один в таблице] в подчинённой - внешний (foreign) [может быть несколько в одной таблице, и соответствует числу родительских таблиц] Обеспечение ссылочной целостности данных 1[3] • Для каждой связи Вы можете определить реакцию на – – – • • * Cascade недопустим при добавлении (Insert) изменение (update) удаление (delete) добавление (insert) * Возможные значения – Cascade * распространяет изменения на все подчинённые – Restrict - запрещает изменения, противоречащие связям – Ignore - позволяет всё После переустановки всех значений для всех связей нажмите OK, что приведёт к замене прежнего кода поддержки IR новым и переустановке триггеров в соответствующих таблицах Обеспечение ссылочной целостности данных 1[3] Полезные советы: • • Обеспечивайте ведение Primary и Foreign ключей только программно. (Если Вам кажется, что некоторые поля, редактируемые пользователем, прекрасно могут выполнять функции Primary и Foreign, то очень даже может быть, что Вам придётся разочароваться.) Все значения ключевых полей, как Primary, так и Foreign, обеспечивайте используя механизм Default value поля, например: – – • Первая запись в таблице, имеющей Primary ключ, является записью по-умолчанию, т.е. значение Primary ключа её первой записи является значением Default value для Foreign полей у всех подчинённых таблиц. Генерацию значения Primary ключа для новой записи, можно также осуществлять через функцию, определённую как Default value для этого поля. Саму же функцию следует поместить как сохранённую процедуру в базу данных. (См. пример такой функции NewID(...) в Tastrade.app ) Если Вы, как и я считаете, что на клиенте не должно выполняться никакой работы с данными, то следует учитывать то обстоятельство, в теле триггера запись, по поводу которой он был вызван, будет заблокирована, и если здесь Вам требуется произвести вычисления и/или сохранить вычисленные значения, то создайте дополнительную таблицу, содержащую такие результаты, и свяжите её с исходной связью типа один-к-одному, в этом случае в теле триггера Вы можете свободно манипулировать данными такой таблицы. Сделав так, или аналогично этому, Вы избежите многих проблем, связанных с контролем целостности данных в таблицах Вашей базы данных Список свойств представления (view) • Name - название представления • Tables - список используемых таблиц • BatchUpdateCount - количество update-операторов • UpdateType - способ выполнения изменений • CompareMemo - включать ли memo в WHERE • UseMemoSize - минимальная длина memo-полей • ConnectName - имя используемого соединения • WhereType - способ формирования WHERE • FetchAsNeeded - использовать ли выборку данных • Comment - комментарий таблицы • FetchMemo - выбирать ли memo поля • FetchSize - количество записей в выборке • MaxRecords - максимальное количество требуемых записей • Offline - является ли отсоединённым представлением • ParameterList - список параметров и их типов • Prepared - повторно используемый ли запрос (допустимо ли REQUERY()) • RuleExpression - выражение контроля уровня записи • RuleText - сообщение об ошибке контроля уровня записи • SendUpdates - требуется ли посылка изменений источнику • ShareConnection - разделяемое ли соединение используется • SourceType - тип представления • SQL - SQL-оператор Представления (view) среда редактирования 1[8] Условия межтабличных объединений Вы можете определять используя левую клавишу мыши • • • • • Позволяет создать /изменить SQL запрос к данным, в результате выполнения которого, получается Vfp cursor В верхней части диалога отображается схема используемых таблиц и межтабличных связей В нижней, на закладках: Fields, Join, Filter, Order By, Group By, - обеспечивается возможность изменения соответствующих частей SQL-оператора На закладке Update Cretaria Вы можете настроить режимы взаимодействия с источником данных В Miscellaneous Вы можете дополнительно ограничить число записей (или их %), а также исключить дублирование данных Следующий слайд объясняет виды объединений (Join types) Представления виды объединений 2[8] Таблица 1 Таблица 2 Все + Условные • • • • Left Outer Join Right Outer Join Inner Join Full Join Представления пункты меню 3[8] • • • • • • • • • • • • • • • добавить таблицу удалить таблицу удалить объединение выбрать отображаемые поля определить условия объединения определить дополнительные условия определить способы сортировки определить условия группировки определить способы изменения данных источника дополнительно ограничить множество записей просмотреть текущий SQL-оператор дополнительные опции определить параметры запроса определить комментарий выполнить запрос Представления выбор полей 4[8] Диалог выбора отображаемых полей, является просто классическим, обратите внимание, что Вы можете определять вычисляемые выражения в поле «Functions and expressions» Следующий слайд объясняет кнопку «Properties» Список свойств полей представления 5[8] • Name - название поля • Caption - заголовок поля • Comment - комментарий поля • DataType - тип, размер поля • DefaultValue - значение по умолчанию • KeyField - является ли ключевым • RuleExpression - выражение контроля значения • RuleText - сообщение об ошибки контроля значения • Updatable - изменяемое ли • UpdateName - название поля на источнике Представления свойства полей 6[8] Диалог свойств отображаемых полей, полностью дублирует диалог свойств полей таблицы (см. слайд «Поля таблицы 2[2]»), кроме этого для внешних источников данных у Вас появляется возможность изменить тип поля, на «удобный» в смысле приложения, используя «Data mapping». Представления условия выбора 7[8] • • • • Not - признак, позволяющий задать отрицание установленного критерия. Case - обеспечивает режим сравнения, чувствительный к регистру. Expression... в Field Name позволяет построить вычисляемое выражение ? - предваряющий название переменной в Example, позволяет использовать параметр Советы: • • • Для просмотра текущего критерия используйте команду View SQL или команду SQL панели инструментов. Следите за соответствием типов данных в критериальных выражениях. Для спецификации типов параметров используйте диалог View parameters... Представления режимы изменений данных источника 8[8] • • • • • • SQL WHERE clause includes -определяет как формировать параметр WHERE в SQL операторе, что обеспечивает контроль конфликтных изменений данных: – – – – Key fields only - проверка выполняется только для ключевых полей Key and updateable fields - по ключевым полям и отмеченным как изменяемые, независимо от того были ли действительно изменены значения Key and modified fields - по ключевым полям и полям, которые были действительно изменены Key and timestamp - контроль осуществляется по полю типа timestamp Table - позволяет выбрать таблицу, поля которой Вы желаете специфицировать. Reset Key - устанавливает отметку для всех первичных (primary) ключей таблиц, как обеспечивающих контроль наличия изменений. Update All - позволяет отметить как контролируемые на изменения все поля таблиц, не являющимися первичными. Send SQL updates - только включение этого признака обеспечивает пересылку изменений источнику данных Update using - указывает способ выполнения изменений: – – SQL DELETE then INSERT выполняет удаление записи с последующим добавлением новой SQL UPDATE - формируется команда UPDATE Список свойств соединения • Name - название соединения • Asynchronous - допустим ли Asynchronous режим соединения • BatchMode - допустим ли Batch режим соединения • ConnectString - строка параметров соединения • ConnectTimeout - Timeout соединения • Database - Database соединения • DataSource - DSN соединения • DispLogin - режим диалога ввода пароля ODBC • DispWarnings - допустим ли вывод сообщений • IdleTimeout - время ожидания закрытия • PacketSize - размер сетевого пакета • PassWord - PWD соединения • QueryTimeout - время ожидания результата • Transactions - транзакционный режим • UserId - UID соединения • WaitTime - время задержки контроля завершения запроса • Comment - комментарий соединения Соединения с внешними источниками данных 1[2] • • • Внешние источники данных должны быть специфицированы в ODBC Data Source Administrator. В Visual FoxPro базе данных может быть использовано несколько таких источников, в качестве соединений к внешним данным, редактируемых из диалога Connections. Внешние представления(Remote view) имеют имя соединения в качестве свойства, параметры которого прозрачно используются для получения соединения с внешним источником данных. Следующий слайд объясняет параметры ODBC соединения Параметры соединения 2[2] • Specify data source - определяет внешний источник данных – – – • Этот диалог может быть вызван из Project Manager • Нажатие кнопки OK приводит к диалогу сохранения параметров соединения под некоторым именем в базу данных Visual FoxPro, которое в дальнейшем используется Внешними представлениями (Remote view) в качестве соединения. Список соединений базы данных редактируется из диалога Connections. возможны два варианта: • Data source, userid, password повторяют параметры источника, зарегистрированного в ODBC Administrator. • Connection string - задаёт строку, содержащую перечисление параметров и их значений, используя ‘;’ в качестве разделителя. Verify Connection... - может быть использована для проверки работоспособности соединения. New Data Source… - вызывает диалог ODBC Administrator Display ODBC login prompt определяет должен ли вызываться диалог ввода пароля при установке соединения: Когда необходимо, Всегда, Никогда. Оставшаяся часть диалога позволяет задать ряд параметров ODBC соединения, которые могут отличаться от задаваемых по умолчанию Сохранённые процедуры • • • • • Если у Вас возникла необходимость сделать чегонибудь с данными, не задумываясь оформляйте это в виде сохранённой процедуры, никак не следует делать это методом конкретного экземпляра формы. При обращении к сохранённым процедурам контролируйте активность базы данных Список всех сохранённых процедур удобно представлен в Project Manager. Язык написания - это подмножество языка Visual FoxPro, ориентированное на работу с данными. Если Вы используете контроль ссылочной целостности, генерируемый средствами Visual FoxPro, не пытайтесь редактировать полученный код вручную. Схема объектов базы данных Запросы База данных Свободные таблицы Таблицы Локальные представления Хранимые процедуры Соединения Внешние представления SQL Pass-Through Данные Другие форматы Visual FoxPro FoxPro 2.x Список команд и функций • • • • • • • • • • • • • • • • • • • • ADATABASES() ADBOBJECTS() ADD TABLE ALTER TABLE - SQL CDX() CLOSE DATABASES COPY INDEXES COPY TAG CREATE CONNECTION CREATE DATABASE CREATE SQL VIEW CREATE TABLE - SQL DBC() DBGETPROP() DBSETPROP() DBUSED() DELETE DATABASE DELETE TAG DISPLAY DATABASE DISPLAY TABLES • • • • • • • • • • • • • • • • • • • • FREE TABLE INDBC() INDEX INDEXSEEK() KEY() KEYMATCH() LIST DATABASE LOCATE MDX() MODIFY DATABASE MODIFY STRUCTURE NDX() OPEN DATABASE ORDER() PACK DATABASE REINDEX REMOVE TABLE SEEK SEEK() SET BLOCKSIZE • • • • • • • • • • • • • • • • SET COLLATE SET DATABASE SET INDEX SET ODOMETER SET ORDER SET RELATION SET UNIQUE SORT SYS(14) SYS(2021) SYS(21) SYS(22) TAG() TAGCOUNT() USE VALIDATE DATABASE • GenDbc Вопросы…? … и ответы!