Для разработки отчетов - печатных документов, отражающих информацию базы данных, в системе
Наиболее просто для разработки основы отчета воспользоваться Мастером отчетов с последующей модификацией и дополнением отчета в Конструкторе.
Существует 2 типа Мастера отчетов:
One-to-Many Report Wizard - Мастер отчета, в котором для одной записи главной таблицы существует множество записей связанной с ней дочерней таблицы.
Report Wizard - Мастер простого отчета, но с возможностью задания группировки данных.
Поставим задачу разработать отчет, в котором показаны экзаменационные оценки всех студентов за зимнюю сессию 2005-2006 учебного года (с 10.01.2006 по 06.02.2006) с группировкой данных по факультетам, курсам, группам и в группе - по фамилиям студентов.
Как обычно, создание нового объекта начинаем, нажав кнопку New на стандартной панели инструментов, затем выбираем Report - Wizard - One-to-Many Report Wizard.
Далее на первом шаге Мастера (рис. 6.1) выбираем базу Students и поля главной таблицы базы ( Spisok ), которые мы хотим показать в отчете.
(рис 6.1) Шаг 1 Мастера разработки отчета
На втором шаге (рис. 6.2) выбираем поля дочерней таблицы - Ocenki.
(рис 6.2) Шаг 2 Мастера разработки отчета
Третий шаг - подтверждаем, что эти таблицы связаны по значению поля NZ.
На четвертом шаге необходимо задать порядок сортировки данных в отчете. Мастер позволяет задать не более трех значений полей для сложной сортировки (с созданием соответствующего сложного индекса). Выберем поля N_fclt, Kurs, N_grup с сортировкой в порядке возрастания ( Ascending ).
Пятый шаг (рис. 6.3) - задаем стиль отчета, расположение его на листе (вертикальный лист - Portrait или горизонтальный - Landscape ) и суммарные параметры - расчет среднего значения ( Avg ) для поля Ball.
(рис 6.3) Шаг 5 Мастера разработки отчета
На последнем, 6-м шаге задаем заголовок отчета, выбираем команду Сохранить отчет и модифицировать его в Конструкторе отчетов - Save report and modify it in
В окне
(рис 6.4) Окно Конструктора отчетов
В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз ( Title и Summary ), в начале каждой страницы ( Page Header ) или в конце каждой страницы ( Page Footer ), в начале каждой группы ( Group Header, групп может быть много) и в конце каждой группы ( Group Footer ), а также зона показа информации каждой записи таблицы ( Detail ).
Особенность отчета, созданного Мастером, - в нем присутствуют зоны итогов для группы NZ и всего отчета, но поля для расчета средней оценки в них нет, хотя мы просили Мастера это сделать (см. рис. 6.3.). Заданное условие не было выполнено, т.к. поле ball имеет текстовый тип, а мы задали функцию для работы с числами. Для вычисления средней оценки придется самим добавить новое поле в отчет с расчетом средней оценки, после преобразования в этом поле текстового значения в числовое с использованием функции Val(ball).
Контекстное меню для Конструктора отчетов (щелчок правой кнопкой мыши на пустом месте окна
(рис 6.5) Контекстное меню
Для использования в отчете названий факультетов, специальностей и предметов необходимо открыть окно Data Environment, добавить в него справочные таблицы базы и правильно установить связи между ними, как показано на рис. 6.6. (для постоянных связей базы иногда возникает неправильное направление, связь должна идти от поля главной таблицы к индексу дочерней).
(рис 6.6) Окно данных отчета
Для связи между таблицами Spisok и Ocenki должно быть установлено свойство OneToMany = .T.
Для таблицы Spisok в окне Properties для Data Environment зададим фильтр VAL(Ocenki.ball)>1 AND VAL(Ocenki.ball)<6 AND Ocenki.data_b=>{^2006/01/10} AND Ocenki.data_b<={^2006/02/06} - условие отбора студентов, у которых есть оценки (от 2 до 5, среди баллов могут быть отметки о неявке (Н), незачете (1), зачете (6) и пр.) в заданном периоде (в фильтре используется формат даты в виде {^ГГГГ/ММ/ДД}). Установленный фильтр имеет особенность: фильтр задан для таблицы Spisok, а его логическое выражение построено из значений полей таблицы Ocenki, что не совсем обычно, но допустимо при наличии связи между этими таблицами. Если данное выражение написать как фильтр для таблицы Ocenki, в отчет могут попасть студенты, у которых нет оценок за заданный период, и средняя оценка будет рассчитана неправильно.
Для дальнейшего оформления отчета необходимо присутствие на экране двух панелей инструментов - Report Controls и Layout.
Первая панель содержит те объекты, которые можно располагать на отчетах (рис. 6.7.).
(рис 6.7) Панель объектов отчета
Так как наша задача - представить отчет с группировкой и расчетом средних оценок по факультетам, курсам, группам, необходимо добавить новые группы в отчет и модифицировать, соответственно, индексный файл главной таблицы. Выбрав пункт Data Grouping в контекстном или главном меню (раздел Report ), добавим необходимые группы (рис. 6.8.).
(рис 6.8) Страница группировки данных в окне свойств отчета
Далее перенесем номера факультетов, курсов и групп в зоны заголовков соответствующих групп, добавим поля с названиями из справочников факультетов, специальностей и предметов, добавим итоговые поля для расчета средних оценок ( val(ocenki.ball )). Новые поля можно создать с использованием соответствующей кнопки на панели Report Controls (рис. 6.7.) или копированием имеющихся в отчете полей (для сохранения заданного шрифта) с изменением данных, которые показывает поле (свойство Expression поля).
В свойствах итоговых полей (окно свойств выбранного поля открывается двойным кликом на нем, или выбором пункта Properties в его контекстном меню, или на клавиатуре Alt+Enter) в разделе Calculate следует правильно указать в пункте Calculation Type - Average (среднее) и в пункте Reset based on - соответствующую группу или End of Report для зоны Summary (см. рис. 6.9.).
(рис 6.9) Окно свойств поля отчета. Страницы General и Calculate
Для таблицы Spisok следует модифицировать созданный Мастером сложный индекс с именем WIZARD_1 - добавить в него поле FIO: STR(n_fclt,2,0) + STR(kurs,1,0) + n_grup + fio.
(рис 6.10) Окончательный вид отчета в Конструкторе
При предварительном просмотре ( Preview ) или после печати на принтере мы получим отчет, показанный на рис. 6.1. (примечание: перед формированием отчета откройте таблицу Ocenki, иначе заданный фильтр для таблицы Spisok вызовет сообщение об отсутствии алиаса Ocenki ).
(рис 6.11) Фрагмент отчета, напечатанного на принтере
Ранее отмечалось, что для работы с данными, отобранными в соответствии с каким-либо условием, может быть использована команда SET FILTER TO <условие> - установить фильтр для открытой таблицы базы данных.
Однако большими возможностями обладает так называемый
Запрос позволяет отбирать данные по заданным сложным условиям из нескольких таблиц различных баз данных, с размещением результатов выполнения
Отбор осуществляется непосредственно из файла на диске, таким образом те же таблицы одновременно могут быть открыты с какими-либо установленными фильтрами (например, в программе, работающей с данными только за текущий месяц).
В VFP и других системах фирмы Microsoft (Word, Excel) можно использовать Конструктор
Принцип формирования
Поставим задачу отобрать информацию по экзаменационным оценкам студентов по факультету № 1 за 1-й семестр 2005/2006 учебного года по предмету № 1 ("Математика" в справочной таблице) с сортировкой данных по группам, в группах - в порядке уменьшения оценки.
Для этого выбираем на стандартной панели или в меню команду New, далее выбираем Query и нажимаем кнопку Query Wizard. В появившемся списке из трех пунктов: Cross-Tab Wizard, Graph Wizard и Query Wizard выбираем последний вариант - стандартный
На первом шаге Мастера необходимо выбрать таблицы и поля, которые следует включить в
(рис 6.12) Мастер запросов - шаг 1
На шаге 2 следует добавить в список связей выражение SPISOK.NZ = OCENKI.NZ, что Мастер сам предложит вам сделать.
На шаге 2а вам нужно ответить на вопрос, какие записи при объединении таблиц следует включать в результаты ( join conditions - условия объединения):
only matching rows - отбираются только записи при их одновременном присутствии в обеих связанных таблицах для заданных условий отбора и связей (условие объединения Inner Join);
all rows from table SPISOK - отбираются все записи таблицы SPISOK, соответствующие условиям отбора, и связанные записи другой таблицы при их наличии (Left Outer Join);
all rows from table OCENKI - отбираются все записи таблицы OCENKI, соответствующие условиям отбора, и связанные записи другой таблицы при их наличии (Right Outer Join);
all rows from both tables - отбираются все записи таблиц SPISOK и OCENKI, соответствующие условиям отбора, независимо от наличия связанных записей другой таблицы (Full Join).
Выбираем первый вариант для нашего
На шаге 3 могут быть заданы условия отбора данных (количество условий - не более двух, в Конструкторе
(рис 6.13) Мастер запросов - шаг 3
Шаг 4 - задание условий сортировки данных. Здесь можно выбрать последовательно 3 поля таблиц, по которым следует сортировать данные, например, n_grup, ball - упорядочить по группам, внутри групп - по баллу в порядке уменьшения (Descending).
На шаге 4а можно задать процент или количество рассматриваемых записей, здесь мы оставим без изменений условие all records - все записи.
На последнем шаге 5 выберем вариант Save query and modify it in Query Designer - Сохранить
В результате на диске будет создан текстовый файл
Как видим на рис. 6.14., в верхней половине Конструктора
(рис 6.14) Конструктор запросов
Модифицируем
(рис 6.15) Страница задания условий отбора данных в Конструкторе запросов
Текст
SELECT Spisok.n_fclt, Spisok.n_grup, Spisok.fio, Ocenki.semestr,;
Ocenki.n_predm, Ocenki.ball;
FROM ;
STUDENTS!SPISOK ;
INNER JOIN STUDENTS!OCENKI ;
ON Spisok.nz = Ocenki.nz;
WHERE Spisok.n_fclt = 1; {для всех условий задан одинаковый }
AND Ocenki.semestr = 1; {приоритет (Pri.) равный 0}
AND Ocenki.n_predm = 1;
AND val(Ocenki.ball) > 1;
AND val(Ocenki.ball) < 6; AND YEAR(Ocenki.data_b) = 2006;
ORDER BY Spisok.n_grup, Ocenki.ball DESC
Выполнив
(рис 6.16) Результаты отбора данных по запросу
Более сложный вариант -
Далее уберем лишние поля на странице Fields. При группировке данных допускается отображение только сгруппированных или итоговых данных, таких как следующие:
Не допускается отображение значений отдельных строк таблицы.
Оставим в списке полей только поле группировки - n_grup, и добавим новое поле - выражение для расчета средней оценки - AVG(VAL(ball). На странице Order By запишем одно условие - упорядочить по новому расчетному полю в порядке убывания. На странице Filter оставим все прежние условия отбора. Введем вывод результатов
Текст
SELECT Spisok.n_grup, AVG(VAL(Ocenki.ball));
FROM ;
STUDENTS!SPISOK ;
INNER JOIN STUDENTS!OCENKI ;
ON Spisok.nz = Ocenki.nz;
WHERE Spisok.n_fclt = 1;
AND Ocenki.semestr = 1;
AND Ocenki.n_predm = 1;
AND VAL(Ocenki.ball) > 1;
AND VAL(Ocenki.ball) < 6;
AND YEAR(Ocenki.data_b) = 2006;
GROUP BY Spisok.n_grup;
ORDER BY 2 DESC;
INTO TABLE query_s2.dbf
Результаты отбора данных по
(рис 6.17) Отбор данных по запросу с группировкой
Результаты отбора данных могут быть показаны в виде
| Application Builder |
| Application Wizard |
| Cross-Tab Wizard |
| Database Wizard |
| Documenting Wizard |
| Form Wizard |
| Graph Wizard |
| Import Wizard |
| Label Wizard |
| Local View Wizard |
| Microsoft SQL Server |
| One-to-Many Form Wizard |
| One-to-Many Report Wizard |
| One-to-Many Report Wizard |
| Query Wizard |
| Remote View Wizard |
| Report Wizard |
| Table Wizard |
| Web Publishing Wizard |
| Web Services Publisher |
(рис 6.18) Диаграмма, построенная по результатам запроса
Запрос может иметь несколько уровней группировки данных. Добавим в
SELECT Fclt.name_f, Spisok.n_grup, Predmets.name_p,;
AVG(VAL(Ocenki.ball));
FROM ;
STUDENTS!SPISOK ;
INNER JOIN STUDENTS!OCENKI ;
ON Spisok.nz = Ocenki.nz ;
INNER JOIN students!fclt ;
ON Fclt.n_fclt = Spisok.n_fclt ;
INNER JOIN students!predmets ;
ON Predmets.n_predm = Ocenki.n_predm;
WHERE Ocenki.semestr = ( 1 );
AND VAL(Ocenki.ball) > ( 1 );
AND VAL(Ocenki.ball) < ( 6 );
AND YEAR(Ocenki.data_b) = ( 2006 );
GROUP BY Fclt.name_f, Spisok.n_grup, Predmets.name_p;
ORDER BY Fclt.name_f, Spisok.n_grup, Predmets.name_p, 4 DESC;
INTO TABLE query_s3.dbf
Результаты отбора данных по
(рис 6.19) Отбор данных по запросу с группировкой
На основе таблицы query_s3.dbf можно построить перекрестный
(рис 6.20) Страница 3 мастера Cross-Tab Wizard
Текст
SELECT Query_s3.n_grup, Query_s3.name_p, AVG(Query_s3.avg_exp_4);
FROM ;
QUERY_S3.DBF;
GROUP BY Query_s3.n_grup, Query_s3.name_p;
ORDER BY Query_s3.n_grup, Query_s3.name_p;
INTO TABLE q_cross.dbf
DO (_GENXTAB) WITH 'Query'
BROWSE NOMODIFY
Результат выполнения перекрестного
(рис 6.21) Данные перекрестного запроса
Для полученной таблицы можно построить трехмерную диаграмму с помощью Мастера GraphWizard, показанную на рис. 6.22. (после дополнительного редактирования ее в системе
(рис 6.22) Диаграмма, построенная по данным перекрестного запроса
Основой разработки программ для операционной системы Microsoft Windows в большинстве современных систем (
Проект выглядит на экране как особое окно, содержащее список всех компонентов, входящих в состав пользовательского приложения, и обеспечивающее легкий доступ к ним. В
Создать новый
Однако иногда бывает необходимо создать небольшую исполняемую программу, работающую с базой данных, - для этого можно создать простейший
Создаем новый файл
(рис 6.23) Диаграмма, построенная по данным перекрестного запроса
На странице All представлены все виды компонентов, которые могут входить в состав
Справа в окне
Если скомпилировать такой
(рис 6.24) Компиляция проекта
Для получения программы, работающей в операционной системе Windows, нужно сделать следующее:
(рис 6.25) Процедура Destroy Event для формы Spisok
Далее снова компилируем программу и проверяем ее работу, запуская ее из папки Windows. Мы увидим, что окно экранной формы при запуске программы появляется внутри другого окна, имеющего некоторое стандартное меню. Если вы хотите, чтобы на экране было только окно вашей формы Spisok, можно изменить свойство формы ShowWindow на 2-As Top-Level Form и добавить первой строкой в головной файл
Если в
Другой путь разработки
(рис 6.26) Первая страница Построителя приложений
Наиболее важной страницей построителя является третья (рис. 6.27.) - Data - раздел данных. На ней мы выбираем созданную ранее базу данных Students, после чего на этой странице появляется список всех таблиц базы с возможностью отметить те из них, для которых нужно сгенерировать экранные формы и отчеты.
(рис 6.27) Третья страница Построителя
Далее нажимаем кнопку Generate, и для всех отмеченных таблиц базы создаются стандартные формы и отчеты.
На странице 4 Forms следует указать некоторые особенности использования каждой из форм в программе:
Name - название, которое будет показано для формы в окне 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 и изучить, как выглядят экранные формы, отчеты и как ведет себя полученная программа после компиляции
Как правило, экранные формы и отчеты в дальнейшем подвергаются автором значительной модификации.
Особенность разработанной таким образом программы: на экранной форме нет навигационных кнопок и кнопок редактирования. Эти функции берут на себя панели инструментов (стандартная и навигационная), которые взаимодействуют с формами. Недостаток данного типа
Далее при описании команд приводится их полный синтаксис. Следует помнить, что элементы команд, заключенные в квадратные скобки, являются необязательными, могут присутствовать или отсутствовать. Если элементы разделены вертикальной чертой - должен присутствовать один из них.
Полный список команд и функций с разъяснением их параметров и примерами использования можно найти в справочной системе
CREATE DATABASE [DatabaseName | ?]
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]
[CODEPAGE = nCodePage]
( FieldName1 FieldType [( nFieldWidth [, nPrecision] )] [NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]]
[REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS]
[, FieldName2... ]
[, PRIMARY KEY eExpression2 TAG TagName2 |, UNIQUE eExpression3 TAG TagName3
[COLLATE cCollateSequence]]
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]
[COLLATE cCollateSequence]
REFERENCES TableName3 [TAG TagName5]] [, CHECK lExpression2 [ERROR cMessageText2]] )
| FROM ARRAY ArrayName
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 cConnectionString | (m.nStatementHandle) ]
Функция ALIAS([nWorkArea]) возвращает алиас для текущей или заданной рабочей зоны.
SELECT([ 0 | 1 | cTableAlias ]) SELECT(0) - возвращает номер выбранной рабочей зоны SELECT(1) - возвращает наибольший номер свободной зоны SELECT 0 - выбор свободной зоны с наименьшим номером
INDEX ON eExpression TO IDXFileName | TAG TagName [COLLATE cCollateSequence] [OF CDXFileName] [FOR lExpression] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE] [BINARY]
SET INDEX TO [IndexFileList | ? ] ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [ADDITIVE]
SET ORDER TO [nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [IN nWorkArea | cTableAlias][ASCENDING | DESCENDING]]
SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1 [, eExpression2 INTO nWorkArea2 | cTableAlias2 ] [IN nWorkArea | cTableAlias] [ADDITIVE]]
SET SKIP TO [TableAlias1 [, TableAlias2] ...]
GO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias] GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias] (вместо GO можно использовать GOTO)
SKIP [nRecords] [IN nWorkArea | cTableAlias]
Для nRecords>0 - перемещение далее по таблице, для nRecords<0 - назад к предыдущим записям.
Функция
LOCATE [FOR lExpression1] [Scope] [WHILE] [NOOPTIMIZE]
(Найти следующую запись, соответствующую условию - команда CONTINUE)
SEEK eExpression ORDER nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]] [IN nWorkArea | cTableAlias]
SET FILTER TO [lExpression] [IN nWorkArea | cTableAlias]
SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [, ...]
FROM [FORCE] Table_List_Item [, ...]
[[JoinType] JOIN DatabaseName!]Table[[AS] Local_Alias]
[ON JoinCondition [AND | OR [JoinCondition | FilterCondition] ...]
[WITH (BUFFERING = lExpr)]
[WHERE JoinCondition | FilterCondition [AND | OR JoinCondition | FilterCondition] ...]
[GROUP BY Column_List_Item [, ...]] [HAVING FilterCondition [AND | OR ...]]
[UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, ...]]
[INTO StorageDestination | TO DisplayDestination]
[PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]
В качестве StorageDestination можно использовать одно из следующих предложений:
В качестве DisplayDestination можно использовать одно из следующих предложений:
Команды для добавления, модификации и удаления данных
BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize]] [STYLE cFontStyle] [FOR lExpression1 [REST]] [FORMAT] [FREEZE FieldName] [KEY eExpression1 [, eExpression2]] [LAST | NOINIT] [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 для работы с таблицей при построчном расположении полей.
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]
SQL-команда INSERT INTO - добавить запись с заданными значениями полей:
INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])] VALUES (eExpression1 [, eExpression2, ...]) INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR | FROM NAME ObjectName INSERT INTO dbf_name [(FieldName1 [, FieldName2, ...])] SELECT SELECTClauses [UNION UnionClause SELECT SELECTClauses ...]
REPLACE FieldName1 WITH eExpression1 [ADDITIVE] [, FieldName2 WITH eExpression2 [ADDITIVE]] ...[Scope][FOR lExpression1][WHILE lExpression2] [IN nWorkArea | cTableAlias][NOOPTIMIZE]
SCATTER [FIELDS FieldNameList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO] TO ArrayName | TO ArrayName BLANK | MEMVAR | MEMVAR BLANK | NAME ObjectName [BLANK]
параметр MEMVAR означает - используются переменные с теми же именами, что и имена полей записи; имя переменной в программе следует писать как m.<имя поля>).
GATHER FROM ArrayName | MEMVAR | NAME ObjectName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO]
COPY TO ARRAY ArrayName [FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [Scope] [FOR lExpr1a] [WHILE lExpression2] [NOOPTIMIZE]
UPDATE Target SET Column_Name1 = eExpression1 [, Column_Name2 = eExpression2 ...] [FROM [FORCE] Table_List_Item [[, ...] | [JOIN [ Table_List_Item]]] WHERE FilterCondition1 [AND | OR FilterCondition2 ...]
Здесь Target - таблица (table), курсор (cursor) или их алиас или файл для обновления.
DELETE [Scope] [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias] [NOOPTIMIZE]
PACK [MEMO | DBF] [Tablename ] [IN nWorkarea | cTableAlias]
DELETE [Target] FROM [FORCE] Table_List [[, Table_List ...] | [JOIN [ Table_List]]] [WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]
Команды вычислений по данным таблиц
где для 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] [WHILElExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE] COUNT [Scope] [FOR lExpression1] [WHILE lExpression2] [TO VarName][NOOPTIMIZE]
Математические функции
^ * / + - 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()
Функции для операций с текстовыми данными
+ - 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(,,)
Функции для операций с данными типа "дата" и "время"
{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()
Логические функции
< > = < > <= >= == .T. .F. .NULL. NOT AND OR BETWEEN(,,) DELETED() EMPTY() IIF(,,) INLIST(,,) NVL(,) SEEK(,,)
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.