The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Базы данных, SQL" / Оглавление документа

6.6 Модуль MySQLServer

Этот модуль включает объект TMySQLServer, полученный из стандартного класса Delphi 5 TCustomConnection.

Компонент: TMySQLServer

Типы: TMySQLServerLoginEvent

Подпрограммы: MYSQLError

Описание

TMySQLServer представляет собой основной компонент в наборе TMySQLComponent. TMySQLServer используется, чтобы обработать фактические подключения к серверу MySQL, используя стандартные функции из libmysql.dll. Большую часть времени Вы будете использовать только один компонент сервера, зато много компонентов TMySQLDatasets.

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

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

Свойства

AfterConnect!AL("AfterConnect_Property")
AfterDisconnect!AL("AfterDisconnect_Property")
BeforeConnect!AL("BeforeConnect_Property")
BeforeDisconnect!AL("BeforeDisconnect_Property")
Build
ClientVersion
Compression
Connected!AL("Connected_Property")
DatabaseName
Host
IdleTimer
Info
IntVer
LoginPrompt
Major
Minor
Params
Password
Port
Protocol
ServerVersion
UserName

Методы

Create!AL("Create_Method")
Destroy!AL("Destroy_Method")
AllocConnection
ExecSQL
FormatIdentifier
FormatIdentifiers
SelectDatabase
Server
CreateDatabase
DropDatabase
FreeConnection
GetDatabaseNames
GetFieldNames
GetTableNames
RegisterClient!AL("RegisterClient_Method")
Reload
SendEvent
UnRegisterClient!AL("UnRegisterClient_Method")

События

Key events
OnIdleTimer
OnLogin

Цель

Обеспечить все приложенные наборы данных физическими подключениями к серверу MySQL, используя стандартную библиотеку libmysql.dll. Это основной компонент в наборе TMySQLComponent.

Свойство Build

Применимо к TMySQLServer

Определение

property Build : word;

Описание

Сервер формирует версию как слово, например, 32

Read-only

Свойство ClientVersion

Применимо к TMySQLServer

Определение

property ClientVersion : string;

Описание

Используемая версия клиентской разделяемой библиотеки libmysql.dll.

Read-only

Свойство Compression

Применимо к TMySQLServer

Определение

property Compression : boolean;

Описание

Определяет протокол сжатия, используемый при связи с сервером MySQL.

Свойство DatabaseName

Применимо к TMySQLServer

Определение

property DatabaseName : string;

Описание

Получает или определяет текущую (актуальную) базу данных для этого подключения.

Свойство Host

Применимо к TMySQLServer

Определение

property Host : string;

Описание

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

Свойство IdleTimer

Применимо к TMySQLServer

Определение

property IdleTimer : longword;

Описание

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

Свойство Info

Применимо к TMySQLServer

Определение

property Info : string;

Описание

Более подробная информация о сервере.

Read-only

Свойство IntVer

Применимо к TMySQLServer

Определение

property IntVer : longword;

Описание

Версия сервера как слово, например, 32306.

Read-only

Свойство LoginPrompt

Применимо к TMySQLServer

Определение

property LoginPrompt;

Описание

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

Свойство Major

Применимо к TMySQLServer

Определение

property Major : word;

Описание

Старшая часть версии сервера как слово, например, 3

Read-only

Свойство Minor

Применимо к TMySQLServer

Определение

property Minor : word;

Описание

Младшая часть версии сервера как слово, например, 22

Read-only

Свойство Params

Применимо к TMySQLServer

Определение

property Params : TStrings;

Описание

Стандартные параметры, используемые для сервера событием OnLogin. Могут быть изменены во время выполнения.

Свойство Password

Применимо к TMySQLServer

Определение

property Password : string;

Описание

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

Свойство Port

Применимо к TMySQLServer

Определение

property Port : word;

Описание

Получает или определяет текущий порт, используемый при связи с сервером.

Свойство Protocol

Применимо к TMySQLServer

Определение

property Protocol : string;

Описание

Используемый протокол связи: TCP/IP, Pipes и т.д.

Read-only

Свойство ServerVersion

Применимо к TMySQLServer

Определение

property ServerVersion : string;

Описание

Версия сервера MySQL в виде строки.

Read-only

Свойство UserName

Применимо к TMySQLServer

Определение

property UserName : string;

Описание

Получает или определяет текущее имя пользователя, используемое при создании нового подключения.

Метод AllocConnection

Применим к TMySQLServer

Определение

function AllocConnection : PMYSQL;

Описание

