|
| ||||||||||||
| ||||||||||||
|
2004 г
MySQL: Руководство разработчика. Версия 1.0. 20 апреля 2004 г.Алексей Паутов,Все о MySQL на русском: http://www.botik.ru/~rldp/mysql.htm, ftp://ftp.botik.ru/rented/rldp/www/pub Russian LDP: http://www.botik.ru/~rldp, ftp://ftp.botik.ru/rented/rldp 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;
|
|
CITForum © 1997–2025