Лекция 6:

СУБД Microsoft Visual FoxPro. Отчеты, запросы, проекты и приложения

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Некоторые команды и функции для работы с базой данных

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

Полный список команд и функций с разъяснением их параметров и примерами использования можно найти в справочной системе VFP в разделе Language Reference.

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

  • Создать базу
    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] 
    
    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(,,)
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Данил Корляков
Данил Корляков

Прошел весь курс всего за день, щёлкал ваши тесты, как орешки. Хочу вторую часть! laugh

Олеся Талдыкина
Олеся Талдыкина
Евгений Глибин
Евгений Глибин
Россия
Виктория Лукьян
Виктория Лукьян
Россия