Распределяет новое подключение для TMySQLServer и TMySQLDatasets, используя текущие параметры настройки Username, Password, Port и прочие.

Это внутренне используемый метод, обычно он используется только порожденными классами TMySQLServer.

Метод ExecSQL

Применим к TMySQLServer

Определение

function ExecSQL(SQL : string) : boolean;

Описание

Используя подключение, выполнит любую инструкцию SQL на сервере.

Метод FormatIdentifier

Применим к TMySQLServer

Определение

function FormatIdentifier(Value : string) : string;

Описание

Форматирует идентификатор Value, используя информацию о версии сервера. Например, "Table 1" превратится в "`Table 1`".

Метод FormatIdentifiers

Применим к TMySQLServer

Определение

function FormatIdentifiers(const Value : string) : string;

Описание

Форматирует идентификаторы, полученные в строке Value, используя информацию о версии сервера. Например, "Table 1#10#13Table2#10#13Table 3" превратится в "`Table 1`,Table 2,`Table 3`".

Метод SelectDatabase

Применим к TMySQLServer

Определение

function SelectDatabase(Conn : PMYSQL; DB : string) : boolean;

Описание

Для данного подключения выбирает текущую (актуальную) базу данных, то есть действует аналогично команде "USE Database;". Это внутренне используемый метод. Обычно он применяется только классами, порожденными от TMySQLServer.

Метод Server

Применим к TMySQLServer

Определение

function Server : PMYSQL;

Описание

Представляет собой указатель на текущее потоковое подключение к серверу. Это может использоваться со всеми стандартными функциями mysql_, найденными в библиотеке libmysql.dll. Это внутренне используемый метод. Обычно он применяется только классами, порожденными от TMySQLServer.

Метод CreateDatabase

Применим к TMySQLServer

Определение

procedure CreateDatabase(Value : string);

Описание

При использовании подключения к серверу создает новую базу данных, то есть работает аналогично инструкции "CREATE Database;".

Метод DropDatabase

Применим к TMySQLServer

Определение

procedure DropDatabase(Value : string);

Описание

При использовании текущего подключения к серверу удаляет указанную базу данных, то есть работает аналогично инструкции "DROP Database;".

Метод FreeConnection

Применим к TMySQLServer

Определение

procedure FreeConnection(var Value : PMYSQL);

Описание

Освобождает активное подключение.

Метод GetDatabaseNames

Применим к TMySQLServer

Определение

procedure GetDatabaseNames(List : TStrings);

Описание

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

Метод GetFieldNames

Применим к TMySQLServer

Определение

procedure GetFieldNames(const DatabaseName, TableName : string;
                        List : TStrings);

Описание

Заполняет cписок всеми именами полей для таблицы TableName из базы данных DatabaseName с сервера.

Метод GetTableNames

Применим к TMySQLServer

Определение

procedure GetTableNames(const DatabaseName : string; List : TStrings);

Описание

Заполняет cписок всеми именами таблиц из базы данных DatabaseName.

Метод Reload

Применим к TMySQLServer

Определение

procedure Reload;

Описание

Перезагружает права доступа на сервере, то есть работает как команда "RELOAD;"

Метод SendEvent

Применим к TMySQLServer

Определение

procedure SendEvent(Connecting : Boolean);

Описание

Используется, чтобы разъединить все наборы данных, если сервер завершается. Это внутренне используемый метод. Обычно он применяется только классами, порожденными от TMySQLServer.

Событие OnIdleTimer

Применимо к TMySQLServer

Определение

property OnIdleTimer : TNotifyEvent;

Описание

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

Событие OnLogin

Применимо к TMySQLServer

Определение

property OnLogin : TMySQLServerLoginEvent;

Описание

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

Тип TMySQLServerLoginEvent

Модуль MySQLServer

Определение

type
  TMySQLServerLoginEvent = procedure(Server : TMySQLServer;
                                     LoginParams : TStrings); of object;

Описание

Это событие происходит до установки связи с сервером MySQL. Список строк LoginParams в настоящее время поддерживает только два ключевых слова в форме: USERNAME=root, PASSWORD=.

Процедура MYSQLError

Модуль MySQLServer

Определение

procedure MYSQLError(MySQLHandle : PMySQL=nil; ErrNo : integer=-1;
                     Msg : string=''; IntVer : longword=32100);

Описание

Универсальная функция создания исключительной ситуации, предоставляет зависящую от версии информацию относительно последней ошибки MySQL.

6.7 Модуль MySQLDataset

Этот модуль содержит все классы необходимые, чтобы поддерживать основной класс TMySQLDataset.

