Опубликован: 19.05.2006 | Доступ: свободный | Студентов: 8151 / 1501 | Оценка: 4.04 / 3.81 | Длительность: 09:46:00
Лекция 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

Олеся Талдыкина
Олеся Талдыкина