Автор работы: Пользователь скрыл имя, 30 Января 2013 в 03:08, курсовая работа
Методологической и теоретической основой исследования послужили работы зарубежных и российских авторов в области бизнес-планироания, менеджмента и маркетинга, связанные с тематикой работы.
Информационную основу исследования составили маркетинговые исследования, проводимые российскими консалтинговыми компаниями, работающими на рынке недвижимости, а также данные, полученные в ходе исследования деятельности конкурентов.
В качестве инструментов исследования были использованы сравнительный и системный анализ, качественное и количественное изучение реальности, экономико-статистические методы.
Практическое значимость предложенных рекомендаций заключается в том, что их использование позволит создаваемому агентству недвижимости успешно выйти на рынок недвижимости Москвы.
IBSQL
TIBSQL = class(TComponent)
Компонент, являющийся минимальной надстройкой над InterBase API. В отличие от IBTable, IBQuery и IBDataSet он не буферизирует выбираемые записи - для доступа к текущей записи существует только свойство Current (IBSQL не является наследником DataSet). Работа с параметрами и столбцами несколько отличается от обычной, т.к. они являются TIBXSQLVAR, то есть прямыми ссылками на структуры InterBase API.
У IBSQL есть свойство GoToFirstRecordOnExecute - если True (по умолчанию), то в случае select компонент запросит у сервера первую запись и заполнит ее данными Current. Если False - Current будет пустым, и для считывания данных с сервера необходимо выполнить IBSQL.Next.
Предназначен для выполнения
операторов Insert/update/delete, execute procedure, или
select для небуферизированного
IBStoredProc
TIBStoredProc = class(TIBCustomDataSet)
Компонент для выполнения хранимых процедур. Собственно, выполнять процедуры можно вызывая EXECUTE PROCEDURE в компонентах IBQuery и IBSQL. Унаследован от IBCustomDataSet, но как таковым DataSet-ом не является. Поэтому для выборки из селективных процедур (select * from proc) следует использовать обычные IBDataSet, IBQuery, IBSQL (IBStoredProc принципиально не умеет работать как DataSet по простой причине - выполнение процедур в нем предусмотрено только как execute procedure). В общем случае не рекомендуется к использованию, т.к. имеет застарелую проблему с обработкой ошибок. При самостоятельном исправлении данной ошибки в коде (IBStoredProc.pas) может быть использован, однако при установке обновлений IBX нужно проверить новую версию IBStoredProc на исправления (что маловероятно).
Примеры вызова обычных и селективных процедур через IBDataSet, IBQuery и IBSQL даны в статье.
! помните, что указанная выше проблема с обработкой ошибок относится к вызовам execute procedure во всех компонентах IBX - IBStoredProc, IBQuery, IBDataSet, IBSQL, ...
EIBError
Базовый класс ошибок IBX. Имеет свойства (кроме унаследованных от EDatabaseError):
SQLCode - номер ошибки (статус
вектора) при выполнении
IBErrorCode - целое число, идентифицирующее
ошибку. Описание всех ошибок
сервера находится в LangRef.
В свою очередь, на основе EIBError в IBX существует несколько дополнительных классов
EIBInterBaseError - общая ошибка сервера
EIBInterBaseRoleError - ошибки при использовании ROLE
EIBClientError - ошибки, специфичные
для клиентской части (gds32.
EIBPlanError - ошибка получения плана запроса
К сожалению, затея с разделением EIBError на классы хоть и хорошая, но в коде реализована плохо. Например, EIBPlanError и EIBInterBaseRoleError вызываются в коде только по одному разу. Поэтому необходимо проверять EIBError, а наследованные от него классы можно игнорировать, или использовать только EIBInterBaseError и EIBClientError в дополнение к EIBError.
Примеры обработки ошибок при работе с транзакциями приведены дальше.
IBDatabaseInfo
Компонент для получения информации о параметрах БД и статистике выполнения запросов. Подсоединяется к IBDatabase, информацию возвращает только посредством runtime-свойств. Наиболее часто используемые свойства
UserNames - список пользователей,
подключенных к серверу
Reads, Writes, Fetches - информация о числе чтений, записи и обращений к страницам БД. Аналог информации, выводимой IBExpert и др. инструментами после выполнения запроса.
PageSize, ODSxxx, NumBuffers, SweepInterval ... - информация о свойствах БД
ReadSeqCount, UpdateCount, InsertCount ... - счетчики соответствующих операций, выводятся для всех таблиц (поштучно). В предыдущих версиях IBX представляли собой integer, что неверно (выводился мусор вместо правильной информации). Аналог информации, выводимой в закладке Performance Info IBExpert.
IBSQLMonitor
Компонент для мониторинга действий клиентского приложения (вызовов IB API). Для мониторинга необходимо в событии OnSQL сохранять EventText и EventTime либо в файле, либо в компоненте TMemo на какой-либо форме (например Memo.Lines.Add(EventText)). Возможен мониторинг (свойство TraceFlags):
tfQPrepare - вызов Prepare запроса
tfQExecute - вызов Execute запроса. Выдается текст запроса, хотя на самом деле в этот момент он на сервер не передается (был уже передан при Prepare)
tfQFetch - выборка 1-й записи с сервера
tfError - ошибки, возникающие на сервере
tfStmt - операции с запросами (аллокирование, закрытие, и т.п.)
tfConnect - подключение к базе данных или отключение
tfTransact - операции с транзакциями - Start, Commit, Rollback, CommitRetaining, Rollbackretaining
tfBlob - операции с blob (чтение, запись)
tfService - вызовы Services API
tfMisc - остальное
Для активации монитора нужно у соответствующего компонента IBDatabase также выставить опцию TraceFlags.
В некоторых (старых) версиях IBX были проблемы с мониторингом (зависало приложение), если компонент IBSQLMonitor использовался в приложениях, работающих как сервис.
Пример использования есть в поставке, и называется SQLMonitor.
IBEvents
Компонент для регистрации и приема событий, отправляемых сервером по оператору POST_EVENT. См. пример IBDemo в поставке Delphi и C++Builder. Помните, что события синхронные, то есть отправляются клиенту только по commit транзакции, в которой эти события произошли (до commit или по rollback никакие события не отправляются).
IBExtract
Компонент для извлечения метаданных БД (таблиц, процедур, триггеров...) в виде скрипта.
Основные свойства:
IncludeSetTerm - включать команду set term в скрипт, или нет. Необходимо (true) для последующего выполнения скрипта в isql, IBExpert и др.
ShowSystem - выводить в скрипт ddl системных таблиц (rdb$...)
DatabaseInfo (runtime) - локальный экземпляр IBDatabaseInfo
Items - результирующий скрипт с метаданными
Database - связь с компонентом IBDatabase
Transaction - связь с компонентом IBTransaction
Пример использования:
Извлечь полный скрипт
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
Извлечь только скрипт таблиц:
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
Извлечь данные для таблицы Customer
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
Извлечь скрипт таблицы EMPLOYEE
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
Извлечь скрипт таблицы EMPLOYEE плюс все ее индексы, триггеры, домены, гранты, check и данные
IBExtract1.ExtractObject(
[etDomain, etTable, etTrigger, etForeign, etIndex, etData, etGrant, etCheck]);
IBExtract1.Items.SaveToFile('
Извлечь скрипт процедуры SHIP_ORDER
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
Извлечь скрипт (create и alter) процедуры SHIP_ORDER
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
Извлечь скрипт alter procedure для SHIP_ORDER
IBExtract1.ExtractObject(
IBExtract1.Items.SaveToFile('
IBConnectionBroker
Компонент для организации пула коннектов. Пример использования - IBConnectionBroker. Для нормальной работы (параллельной работы с коннектами в threads) нельзя указывать локальный коннект (без имени сервера. Это допустимо только если используется Firebird Embedded версии 1.5). В случае работы приложения с IBConnectionBroker на сервере укажите строку коннекта у IBDatabase как localhost:c:\dir\data.gdb.
IBScript
Компонент для выполнения скриптов (набора команд в текстовом файле).
Основные свойства:
AutoDDL - автоматически вызывать Commit после выполнения DDL-операторов
Dataset - компонент для выполнения
sql-операторов скрипта.
Database - база данных, над которой нужно выполнить скрипт (IBDatabase)
Transaction - транзакция, в которой будет выполняться скрипт (IBTransaction)
Terminator - разделитель SQL-операторов в скрипте
Script - текст скрипта (TStrings, соответственно можно вызывать LoadFromFile и т.п.)
Statistics - статистика выполнения скрипта (подробнее см. IBScript.pas)
Paused (runtime, read/write) - индикатор состояния выполнения скрипта
Validating (runtime, readonly) - индикатор выполнения проверки скрипта (только prepare)
CurrentTokens (runtime) - набор токенов выполняемого SQL-оператора
События:
OnExecuteError - при ошибке выполнения
конкретного оператора
OnParse - при успешном выполнении
очередного оператора скрипта
позволяет узнать тип
OnParseError - при ошибке парсинга оператора позволяет вывести оператор, ошибку и номер строки в скрипте.
OnParamCheck - если у конкретного оператора есть параметры, и это не DDL, то позволяет задать параметры оператора SQL перед его выполнением (Params и ParamByName).
Методы:
ValidateScript - выполнять только
prepare всех операторов скрипта,
чтобы убедиться, что они
ExecuteScript - выполнить скрипт
IBSQLParser
Компонент, которым пользуется IBScript для парсинга скрипта.
IBDatabaseINI
Компонент для записи и считывания настроек IBDatabase в ini-файле. Пример использования:
Сохранение информации
procedure TForm1.Button1Click(Sender: TObject);
begin
IBDatabaseINI1.
IBDatabaseINI1.SaveToINI;
end;
Считывание информации
procedure TForm1.Button2Click(Sender: TObject);
begin
IBDatabaseINI1.ReadFromIni;
IBDatabaseINI1.
end;
Информация хранится в файле, указанном в свойстве FileName, в виде
[Database Settings]
database=localhost:D:\
user_name=SYSDBA
password=masterke
sql_role=
lc_ctype=win1251
Классы импорта/экспорта в IBSQL.PAS
Перенесены и чуть доработаны еще из FreeIBComponents.
Базовым классом является TIBBatch. От него унаследованы TIBBatchInput и TIBBatchOutput, которые также являются промежуточными. Конечные (готовые для использования) классы:
TIBOutputDelimitedFile, TIBInputDelimitedFile - импорт-экспорт в файлы текстового формата, каждая запись на отдельной строке, столбцы нефиксированного формата, возможность указать разделитель.
Пример импорта:
procedure TForm1.Button1Click(Sender: TObject);
var
Filename : String;
InpFile : TIBInputDelimitedFile;
begin
TW.StartTransaction;
ImpFile:=
ImpFile.Filename:='c:\data.
ImpFile.ColDelimiter:=','; // разделитель столбцов
ImpFile.SkipTitles; // пропускаем заголовок с именами столбцов, если есть
ImpSQL.Transaction:=TW; // связываем компонент с транзакцией, если это не сделано в дизайн-тайме
ImpSQL.Clear; // это класс IBSQL. Можно использовать и IBQuery
ImpSQL.SQL.Add('insert into table (field1, field2, field3) ');
ImpSQL.SQL.Add('values (:field1, :field2, :field3) ');
ImpSQL.BatchInput(ImpFile);
ImpFile.Free;
TW.Commit;
end;
Для экспорта используется соответственно запрос select, TIBOutputDelimitedFile, и метод IBSQL.BatchOutput(). Несмотря на то, что у TIBQuery/TIBDataSet тоже есть метод BatchOutput, эти компоненты не рекомендуется использовать для экспорта. Дело в том, что IBQuery/IBDataSet - кэширующие DataSet-ы. То есть, по мере считывания и экспорта записей поштучно они будут накапливаться в буфере записей, и будет расти используемая клиентским приложением, и падать скорость экспорта. IBSQL наоборот, не имеет буфера (есть буфер только на 1 запись), и поэтому память при экспорте потребляться не будет, а скорость считывания записей будет зависеть только от производительности сервера и сети.
TIBOutputRawFile, TIBInputRawFile - импорт-экспорт
в файлы фиксированного
TIBOutputXML - класс для экспорта
в XML. Скорее, это не класс, а
record, или набор параметров для
экспорта в XML, поскольку никаких
методов или функций у
Для экспорта в XML не требуется каких то специфических действий - достаточно создать экземпляр TIBOutputXML, заполнить его свойства, и вызвать TIBSQL.OutputXML();
Компоненты Services API (InterBase Admin)
Этот набор компонент находится на отдельной закладке, и показывается в палитре компонент Delphi только в том случае, если на компьютере в path присутствует gds32.dll от InterBase 6.0 и выше или совместимая (для Firebird обязательно указание установки совместимой gds32.dll в инсталляторе, или ручная установка gds32.dll из fbclient.dll при помощи утилиты instclient.exe). Компоненты используют Services API, введенный в InterBase 6.0 для backup/restore, проверки БД и других операций. Пример использования этих компонент есть в поставке и называется Admin (если вы не нашли этот пример в Demos/DB/IBX/, то можете скачать отсюда).
Services API как таковое должно поддерживаться сервером, и поддерживается во всех версиях SuperServer, начиная с InterBase 6. Для Classic полноценно Services API поддерживается либо в Yaffil, либо в Firebird начиная с версии 1.5.2.
На картинке изображена форма примера Admin в DesignTime.
У всех компонент Services API подключение к серверу и БД производится двумя свойствами - ServerName и DatabaseName. В отличие от TIBDatabase в свойстве DatabaseName должен быть указан только локальный путь к БД (без имени сервера), а в ServerName - только имя сервера. Например:
IBS.DatabaseName:='c:\dir\
IBS.ServerName:='server';
Если в DatabaseName указать и имя сервера ('server:c:\dir\data.gdb'), компонент будет выдавать ошибку 'Error reading data from the connection'.
Все компоненты Services API предназначены для выполнения сервером определенных команд. Сами компоненты (за исключением TIBInstall, TIBUninstall) никаких действий (кроме передачи команд серверу и получения результата) не производят.
У всех компонент (за исключением TIBInstall, TIBUninstall) имя пользователя и пароль задаются в свойстве Params. Например:
IBBackupService1.Params.Add('
IBBackupService1.Params.Add('
TIBConfigService - позволяет получать параметры сервера из файла конфигурации ibconfig.
TIBBackupService - передает серверу
команду на выполнение