Компонент: TMySQLDataset.

Типы: TMySQLEvent, TMySQLLocateOptions.

Константы: DefaultMacroChar='|', DefaultTermChar=';'.

TMySQLDataset

Модуль: MySQLDataset.

Описание

Это основной класс, используемый в Вашей прикладной программе. Он был назван именно Dataset, а не Query или Table потому, что он может легко использоваться как стандартный TTable или TQuery. Поскольку этот класс связывается и работает с сервером MySQL, он делает доступными для использования все инструкции SQL. По умолчанию используется концепция макросов (Macros) в командах SQL. Эти макрокоманды очень легко могут быть заблокированы или удалены из значения по умолчанию SQL.

Кроме того, являясь прямым поточным подключением к серверу MySQL, класс был получен непосредственно из TDataset и таким образом поддержан всеми компонентами для работы с базами данных, включая TDatasource. Этот компонент имеет все стандартные свойства и методы.

Из-за отсутствия поддержки курсоров на стороне сервера в MySQL, этот компонент полагается на хорошо разработанные таблицы по умолчанию, то есть Ваши таблицы должны по крайней мере иметь первичный ключ. Если Вы отменяете заданные по умолчанию инструкции SQL, Вы можете сами определять, когда, что и над чем будет выполнено.

Компонент TMySQLDataset

Свойства

Active!AL("Active_Property")
AffectedRows
AfterCancel!AL("AfterCancel_Property")
AfterClose!AL("AfterClose_Property")
AfterDelete!AL("AfterDelete_Property")
AfterEdit!AL("AfterEdit_Property")
AfterInsert!AL("AfterInsert_Property")
AfterOpen!AL("AfterOpen_Property")
AfterPost!AL("AfterPost_Property")
AfterRefresh!AL("AfterRefresh_Property")
AfterScroll!AL("AfterScroll_Property")
BeforeCancel!AL("BeforeCancel_Property")
BeforeClose!AL("BeforeClose_Property")
BeforeDelete!AL("BeforeDelete_Property")
BeforeEdit!AL("BeforeEdit_Property")
BeforeInsert!AL("BeforeInsert_Property")
BeforeOpen!AL("BeforeOpen_Property")
BeforePost!AL("BeforePost_Property")
BeforeRefresh!AL("BeforeRefresh_Property")
BeforeScroll!AL("BeforeScroll_Property")
AllFieldValues
CachedUpdates
DatabaseName
FieldName
Filter
Filtered
MacroChar
MacroCount
Macros
MacrosEnabled
MasterFields
MasterSource
MultiKeyFields
MySQLFields
MySQLRecords
MySQLTables
PrimaryKeyFields
ReadOnly
RealSQL
Records
Server
ShareConnection
SQL
SQLBatch
SQLDelete
SQLInsert
SQLUpdate
TableName
UniqueKeyFields

Методы

Create!AL("Create_Method")
Destroy!AL("Destroy_Method")
BookmarkValid!AL("BookmarkValid_Method")
CompareBookmarks!AL("CompareBookmarks_Method")
CreateBlobStream!AL("CreateBlobStream_Method")
EscapeStr
ExecBatch
ExecSQL
ExecSQLBatch
GetFieldData!AL("GetFieldData_Method")
GetMacroValue
HexStr
Locate!AL("Locate_Method")
LocateRecord
LocateRecordOption
Lookup!AL("Lookup_Method")
MacroByName
ParseSQL
QuoteStr
ClearMacros
ConnectEvent

События

OnCalcFields!AL("OnCalcFields_Event")
OnDeleteError!AL("OnDeleteError_Event")
OnEditError!AL("OnEditError_Event")
OnExecSQL
OnNewRecord!AL("OnNewRecord_Event")
OnPostError!AL("OnPostError_Event")

Свойство AffectedRows

Применимо к TMySQLDataset

Определение

property AffectedRows : string;

Описание

Число строк, на которые воздействует последняя инструкция SQL, которая будет выполнена. Только для Run-time. Read-only.

Свойство CachedUpdates

Применимо к TMySQLDataset

Определение

property CachedUpdates : boolean;

Описание

Установка этого свойства в True заставит все инструкции SQL, SQLUpdate, SQLInsert, SQLDelete и SQLBatch кэшироваться на локальной системе и реально выполняться только тогда, когда методы Close или Refresh в очередной раз обращаются к этому набору данных.

Свойство DatabaseName

Применимо к TMySQLDataset

Определение

property DatabaseName : string;

Описание

