А.С.Грошев.Базы данных.Уч.пособие
.pdfName – название, которое будет показано для формы в окне Start ; Single instance – открытие единственного экземпляра этого окна;
Use navigation toolbar – показывать навигационную панель (перемещения по таблице);
Use navigation menu – показывать навигационное меню;
Appear in File New dialog – форма появляется в пункте New меню и панели инструментов;
Appear in File Open dialog – форма появляется в пункте Open.
На странице 5 Reports следует указать Name – название, которое будет показано для отчета в окне Start и Appears in Print Report dialog – показы-
вать или нет отчет в диалоге печати отчетов.
После этого можно нажать кнопку OK и изучить, как выглядят экранные формы, отчеты и как ведет себя полученная программа после компиляции проекта.
Как правило, экранные формы и отчеты в дальнейшем подвергаются автором значительной модификации.
Особенностью разработанной таким образом программы – на экранной форме нет навигационных кнопок и кнопок редактирования. Эти функции берут на себя панели инструментов (стандартная и навигационная), которые взаимодействуют с формами. Недостаток данного типа проекта – отсутствие в библиотечных панелях инструментов команд добавления данных в таблицы базы, в результате необходимо или модифицировать процедуру для кнопки New стандартной панели или добавить соответствующие кнопки на экранные формы.
Задание № 2.7
1.Разработать простейший проект на основе созданной ранее экранной формы.
2.Разработать проект с помощью мастера, изучить его состав и работу скомпилированной программы.
71
Приложение 2.1 Некоторые команды и функции языка системы VFP
При описании команд приводится их полный синтаксис. Следует помнить, что элементы команд, заключенные в квадратные скобки, являются необязательными, могут присутствовать или отсутствовать; если элементы разделены вертикальной чертой – должен присутствовать один из них.
С разъяснением параметров команд функций и примерами их использования можно познакомиться в справочной системе VFP (файл fox7help.chm.
1. Команды для работы с базами и индексами
1.1. Создать базу
CREATE DATABASE [DatabaseName | ?]
1.2. Создать таблицу базы данных (SQL-команда)
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] (FieldName1 FieldType [(nFieldWidth [, nPrecision])][NULL | NOT NULL] [CHECK lExpression1
[ERROR cMessageText1]][DEFAULT eExpression1] PRIMARY KEY | UNIQUE][REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS][, FieldName2...] [, PRIMARY KEY eExpression2 TAG TagName2
|, UNIQUE eExpression3 TAG TagName3]
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] REFERENCES TableName3 [TAG TagName5]]
[, CHECK lExpression2 [ERROR cMessageText2]])| FROM ARRAY ArrayName
1.3. Открыть базу данных, представление (View) или таблицу базы
USE [[DatabaseName!]Table | SQLViewName |?]
[IN nWorkArea | cTableAlias] [ONLINE] [ADMIN] [AGAIN] [NOREQUERY [nDataSessionNumber]] [NODATA] [INDEX IndexFileList | ?
[ORDER [nIndexNumber | IDXFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]]]
[ALIAS cTableAlias] [EXCLUSIVE] [SHARED] [NOUPDATE] [CONNSTRING cConnectString]
1.4. Выбрать свободную рабочую зону (0), заданную рабочую зону или выбрать таблицу
SELECT nWorkArea | cTableAlias
72
1.5. Создать индексный файл
INDEX ON eExpression TO IDXFileName | TAG TagName [OF CDXFileName]FOR lExpression] [COMPACT] [ASCENDING | DESCENDING][UNIQUE | CANDIDATE] [ADDITIVE]
1.6. Открыть индекс
SET INDEX TO [IndexFileList | ? ]
ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [ADDITIVE]
1.7. Установить порядок по индексу
SET ORDER TO [nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [IN nWorkArea | cTableAlias][ASCENDING | DESCENDING]]
1.8. Установить связь между таблицами
SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1 [, eExpression2 INTO nWorkArea2 | cTableAlias2 ] [IN nWorkArea | cTableAlias] [ADDITIVE]]
1.9. Установить множественную связь между таблицами (используется при формировании отчетов)
SET SKIP TO [TableAlias1 [, TableAlias2] ...]
2. Команды перемещения по таблице, поиска и отбора данных
2.1. Перейти к записи ...
GO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias]
GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]
(вместо GO можно использовать GOTO)
2.2. Переместиться по таблице (вперед или назад)
SKIP [nRecords] [IN nWorkArea | cTableAlias]
Для nRecords>0 – перемещение далее по таблице, для nRecords<0 – назад к предыдущим записям.
Функция BOF() возвращает .T., если текущая запись – первая и Вы пытаетесь выполнить команду SKIP –1, аналогично для последней записи – EOF()=.T.
2.3. Поиск для заданного логического условия
LOCATE [FOR lExpression1] [Scope] [WHILE] [NOOPTIMIZE]
73
(Найти следующую запись, соответствующую условию – ко-
манда CONTINUE)
2.4. Поиск по значению индекса
SEEK eExpression ORDER nIndexNumber |
IDXIndexFileName | [TAG] TagName
[OF CDXFileName] [ASCENDING | DESCENDING]] [IN nWorkArea | cTableAlias]
2.5. Установить фильтр
SET FILTER TO [lExpression] [IN nWorkArea | cTableAlias]
2.6. Выполнить запрос (SQL-команда)
SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] [Alias.] Select_Item [[AS] Column_Name]
[, [Alias.] Select_Item [[AS] Column_Name] ...] FROM [FORCE][DatabaseName!]Table
[[AS] Local_Alias] [[INNER | LEFT [OUTER]
| RIGHT [OUTER] | FULL [OUTER]
JOIN DatabaseName!] Table [[AS] Local_Alias] [ON JoinCondition …]
[[INTO Destination] | [TO FILE FileName
[ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]
[WHERE JoinCondition [AND JoinCondition ...] [AND | OR FilterCondition [AND
| OR FilterCondition ...]]]
[GROUP BY GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]
3. Команды для занесения и модификации данных
3.1. Открыть окно для работы в табличном формате с таблицей базы данных:
BROWSE [FIELDS FieldList][FONT cFontName [, nFontSize]] [STYLE cFontStyle]
[FOR lExpression1 [REST]] [FORMAT] [FREEZE FieldName] [KEY eExpression1
[, eExpression2]] [LAST | NOINIT]
74
[LOCK nNumberOfFields][LPARTITION]
[NAME ObjectName][NOAPPEND][NOCAPTIONS] [NODELETE] [NOEDIT | NOMODIFY] [NOLGRID] [NORGRID] [NOLINK] [NOMENU][NOOPTIMIZE] [NOREFRESH] [NORMAL] [NOWAIT] [PARTITION nColumnNumber [LEDIT] [REDIT]] [PREFERENCE PreferenceName] [SAVE]
[TIMEOUT nSeconds] [TITLE cTitleText]
[VALID [:F] lExpression2 [ERROR cMessageText]] [WHEN lExpression3] [WIDTH nFieldWidth] [WINDOW WindowName1] [IN [WINDOW] WindowName2 | IN SCREEN] [COLOR SCHEME nSchemeNumber]
При описании полей (в |
параметре |
FIELDS) список может |
содержать следующие параметры: |
|
|
FieldName |
(имя поля) |
|
[:R] |
(только чтение) |
|
[:nColWidth] |
(ширина поля) |
|
[:V = lExpr1 [:F] [:E = cTxt]] |
(функция, выпол- |
|
|
няемая при выходе из поля) |
|
[:P = cFormatCodes] |
(формат) |
|
[:B = eMin, eMax [:F]] (диапазон данных) |
||
[:H = cHeadingText] |
(заголовок) |
|
[:W = lExpr2] |
(функция,выполняемая |
|
|
|
перед входом в поле) |
Близкий синтаксис имеют команды EDIT и CHANGE для работы с таблицей при построчном расположении полей.
3.2. Добавление записей
APPEND [BLANK] [IN nWorkArea | cTableAlias] [NOMENU]
APPEND FROM FileName | ? [FIELDS FieldList] [FOR lExpression][[TYPE] [DELIMITED
[WITH Delimiter | WITH BLANK | WITH TAB | WITH CHARACTER Delimiter] | DIF | FW2 | MOD |
PDOX | RPD | SDF | SYLK | WK1 |WK3 | WKS | WR1 | WRK | CSV | XLS | XL5 [SHEET cSheetName]| XL8 [SHEET cSheetName]]] [AS nCodePage]
APPEND FROM ARRAY ArrayName [FOR lExpression] [ FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]
3.3. Занести данные в поля таблицы
REPLACE FieldName1 WITH eExpression1 [ADDITIVE] [, FieldName2 WITH eExpression2 [ADDITIVE]]
75
...[Scope][FOR lExpression1][WHILE lExpression2] [IN nWorkArea | cTableAlias][NOOPTIMIZE]
3.4. Копировать данные текущей записи в массив переменных
SCATTER [FIELDS FieldNameList | FIELDS LIKE
Skeleton | FIELDS EXCEPT Skeleton] [MEMO]
TO ArrayName | TO ArrayName BLANK | MEMVAR
| MEMVAR BLANK | NAME ObjectName [BLANK]
(параметр MEMVAR означает, что используются переменные с теми же именами, что и имена полей записи; имя переменной в программе следует писать как m.<имя поля>).
3.5. Копировать данные из массива переменных в текущую запись
GATHER FROM ArrayName | MEMVAR | NAME ObjectName
[FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO]
3.6. Копирование данных таблицы в массив
COPY TO ARRAY ArrayName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [Scope] [FOR lExpr1] [WHILE lExpression2] [NOOPTIMIZE]
4. Команды вычислений по данным таблицы
CALCULATE eExpressionList [Scope] [FOR lExpression1] [WHILE lExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE] [IN nWorkArea | cTableAlias]
где для eExpressionList – можно использовать следующие функции:
AVG(nExpression) – среднее значение CNT( ) – количество MAX(eExpression) – максимальное значение MIN(eExpression) – минимальное значение
NPV(nExpression1, nExpression2 [, nExpression3])
– банковская функция STD(nExpression) – стандартное отклонение
SUM(nExpression) – сумма
VAR(nExpression) – статистическая функция
SUM [eExpressionList] [Scope] [FOR lExpression1]
[WHILE lExpression2][TO MemVarNameList |
TO ARRAY ArrayName] |
[NOOPTIMIZE] |
AVERAGE [ExpressionList] |
[Scope] [FOR lExpression1] |
|
76 |
[WHILElExpression2][TO VarList |
TO ARRAY ArrayName] [NOOPTIMIZE]
COUNT [Scope] [FOR lExpression1] [WHILE lExpression2]
[TO VarName][NOOPTIMIZE]
5.Математические функции
^* / + – ABS() ACOS() ASIN() ATAN() ATN2() AVG() BINTOC() BITAND() BITCLEAR() BITLSHIFT() BITRSHIFT() BITSET() BITTEST() BITXOR() CEILING() COS() COUNT() DTOR() EXP() FLOOR() FV() INT() LOG() LOG10() MAX() MIN() MOD()
MTON() NTOM() PAYMENT() PI() PV() RAND() ROUND(,) RECCOUNT() RECNO() RTOD() SIGN() SIN() SQRT() SUM() TAN() VAL()
6.Функции для операций с текстовыми данными
+– ASC() ALLTRIM() AT(,,) ATC(,,) CHR() CHRTRAN(,,) CTOBIN() CURSORTOXML(,,,,) CURVAL(,) FILETOSTR() GETPEM(,) GETWORDCOUNT(,) GETWORDNUM(,) LEFT(,) LEN() LOWER() LTRIM() MAX(,) MIN(,) OCCURS(,) OEMTOANSI() OLDVAL(,) PADC(,) PADL(,) PADR(,) PEMSTATUS(,,) PROPER() RAT(,,) REPLICATE(,) RIGHT(,) RTRIM() SOUNDEX() SPACE() STR(,,) STREXTRACT(,,,,) STRTRAN(,,) STUFF(,,,) SUBSTR(,,) TRANSFORM(,) TRIM() TYPE() UPPER() $ AT_C(,,) ATCC(,,) CHRTRANC(,,) LEFTC(,) LENC( ) RATC(,,) RIGHTC(expC,) TEXTMERGE(,,,)
STRCONV(,) STUFFC(,,,) SUBSTRC(,,)
7. Функции для операций с данными типа дата и время
{date} CDOW() CMONTH() CTOD() CTOT() DATE() DATETIME() DAY() DMY() DOW() DTOC() DTOS() DTOT() GOMONTH(,) HOUR() MAX(,) MDY() MIN(,) MINUTE() MONTH() QUARTER() SEC() SECONDS() TIME() TTOC() TTOD() WEEK() YEAR()
8.Логические функции
<> = <> <= >= == .T. .F. .NULL. NOT AND OR BETWEEN(,,) DELETED() EMPTY() IIF(,,) INLIST(,,) NVL(,) SEEK(,,)
77
Глава 3. Основы работы с базами данных
всистеме Microsoft Access
3.1.Общая характеристика системы
Система Microsoft Access является одним из компонентов Microsoft Office и предназначена для работы с базами данных. Основные возможности системы при работе с базами данных приведены в табл. 3.1.
Таблица 3.1 Спецификации системы Microsoft Office Access 2003
|
Атрибут |
|
Максимальное значение |
|
База данных |
||
|
Размер файла базы данных (.mdb) |
|
2 Гбайт за вычетом места, необхо- |
|
|
|
димого системным объектам |
|
Число объектов в базе данных |
|
32 768 |
|
Модули (включая формы и отчеты, |
|
1 000 |
|
свойство Наличие модуля (HasModule) |
|
|
|
которых имеет значение True) |
|
|
|
Число знаков в имени объекта |
|
64 |
|
Число знаков в пароле |
|
14 |
|
Число знаков в имени пользователя или |
|
20 |
|
имени группы |
|
|
|
Число одновременно работающих |
|
255 |
|
пользователей |
|
|
|
Таблица |
||
|
Число знаков в имени таблицы |
|
64 |
|
Число знаков в имени поля |
|
64 |
|
Число полей в таблице |
|
255 |
|
|
|
2048 (фактическое число может |
|
|
|
|
|
Число открытых таблиц |
|
быть меньше из-за внутренних таб- |
|
|
|
лиц, открываемых Microsoft Access) |
|
Размер таблицы |
|
2 Гбайт за вычетом места, необхо- |
|
|
||
|
|
димого системным объектам. |
|
|
|
|
|
|
Число знаков в текстовом поле |
|
255 |
|
|
||
|
|
|
65 535 при вводе данных через ин- |
|
|
|
|
|
Число знаков в поле MEMO |
|
терфейс пользователя; |
|
|
1 Гбайт для хранения знаков при |
|
|
|
|
|
|
|
|
программном вводе данных. |
|
Размер поля объекта OLE |
|
1 Гбайт |
78
|
|
|
|
Продолжение 1 табл. 3.1 |
|
|
|
|
|
|
|
|
Атрибут |
|
|
Максимальное значение |
|
|
Число индексов в таблице |
|
32 |
|
|
|
Число полей в индексе |
|
10 |
|
|
|
Число знаков в сообщении об ошибке |
|
255 |
|
|
|
Число знаков в условии на значение за- |
|
2 048 |
|
|
|
писи |
|
|||
|
|
|
|
|
|
|
Число знаков в описании таблицы или |
|
255 |
|
|
|
поля |
|
|
||
|
|
|
|
|
|
|
Число знаков в записи (кроме полей |
|
2 000 |
|
|
|
MEMO и полей объектов OLE) |
|
|
||
|
|
|
|
|
|
|
Число знаков в значении свойства поля |
|
255 |
|
|
|
Запрос |
|
|
||
|
Число установленных связей |
|
32 |
на одну таблицу за вычетом |
|
|
|
|
числа индексов, находящихся в |
|
|
|
|
|
таблице для полей или сочетаний |
|
|
|
|
|
полей, не участвующих в связях |
|
|
|
Число таблиц в запросе |
|
32 |
|
|
|
Число полей в наборе записей |
|
255 |
|
|
|
Размер набора записей |
|
1 Гбайт |
|
|
|
Предел сортировки |
|
255 знаков в одном или нескольких |
|
|
|
|
|
полях |
|
|
|
Число уровней вложения запросов |
|
50 |
|
|
|
Число знаков в ячейке на бланке запро- |
|
1 024 |
|
|
|
са |
|
|
|
|
|
Число знаков для параметра в запросе с |
|
255 |
|
|
|
параметрами |
|
|
|
|
|
Число операторов AND в предложении |
|
99 |
|
|
|
WHERE или HAVING |
|
|
|
|
|
Число знаков в инструкции SQL |
|
приблизительно 64 000 |
|
|
|
Форма и отчет |
|
|||
|
Число знаков в надписи |
|
2 048 |
|
|
|
Число знаков в поле |
|
65 |
535 |
|
|
Ширина формы или отчета |
|
22 |
дюйма (55,87 см) |
|
|
Высота раздела |
|
22 |
дюйма (55,87 см) |
|
|
Высота всех разделов плюс заголовки |
|
200 дюймов (508 см) |
|
|
|
разделов (в режиме конструктора ) |
|
|
|
|
|
Число уровней вложения форм или от- |
|
7 |
|
|
|
четов |
|
|
|
|
|
Число полей или выражений, которые |
|
10 |
|
|
|
можно отсортировать или сгруппиро- |
|
|
|
|
|
вать в отчете |
|
|
|
|
|
|
79 |
|
|
|
|
|
|
|
|
Продолжение 2 табл. 3.1 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Атрибут |
|
Максимальное значение |
|
|||
|
|
Число заголовков и примечаний в от- |
|
1 заголовок/примечание отчета; 1 |
|
||||
|
|
чете |
|
|
|
заголовок/примечание страницы; |
|
||
|
|
|
|
|
|
10 заголовков/примечаний групп |
|
||
|
|
Число печатных страниц в отчете |
|
65 536 |
|
|
|
||
|
|
Число элементов управления и разде- |
|
754 |
|
|
|
||
|
|
лов, которые можно добавить за время |
|
|
|
|
|
||
|
|
существования формы или отчета |
|
|
|
|
|
||
|
|
Число знаков в инструкции SQL, ра- |
|
32 750 |
|
|
|
||
|
|
ботающей в качестве свойства Источ- |
|
|
|
|
|
||
|
|
ник записей (RecordSource) или Ис- |
|
|
|
|
|
||
|
|
точник строк (RowSource) формы, |
|
|
|
|
|
||
|
|
отчета или элемента управления (оба |
|
|
|
|
|
||
|
|
.mdb и .adp) |
|
|
|
|
|
|
|
|
|
|
|
Макрос |
|
|
|
||
|
|
Число макрокоманд в макросе |
|
999 |
|
|
|
||
|
|
Число знаков в условии |
|
255 |
|
|
|
||
|
|
Число знаков в комментарии |
|
255 |
|
|
|
||
|
|
Число знаков в аргументе макроко- |
|
255 |
|
|
|
||
|
|
|
|
|
|
||||
|
|
манды |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В табл. 3.2 приведены сведения о типах данных, которые могут иметь |
|
||||||
|
поля в таблицах. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3.2. Типы данных системы |
|
||
|
|
|
|
|
|
|
|
|
|
|
Тип данных |
|
Использование |
|
|
|
Размер |
|
|
|
Текстовый |
|
Текст, состоящий из любых симво- |
|
До 255 символов |
|
|||
|
|
|
|
лов |
|
|
|
|
|
|
Поле MЕМО |
|
Длинный текста, например, приме- |
|
До 64 000 симво- |
|
|||
|
|
|
|
чания или описания. |
|
|
|
лов |
|
|
Числовой |
|
Числовые данные |
|
|
|
1, 2, 4 или 8 бай- |
|
|
|
(Байт, |
|
|
|
|
|
тов. 16 байтов |
|
|
|
Целое, |
|
|
|
|
|
только для кодов |
|
|
|
Длинное целое, |
|
|
|
|
|
|
||
|
|
|
|
|
|
репликации |
|
||
|
Одинарное с пла- |
|
|
|
|
|
|
||
|
|
|
|
|
|
(GUID) |
|
||
|
вающей точкой, |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
|
Двойное с плаваю- |
|
|
|
|
|
|
||
|
щей точкой, |
|
|
|
|
|
|
|
|
|
Код репликации, |
|
|
|
|
|
|
|
|
|
Действительное) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80