Основы работы с базами данных

2bbc099f

Команды для работы с базами данных, таблицами, индексами, связями


  • Создать базу CREATE DATABASE [DatabaseName | ?]
  • Создать таблицу базы данных (SQL-команда) 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
  • Открыть базу данных, представление (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 cConnectionString | (m.nStatementHandle) ] Функция ALIAS([nWorkArea]) возвращает алиас для текущей или заданной рабочей зоны.
  • Выбрать свободную рабочую зону (0), заданную рабочую зону или выбрать таблицу 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 - назад к предыдущим записям.

    Функция BOF() возвращает .T., если текущая запись - первая и Вы пытаетесь выполнить команду SKIP -1, аналогично для последней записи - EOF()=.T.

  • Поиск для заданного логического условия 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]
  • Выполнить запрос (SQL-команда) 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 можно использовать одно из следующих предложений:

    • ARRAY ArrayName - в массив переменных памяти;
    • CURSOR CursorName - в курсор;
    • DBF TableName | TABLE TableName - в таблицу.


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

    • FILE FileName [ADDITIVE] - ASCII текстовый файл;
    • PRINTER [PROMPT] - вывод на принтер;
    • SCREEN - в главное окно системы VFP.




Команды для добавления, модификации и удаления данных

  • Открыть окно для работы в табличном формате с таблицей базы данных: 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]
  • Выполнить обновление данных (SQL-команда) 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]
  • Выполнить удаление записей (SQL-команда) DELETE [Target] FROM [FORCE] Table_List [[, Table_List ...] | [JOIN [ Table_List]]] [WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]




Команды вычислений по данным таблиц

  • 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] [WHILElExpression2][TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE]


    Содержание раздела