В настоящее время выбранная база данных, устанавливая это свойство вызовет "USE Database" на активной поточной связи этого набора данных с сервером MySQL. Это значение заменит все макросы $DATABASENAME в Ваших запросах SQL.

Свойство FieldName

Применимо к TMySQLDataset

Определение

property FieldName : string;

Описание

В настоящее время выбранное имя поля (возможно, нескольких полей). Это может содержать список полей, разделенных запятыми, и необязательный первичный ключ для текущей (актуальной) таблицы. Это заменит все макросы $FIELDNAME в Ваших запросах SQL.

Свойство AllFieldValues

Применимо к TMySQLDataset

Определение

property AllFieldValues : boolean;

Описание

Установите это свойство в True, если Вы хотите, чтобы набор данных использовал "show columns from table", чтобы получить расширенную информацию относительно каждого поля, например, значения по умолчанию, перечни допустимых значений для полей типов ENUM и SET и так далее.

Свойство MacroChar

Применимо к TMySQLDataset

Определение

property MacroChar : Char;

Описание

Текущий (актуальный) символ, используемый для определенных макрокоманд в Ваших инструкциях SQL.

Свойство Filter

Применимо к MySQLDataset

Определение

property Filter : string;

Описание

Установите это свойство к любому имеющему силу определению MySQL WHERE, например, AccountName like "J%". Это значение будет автоматически включено в макрокоманду $WHERE, если Filtered установлено в значение True.

Свойство MacroCount

Применимо к TMySQLDataset

Определение

property MacroCount : Word;

Описание

Число существующих макрокоманд. Только Run-time. Read-only.

Свойство Filtered

Применимо к TMySQLDataset

Определение

property Filtered : boolean;

Описание

Установите это свойство в True, если Вы хотите, чтобы текущий (актуальный) Filter применялся со следующей командой Open к набору данных.

Свойство MasterFields

Применимо к TMySQLDataset

Определение

property MasterFields : string;

Описание

Установите это свойство к любой имеющей силу комбинации Name=Value так, чтобы получилась пара DetailField=MasterField, например, MasterFields:='AccountID=AccountID,AccountName=FirstName', или используйте компоновку, чтобы связать Ваш набор данных с полями MasterSource.

AccountID и AccountName берутся из текущего детального набора данных, а AccountID и Firstname берутся из главного набора данных, определенного свойством MasterSource.

Поля, определенные свойством MasterFields, автоматически анализируются и будут вставлены в предложение $WHERE, набор данных будет закрыт и вновь открыт, уже используя новую инструкцию SQL, которая отразит изменения в наборе данных MasterSource.

Свойство Macros

Применимо к TMySQLDataset

Определение

property Macros : TMySQLMacros;

Описание

TParams представляет собой совокупность макрокоманд, найденных в инструкциях SQL.

Свойство MasterSource

Применимо к TMySQLDataset

Определение

property MasterSource : string;

Описание

Установите это свойство к любому имеющему силу доступному источнику данных. Если это свойство установлено, оно автоматически модифицирует подробный набор данных для макроса $WHERE, когда происходят изменения в наборе данных.

Свойство MacrosEnabled

Применимо к TMySQLDataset

Определение

property MacrosEnabled : boolean;

Описание

Если установлено в True, допускает использование макрокоманд в Ваших инструкциях SQL.

Свойство MultiKeyFields

Применимо к TMySQLDataset

Определение

property MultiKeyFields : string;

Описание

Список строк всех полей, которые являются частью ключа, доступного в текущем (актуальном) наборе результатов. Только Run-time. Read-only.

Свойство MySQLFields

Применимо к TMySQLDataset

Определение

property MySQLFields : TStringList;

Описание

Список строк всех полей, используемых в текущем наборе результатов. Только Run-time. Read-only.

Свойство MySQLRecords

Применимо к TMySQLDataset

Определение

property MySQLRecords : TList;

Описание

Необработанные записи из текущего (актуального) набора результатов. Только Run-time. Read-only.

Свойство MySQLTables

Применимо к TMySQLDataset

Определение

property MySQLTables : TStringList;

Описание

Список всех таблиц, используемых в текущем наборе результатов. Только Run-time. Read-only.

Свойство PrimaryKeyFields

Применимо к TMySQLDataset

Определение

property PrimaryKeyFields : string;

Описание

Строковый список всех полей первичных ключей, доступных в текущем наборе результатов. Только Run-time. Read-only.

Свойство ReadOnly

Применимо к TMySQLDataset

Определение

property ReadOnly : boolean;

Описание

Изменение этого свойства включит или отключит редактирование текущего наборе результатов.

