Skip to content

База данных

vindozo edited this page Sep 18, 2018 · 1 revision

CONNECT — Подключение к базе данных

CONNECT [ДРАЙВЕР, ИМЯБАЗЫ$ [,ЛОГИН$] [,ПАРОЛЬ$] [,АДРЕС$] [,ПОРТ#]]
ДРАЙВЕР - тип базы данных: MYSQL, PGSQL, SQLITE, MSSQL, ORACLE, ODBC, CUBRID, FREEDTS, FIREBIRD, IBM, INFORMIX, 4D
ИМЯБАЗЫ$ - имя базы на сервере баз данных.
ЛОГИН$ и ПАРОЛЬ$ - передается если используется авторизация по логину и паролю (по умолчанию пустые строки)
АДРЕС$ - адрес сервера в интернете (IP или домен, по умолчанию localhost)
ПОРТ# - указывается, если порт отличается от стандарного.

Возможно вообще не указывать параметры подключения. В этом случае подключение производится из текущего курсора (см команду USE и DISCONNECT).

CONNECT MYSQL, "blog", "root", "123456"
CONNECT PGSQL, "postgres"

DISCONNECT — Отключение от базы данных

Прерывает соединение с базой данных. Например, для освобождения ресурсов при длительной обработке. Соединение также закрывается автоматически при завершении работы скрипта.

CONNECT MYSQL, "blog", "root", "123456"
DISCONNECT
' ...
CONNECT 
' возобновление подключения к базе по текущему курсору

USE — Выбирает текущую базу данных

USE ИМЯБАЗЫ$ [,АДРЕС$] [,ПОРТ#] 

Команда USE не подключает или отключает базу, а меняет указатель на текущую базу (курсор) между подключенниями. При одновременной работе с несколькими базами с помощью этой команды можно быстро переключаться между ними. Использование курсора базы данных позволяет не указывать базу в каждом запросе.

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

Команда CONNECT с параметрами также устанавливает выбор (курсор) на себя. Поэтому не требуется использовать команду USE сразу после CONNECT.

CONNECT MYSQL, "blog", "root", "123456"
CONNECT MYSQL, "blog2", "root", "123456"
' текущая база "blog2"
USE "blog"
' переключились обратно на "blog"
USE "blog2"
' теперь снова, текущая база "blog2"

QUERY — Выполняет запрос к базе и возвращает данные

ДАННЫЕ = QUERY(ЗАПРОС$ [,СВЕРНУТЬМАССИВ&] ) 

Запросы идут к текущей выбранной базе. Возвращается массив значений переданных базой данных после выпонения запроса или пустой массив, если ничего не пришло.

СВЕРНУТЬМАССИВ& - сворачивает массив в переменную, если TRUE (ANY), по умолчанию FALSE. Иногда заранее известно, что результатом выполнения запроса является одномерный массив или одно значение, в этом случае работать с двухмерным массивом неудобно, и появляется желание вернуть только одномерный массив или одно значение, что выполняет данный параметр. Данный параметр сворачивает пустой массив в NULL.

A = QUERY ("SELECT 2+2", ANY)

QUOTE — Заключает строку в кавычки для использования в запросе

Экранирует специальные символы внутри строки подходящим для текущей базы способом. В качестве параметра может быть передан массив значений, тогда результатом будет набор значений через запятую, где каждое значение будет экранировано отдельно.

PRINT QUOTE ({1, true, "ABC"})
' 1,TRUE,'ABC'
PRINT QUOTE ("Naughty ' string")
' MYSQL = 'Naughty \' string'
' SQLITE = 'Naughty '' string' 

LASTINSERTID — Возвращает ID последней вставленной строки или последовательное значение

В качестве параметра может быть передано имя последовательности, для баз данных поддерживающих несколько ключевых полей. При использовании транзакции требуется завершить транзакцию перед вызовом этой функции.

QUERY ("INSERT INTO test (code) VALUES(1)")
QUERY ("INSERT INTO test2 (test_id) VALUES(" & LASTINSERTID() & ")")

TRANSACTION..COMMMIT..ROLLBACK — Транзакции

Обычно все изменения происходят сразу после выполнения запроса. Однако существует способ выполнить группу операций на базе единым блоком, и откатиться назад в случае неудачи.

TRANSACTION - Выключает режим автоматической фиксации транзакции и создает точку начала изменений. По умолчанию все запросы на изменение данных выполняются немедленно.

COMMIT - Фиксирует транзакцию, выполняя все изменения сразу, и переключает базу в режим автоматической фиксации до тех пор, пока следующая команда TRANSACTION не начнет новую транзакцию.

ROLLBACK - Откат транзакции. Откатывает изменения в базе данных сделанные в рамках текущей транзакции.

TRANSACTION
QUERY ("INSERT INTO test (code) VALUES(1)")
' ...
COMMIT