Свойство RealSQL

Применимо к TMySQLDataset

Определение

property RealSQL : string;

Описание

Последняя полная инструкция SQL, которая будет послана серверу MySQL. Только Run-time. Read-only.

Свойство Records

Применимо к TMySQLDataset

Определение

property Records[Index : Integer] : PRecInfo;

Описание

Необработанные записи текущего набора результатов. Только Run-time. Read-only.

Свойство Server

Применимо к MySQLDataset

Определение

property Server : TMySQLServer;

Описание

TMySQLServer, используемый этим набором данных.

Свойство ShareConnection

Применимо к TMySQLDataset

Определение

property ShareConnection : boolean;

Описание

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

Обратите внимание: Соблюдайте осторожность при использовании этого, так как каждый набор данных может использовать любую базу данных, но разделяемое подключение может использовать в один момент времени только единственную базу данных. Если выставить значение в False, этот набор данных будет иметь собственное поточное подключение к серверу MySQL, организованное TMySQLServer. Все операции будут локальными и не смогут влиять на другой экземпляр TMySQLDataset или TMySQLServer.

Свойство SQL

Применимо к TMySQLDataset

Определение

property SQL : TStrings;

Описание

Тип SELECT SQL-запроса. Эти инструкции будут выполнены, каждый раз, когда Вы выполняете операцию Open или Active на наборе данных. Этот набор строк может содержать несколько инструкций, разделеных точкой с запятой (;). Последняя инструкция должна будет произвести набор результатов.

Свойство SQLBatch

Применимо к TMySQLDataset

Определение

property SQLBatch : TStrings;

Описание

Общая команда SQL. Эти инструкции будут выполнены каждый раз, когда Вы выполняете ExecBatch на наборе данных. Этот список строк может содержать несколько инструкций, разделеных точкой с запятой (;).

Свойство SQLDelete

Применимо к TMySQLDataset

Определение

property SQLDelete : TStrings;

Описание

DELETE-тип SQL-команды. Эти инструкции будут выполнены каждый раз, когда Вы выполняете Delete на наборе данных. Этот список строк может содержать несколько инструкций, разделеных точкой с запятой (;).

Свойство SQLInsert

Применимо к TMySQLDataset

Определение

property SQLInsert : TStrings;

Описание

INSERT-тип SQL-команды. Эти инструкции будут выполнены каждый раз, когда Вы выполняете Insert или Append на наборе данных. Этот список строк может содержать несколько инструкций, разделеных точкой с запятой (;).

Свойство SQLUpdate

Применимо к TMySQLDataset

Определение

property SQLUpdate : TStrings;

Описание

UPDATE-тип SQL-команды. Эти инструкции будут выполнены каждый раз, когда Вы выполняете Edit и Post на наборе данных. Этот список строк может содержать несколько инструкций, разделеных точкой с запятой (;).

Свойство TableName

Применимо к TMySQLDataset

Определение

property TableName : string;

Описание

Имя в настоящее время выбранной таблицы. Это заменит макросы $TABLENAME в Ваших инструкциях SQL.

Свойство UniqueKeyFields

Применимо к TMySQLDataset

Определение

property UniqueKeyFields : string;

Описание

Список всех уникальных полей, используемых в текущем наборе результатов. Только Run-time. Read-only.

Метод EscapeStr

Применимо к TMySQLDataset

Определение

function EscapeStr(const Value : string) : string;

Описание

Создает экранированную строку для сервера MySQL, используя функцию mysql_escape_string.

Метод ExecBatch

Применимо к TMySQLDataset

Определение

function ExecBatch : boolean;

Описание

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

Метод ExecSQL

Применимо к TMySQLDataset

Определение

function ExecSQL(SQL : string; EnableMacros, Cached : boolean) : boolean;

Описание

Выполнит любую инструкцию SQL, использующую подключение набора данных. Если EnableMacros равно True, SQL будет анализироваться, используя макрокоманды. Если Cached равно True, SQL-запрос будет послан серверу со следующим обращением к методу Close или Refresh.

Метод ExecSQLBatch

Применимо к TMySQLDataset

Определение

function ExecSQLBatch(SQL : TStrings; EnableMacros, Cached,
                      AutoRefresh : boolean): boolean;

Описание

Выполнит любую инструкцию SQL, использующую подключение набора данных. Если EnableMacros равно True, SQL будет анализироваться, используя макрокоманды. Если Cached равно True, SQL-запрос будет послан серверу со следующим обращением к методу Close или Refresh. AutoRefresh не используется.

Метод GetMacroValue

Применимо к TMySQLDataset

Определение

function GetMacroValue(Name : string) : string;

Описание

Возвратит текущее значение макрокоманды Name как строку.

Метод HexStr

Применимо к TMySQLDatasetCVYCG0

Определение

function HexStr(S : PChar; L : longint) : string;

Описание

Применяется для полей типов BLOB и MEMO. Двоичные данные, указанные в S с длиной L возвратятся как строка, наподобие "0x623E63F...".

Метод LocateRecord

Применимо к TMySQLDataset

Определение

function LocateRecord(const KeyFields : string; const KeyValues : Variant;
                      Options : TLocateOptions;
                      SyncCursor : Boolean): Boolean;

Описание

Стандартный метод реализации Locate.

Метод LocateRecordOption

Применимо к TMySQLDatasetCVYCG0

Определение

function LocateRecordOption(const KeyFields : string;
                            const KeyValues : Variant;
                            Options : TLocateOptions; SyncCursor : Boolean;
                            MySQLOptions : TMySQLLocateOptions;
                            var MatchedField : TField) : Boolean;

Описание

Расширенная версия Locate. Это учитывает полный текстовый поиск на всех полях текущего набора результатов. Параметры KeyFields, KeyValues и Options работают так же, как и со стандартным методом Delphi Locate. Если SyncCursor равно True, набор данных будет установлен в первую согласованную запись. MySQLOptions определяет направление и тип поиска. MatchedField возвращает компонент TField, который соответствует критериям. Эта функция вернет True, если соответствие было найдено.

Метод MacroByName

Применим к TMySQLDataset.

Определение

function MacroByName(const Value : string) : TParam;

Описание

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

Макросы

Макросы дают возможность Вам что-то задать в Вашем SQL-запросе однажды, а затем факультативно устанавливать части инструкций SQL позже.

Рассмотрим такую SQL-команду:

"select * from |$TABLENAME |JOIN |WHERE |GROUPBY |ORDER |LIMIT;"

Эта инструкция имеет 6 определенных макрокоманд, первая специальна, но посмотрим на макрос |WHERE.

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

A) Используя Object Inspector:

Выбрать макрос, нажать на WHERE и ввести значение, подобно "WHERE AccountID=1".

Теперь закройте и снова откройте набор данных, текст будет помещен в Вашу инструкцию SQL и послан на сервер без того, чтобы заменить SQL-свойство.

B) В коде указать:

MySQLDataset1.MacroByName('WHERE').AsString := 'WHERE AccountID=1';

MySQLDataset1.Open;

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

"select * from Accounts WHERE AccountID=1;"

Вы можете устанавливать макрокоманды, даже если Ваш набор данных открыт. Они будут использоваться только, если инструкция SQL должна анализироваться и выполняться снова.

ОБРАТИТЕ ВНИМАНИЕ: Макрокоманды чувствительны к регистру!

Имеются несколько специальных макрокоманд, которые являются доступными для использования, но если Вы устанавливаете значение для них, это не будет иметь эффекта для результата заключительной инструкции SQL, поскольку все эти макрокоманды автоматически модифицируются и устанавливаются во время выполнения. Все они начинаются со знака $:

$RELOAD

Вызовет перезагрузку набора данных MySQLServer, результат этой макрокоманды: пустая строка.

$DATABASENAME

Будет заменен свойством DatabaseName Вашего MySQLDataset.

$TABLENAME

Будет заменен свойством TableName Вашего MySQLDatasset.

$FIELDNAME

Будет заменен первым полем в свойстве FieldName Вашего MySQLDataset. Разделитель ";" или ",".

$FIELDS

Будет заменен постоянными полями набора данных (поля, которые Вы определили двойным нажатием на Ваш набор данных). Если таких полей нет, макрос будет заменен на * (звездочку).

$WHERE

Будет заменен комбинацией свойств MasterFields и Filter. Например, если MasterFields установлен в "AccountID=AccountID" и Filter равен "AccountName like "J%", то результатом будет WHERE (AccountID=1) and (AccountName like "J%").

$MODIFIED$FIELDS&VALUES

Будет заменен изменяемыми полями текущей записи, результат примерно таков:

FieldName1="Value1",FieldName2="Value2",...

Обратите внимание: значения экранируются, пустые поля будут равны NULL, типы BLOB будут равняться 0x874365837546.

$UNMODIFIED$FIELDS&VALUES

Будет заменен неизменяемыми полями текущей записи, результат примерно таков: FieldName1="Value1",FieldName2="Value2",....

$MODIFIED$FIELD$NAMES

Будет заменен именами изменяемых полей текущей записи, результат примерно таков: FieldName1,FieldName2,....

$UNMODIFIED$FIELD$NAMES

Будет заменен именами неизменяемых полей текущей записи, результат примерно таков: FieldName1,FieldName2,....

$MODIFIED$FIELD$VALUES

Будет заменен значениями изменяемых полей текущей записи, результат примерно таков: "FieldValue1","FieldValue2",....

$UNMODIFIED$FIELD$VALUES

Будет заменен значениями неизменяемых полей текущей записи, результат примерно таков: "FieldValue1","FieldValue2",....

$OLD$FIELDS&VALUES

Будет заменен всеми полями в текущем наборе результатов и значениями для предыдущих значений текущей записи, результат напомнит: (FieldName1="Value1") and (FieldName2="Value2") and ....

$FIELDNAMES&VALUES

Будет заменен всеми свойствами FieldName (разделенными ";" или ","), именами полей и значениями для текущей записи, результат напомнит: (FieldName1="Value1") and (FieldName2="Value2") and ....

$PRIMARYFIELDS&VALUES

Будет заменен всеми полями первичного ключа в текущем наборе результатов и значениями для текущей записи, результат примерно такой: (FieldName1="Value1") and (FieldName2="Value2") and ....

ОБРАТИТЕ ВНИМАНИЕ: Если не имеется никаких полей первичного ключа в текущем результате, эта макрокоманда возвратит поля и значения для макроса $OLD$FIELDS&VALUES.

$UNIQUEFIELDS&VALUES

Будет заменен всеми уникальными полями в текущем наборе результатов и значениями для текущей записи, результат примерно такой: (FieldName1="Value1") and (FieldName2="Value2") and ....

$MULTIFIELDS&VALUES

Будет заменен всеми полями, которые являются частями составного ключа в текущем наборе результатов и значениями для текущей записи, результат будет примерно таким: (FieldName1="Value1") and (FieldName2="Value2") and ... .

$FIELDNAMES&VALUES$COMMA

Будет заменен всеми именами полей из свойства FieldName (разделенными ; или ,) и значениями для текущей записи: FieldName1="Value1",FieldName2="Value2",....

$FIELDNAME$VALUE

Будет заменен первым полем в свойстве FieldName текущей записи MySQLDataset: "FieldValue1".

YourFieldNameHere

Будет заменен полем, имя которого определено значением текущей записи. Регистр не имеет значения: "FieldValue1".

$OLD$YourFieldNameHere

Будет заменен полем, имя которого определено предыдущим значением текущей записи. Регистр не имеет значения: "FieldOldValue1".

Например, если Вы должны модифицировать запись в наборе результатов: update mytable set AccountName="abc" where AccountName="cba", Вы изменяете свойство SQL на update mytable set AccountName=|AccountName where AccountName=|$OLD$AccountName.

$PROMPT$Caption$PromptName$DefaultValue$PasswordChar

Запросит Вашего конечного пользователя на предмет значения, которое будет вставлено в sql-запрос. Параметры:

Caption: факультативный заголовок для диалога

PromptName: факультативное имя запрашиваемого значения

DefaultValue: факультативное значение по умолчанию

PasswordChar: факультативный парольный символ, например, *

Если макрокоманды не соответствуют никакому из этих специальных имен, то Macro.AsString используется, чтобы заменить макрокоманду в SQL, например:

MySQLDataset1.MacroByName('WHERE').AsString := 'WHERE AccountID=1';
MySQLDataset1.Open;

Следующее предстваляет собой пример инструкций SQL из фактических программ:

SQL Property: Select

select * from |$TABLENAME WHERE AccountType LIKE "%Employee%"

SQLInsert Property: Insert

use MYSQL;
insert into USER set host="%",user=|ACCOUNTNAME,
       password=PASSWORD(|$PROMPT$Password$$*),
       select_priv="Y",insert_priv="Y",update_priv="Y", delete_priv="Y",
       reload_priv="Y";
use |$DATABASENAME;
insert into |$TABLENAME set |$MODIFIED$FIELDS&VALUES;
|$RELOAD;

SQLUpdate Property: Update

use MYSQL;
update user set user=|ACCOUNTNAME where user=|$OLD$ACCOUNTNAME;
use |$DATABASENAME;
update |$TABLENAME set |$MODIFIED$FIELDS&VALUES where
       |$FIELDNAME=|$FIELDNAME$VALUE;
|$RELOAD;

SQLDelete Property: Delete

use MYSQL;
delete from user where user=|ACCOUNTNAME;
use |$DATABASENAME;
delete from |$TABLENAME where |$FIELDNAME=|$FIELDNAME$VALUE;
|$RELOAD;

Cascading deletes made easy:

delete from |$TABLENAME where |$FIELDNAMES&VALUES;  //Master table

delete from devices where |$FIELDNAMES&VALUES; // Detail table

Метод ParseSQL

Применим к TMySQLDataset

Определение

function ParseSQL(SQL : string) : string;

Описание

Анализирует строку SQL, извлекает и добавлет все найденные макрокоманды.

Метод QuoteStr

Применим к TMySQLDataset

Определение

function QuoteStr(const S : string) : string;

Описание

Создает цитированную строку, например, "string" превратится в "`string`".

Метод ClearMacros

Применим к TMySQLDataset

Определение

procedure ClearMacros;

Описание

Очищает все установленные значения для существующих макрокоманд.

Метод ConnectEvent

Применим к TMySQLDataset

Определение

procedure ConnectEvent(Sender : TObject; Connecting : Boolean);

Описание

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

Событие OnExecSQL

Применимо к TMySQLDataset

Определение

property OnExecSQL : TMySQLEvent;

Описание

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

Тип TMySQLEvent

Модуль MySQLDataset

Определение

type
  TMySQLEvent = procedure(Server: TMySQLDataset; var SQL: string;
                          var Continue: boolean); of object;

Описание

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

Тип TMySQLLocateOptions

Модуль MySQLDataset

Определение

type
  TMySQLLocateOptions = set of (loFirst, loNext, loPrior,
                                loLast, loTextSearch, loMatchAll);

Описание

loFirst: вызывает First на наборе данных перед стартом поиска.

loNext: использует Next на наборе данных, чтобы искать вперед.

loPrior: использует Prior на наборе данных, чтобы искать назад.

loLast: вызывает Last на наборе данных перед стартом поиска.

loTextSearch: выполняет текстовый поиск на полях, включенных в search, таким образом, KeyValues должен содержать строку.

loMatchAll: все поля записи должны содержать значение, определенное для поиска в KeyValues.

Пример: свойства сервера

ShowMessage('MySQL server''s properties are:'#13#10+
  'Server version:'+MySQLServer1.ServerVersion+#13#10+
  'Client version:'+MySQLServer1.ClientVersion+#13#10+
  'Protocol:'+MySQLServer1.Protocol+#13#10+
  'Information:'+MySQLServer1.Info+#13#10+
  'Major:'+IntToStr(MySQLServer1.Major)+#13#10+
  'Minor:'+IntToStr(MySQLServer1.Minor)+#13#10+
  'Build:'+IntToStr(MySQLServer1.Build)+#13#10+
  'Complete:'+IntToStr(MySQLServer1.IntVer)+#13#10);

Пример: создание сервера

with TMySQLServer.Create(nil) do try
  Host := 'localhost';
  Username := 'root';
  Password := '';
  DatabaseName := 'mysql';
  LoginPrompt := False;
  Connected := True;
  ExecSQL('GRANT SELECT, INSERT, UPDATE, DELETE, RELOAD ON *.* TO
          'Admin'@'%'');
  Reload;
  CreateDatabase('Test');
  DropDatabase('Test');
  GetDatabaseNames(List);
  GetTableNames('mysql',List);
  GetFieldNames('mysql','user',List);
finally
  Free;
end;

Пример: использование MySQLDataset

with TMySQLDataset.Create(nil) do try
  Server := MySQLServer1;
  DatabaseName := 'mysql';
  TableName := 'user';
  Active := True;
  ExecSQL('GRANT SELECT, INSERT, UPDATE, DELETE, RELOAD ON *.* TO
          ''Admin''@''%''', True, False);
  Server.Reload;
  MacroByName('WHERE').AsString := 'where user=''root''';
  Close;
  Open;
  ShareConnection := False;
  Open;
  // Now the dataset has it's own threaded connection
  ShareConnection := True;
  Open;
  // Now we are back on the TMySQLServer connection
  ClearMacros;
  MacroByName('ORDER').AsString := 'order by user';
  MacroByName('LIMIT').AsString := 'limit 0,10';
  Close;
  Open;
  CahcedUpdates := True;
  // All edits, insert, deletes, updates are now cached
  Edit;
  FieldByName('user').AsString := 'test';
  Post;
  Close;
  // Cached statements flushed
  CachedUpdates := False;
  // Statements not cached, sent real-time to server
finally
  Free;
end;



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру