Автор работы: Пользователь скрыл имя, 30 Января 2013 в 03:08, курсовая работа
Методологической и теоретической основой исследования послужили работы зарубежных и российских авторов в области бизнес-планироания, менеджмента и маркетинга, связанные с тематикой работы.
Информационную основу исследования составили маркетинговые исследования, проводимые российскими консалтинговыми компаниями, работающими на рынке недвижимости, а также данные, полученные в ходе исследования деятельности конкурентов.
В качестве инструментов исследования были использованы сравнительный и системный анализ, качественное и количественное изучение реальности, экономико-статистические методы.
Практическое значимость предложенных рекомендаций заключается в том, что их использование позволит создаваемому агентству недвижимости успешно выйти на рынок недвижимости Москвы.
Работа с компонентами IBX
или использование InterBase eXpress в приложениях на Delphi и C++Builder, с СУБД Firebird и InterBase
kdv, www.ibase.ru, 23.02.2005
обновления: 20.05.2005, 23.05.2005, 24.05.2005, 26.05.2005 - 1, 2, 3, 16.10.2005, 06.04.2006, 30.08.2006, 15.02.2007, 09.03.2007, 28.03.2008, 01.09.2008, 10.06.2010, 10.05.2011, 27.01.2012.
Введение
В Delphi 3 в иерархию компонент
работы с данными была заложена возможность
написания собственных
Но в Delphi 3 ситуация изменилось, и в поставку был включен пример работы с текстовым файлом - (он включен в поставку Delphi до сих пор) Demos/DB/TextData. В результате стали появляться наборы компонент, которые позволяли работать напрямую с любыми источниками данных, в том числе с SQL-серверами. Первым набором таких компонент для InterBase был FreeIBComponents.
FreeIBComponents состоял всего
из четырех компонент - TFIBDatabase,
TFIBTransaction, TFIBDataSet и TFIBQuery. Дополнительный,
пятый, компонент
Перед выходом InterBase 6, примерно в конце 1999 года, FreeIBComponents прекратил свое существование, поскольку был передан в Borland для разработки компонент IBX (InterBase eXpress), которые должны были быть включены в поставку Delphi и C++Builder. Одновременно исходные тексты FreeIBComponents были взяты за основу для создания библиотеки FIBPlus Сергеем Бузаджи.
Исходный набор компонент был существенно расширен как в IBX так и в FIBPlus, и в этой статье будут рассмотрены компоненты IBX, поставляющиеся в Delphi 7.
С помощью IBX (и FIBPlus) можно работать с любыми версиями InterBase, Firebird и Yaffil. Это означает, что все версии IBX и FIBPlus работают (и будут продолжать работать) со всеми версиями InterBase, Firebird и Yaffil, во всех средах разработки Delphi (3,4,5,6,7,2005, 2006, 2007, 2009, 2010), и C++Builder (версий 1, 2, 3, 4, 5, 6, 2006, 2007, 2009, 2010).
!!! В Delphi 2009, 2010, XE и XE2 поставляется
новая версия IBX, которая имеет
несовместимости с базами
Если Вы используете "чистую" установку Firebird, в которой клиентская gds32.dll называется иначе (fbclient.dll) - воспользуйтесь утилитой instclient.exe из комплекта Firebird.
Обновления
Для IBX нужно обязательно устанавливать обновления, которые можно скачать либо с оригинальной страницы, либо здесь.
Компоненты
Закладка InterBase на палитре компонент в Delphi и C++Builder. Есть в любой версии Delphi/C++Builder (кроме бесплатного Turbo Explorer)
Практически каждый компонент имеет свой собственный редактор свойств, который вызывается по двойному клику на него (если он находится на форме или в DataModule), или в отдельном пункте меню, вызываемому по правой кнопке мыши.
Клиентская библиотека
IBX может работать только с библиотекой gds32.dll. Для работы с Firebird необходимо при помощи входящей в комплект утилиты instclient создать gds32.dll из fbclient.dll, т.к. компоненты ориентируются на версию gds32.dll не ниже 6.0, а в fbclient.dll указана версия Firebird, которая ниже 6.0 (1.5, 2.0, 2.1, 2.5).
Usage:
instclient i[nstall] [ -f[orce] ] library
q[uery] library
r[emove] library
Наиболее удобным является размещение gds32.dll рядом с вашим exe. В этом случае приложение загрузит именно эту библиотеку, а не какую то другую, например из System32.
Также нужно помнить, что компоненты в IDE тоже загружают gds32.dll. Поэтому перед началом работы необходимо проверить диски на присутствие лишних, старых или "неправильных" gds32.dll.
Также см. Установка только клиентской части.
Организация доступа к данным
Исключительно для начинающих:
Взаимосвязи компонент выглядят следующим образом:
первым является IBDatabase. Это
центральный компонент для
вторым является IBTransaction. Вне контекста транзакции в InterBase и Firebird нельзя выполнить никаких действий с данными и метаданными БД.
IBTransaction1.
третьим является либо датасет (IBDataSet, IBQuery), либо IBSQL. он связывается с базой данных и транзакцией
IBQuery1.Database:=
IBQuery1.Transaction:=
четвертый - источник данных для датасета, т.е. универсальный TDataSource.
DataSource1.DataSet:=IBQuery1;
пятым является DBGrid. Он связывается только с DataSource.
DBGrid.DataSource:=
Легче всего данные связи осуществить прямо в дизайнере, в свойствах компонент, помещая их по очереди (в указанном порядке) на форму. То же самое (установку взаимосвязей) можно выполнить в коде, в аналогичной последовательности.
Для вывода данных в грид требуется заполнить IBQuery1.SQL запросом на выборку (например, select * from employee), а затем
IBDatabase1.Open;
IBTransaction1.
IBQuery1.Open;
О том, какие свойства IBDatabase, IBTransaction и т.п. необходимо менять и настраивать, читайте дальше.
Необходимо отметить, что в InterBase и Firebird является нормальным
привязка нескольких IBTransaction к одному IBDatabase. При этом операции в разных транзакциях можно совершать по очереди без проблем.
привязка нескольких датасетов (IBDataSet, IBQuery, IBSQL и т.п.) к одной транзакции. С датасетами в одной транзакции также можно работать по очереди без проблем.
TIBDatabase
Предназначен для осуществления соединения с базой данных.
Основные свойства:
DatabaseName - имя сервера и путь к базе данных (или алиас, если поддерживается сервером). Например - localhost:c:\dir\data.gdb, server:c:\dir\data.gdb.
при ошибках локального соединения (путь к БД без имени сервера) см. пункт FAQ.
Params - параметры соединения: имя пользователя, пароль, чарсет и т.п.
Если воспользоваться редактором свойств TIBDatabase (двойной клик на компоненте), то упомянутые свойства будут заполнены автоматически. Например, для базы данных, созданной с default character set win1251 параметры будут такими:
user_name=SYSDBA
password=masterkey
lc_ctype=WIN1251
На диалоге редактора свойств есть кнопка Test, которая позволяет проверить соединение с указанными сервером и базой данных. Если проверка прошла нормально, то можно установить свойство Connected в True.
Для задания свойств остальных компонент (TIBTable, TIBQuery, TIBDatabase) потребуется соединение с сервером БД при помощи вышеупомянутого Connected:=True.
В параметрах TIBDatabase можно
дополнительно прописывать
Дополнительные свойства:
Connected - управление подсоединением к БД, или проверка состояния соединения
DefaultTransaction - компонент IBTransaction,
который будет использоваться
в качестве умолчательного для
выполнения различных операций IBDatabase.
Если это свойство не
IdleTimer - по умолчанию 0. Определяет время, в течение которого при отсутствии активных действий соединение с БД закроется автоматически.
SQLDialect - 1 или 3. По умолчанию
3. Определяет диалект, в котором
будет работать клиентская
TraceFlags - перечень действий между клиентом и сервером, которые будет отслеживать компонент IBSQLMonitor или внешние приложения, поддерживающие такую функциональность.
Подсоединение к БД
Соединиться с базой можно установив один раз параметры при помощи вышеописанного диалогового окна. Если требуется заполнить параметры соединения вручную, в том числе вызывая свой собственный диалог запроса имени пользователя и пароля, то можно использовать следующий код:
IBDatabase1.Params.Clear;
IBDatabase1.LoginPrompt:=
IBDatabase1.DatabaseName:='
IBDatabase1.Params.Add('user_
IBDatabase1.Params.Add('
IBDatabase1.Params.Add('lc_
IBDatabase1.Connected:=True;
Замена диалога запроса имени пользователя и пароля
Выше уже было сказано, что можно использовать свой диалог для запроса имени пользователя и пароля. Его можно "вставить" в качестве замены стандартного, при LoginPrompt:=True. Пример:
procedure TForm1.IBDatabase1Login(
var
dlg: TDBLoginDialog; // созданный вами диалог
begin
dlg:=TDBLoginDialog.Create(
if dlg.ShowModal = mrOK then
with LoginParams do
begin
Values['USER_NAME'] := User_Name;
Values['PASSWORD'] := User_Pass;
// другие параметры, например role_name, lc_ctype и т.д., если необходимо
end;
dlg.Free;
end;
Динамическое создание диалога не обязательно, но желательно, чтобы он зря не занимал в приложении память, тем более что диалог этот обычно вызывается 1 раз при старте приложения.
Создание БД
Обычно базу данных создают в IBConsole, IBExpert, IBDevStudio, isql и вообще любом инструменте разработчика. Из приложения БД создавать обычно не принято, т.к. в этом случае потребуется все метаданные (структуры таблиц, триггеров и т.п.) создавать опять же в приложении, что увеличит размер приложения. Гораздо проще вместе с приложением поставлять пустую или наполненную частично базу данных. Однако, создать БД из приложения не проблема. Вот как это можно сделать
IBDatabase1.Params.Clear;
IBDatabase1.DatabaseName:='
IBDatabase1.Params.Add('user ''SYSDBA'' password ''masterkey'' ');
IBDatabase1.Params.Add('page_
IBDatabase1.Params.Add('
IBDatabase1.CreateDatabase;
IBDatabase1.Connected:=False;
После чего можно подсоединиться к БД любым способом, указанным выше. Последняя строка в этом примере (Connected:=False) нужна потому, что в IBX после CreateDatabase база остается в открытом состоянии, но не задан чарсет подсоединения к БД, а также неполноценно инициализировано соединение с БД в IBX. Именно поэтому после создания БД к ней нужно снова подсоединиться нормальным способом.
! При создании БД разные версии серверов InterBase и Firebird могут по разному устанавливать параметр БД Forced Writes. Если Forced Writes = Off, то в случае сбоя компьютера содержимое базы данных может быть повреждено. В статье изложено, как установить правильно ForcedWrites, как избежать повреждений БД и как ее отремонтировать в случае сбоя.
При использовании IBDatabase (IBX)
в многопоточных (multithreaded) приложениях,
в том числе с web- или com-серверами,
нужно соблюдать следующие
соединение с БД не должно быть "локальным". То есть не c:\dir\data.gdb, а сетевым - localhost:c:\dir\data.gdb.
Если при использовании локального соединения возникает ошибка - читайте FAQ.
в одном thread допускается работа только с одним IBDatabase.
Попытка осуществить работу с одним коннектом из разных threads может быть успешной, если использовать блокировки thread при обращении к этому коннекту (на мютексах, семафорах и т.п.). Но в результате работа всего приложения будет не многопоточной, то есть, превратится в псевдо-многопоточное по причине блокировок между threads при работе с одиним коннектом. Действительно параллельно в разных thread могут выполняться только операции над разными коннектами (IBDatatabase).
иногда при подсоединении к БД в созданном thread может возникнуть ошибка на вызове isc_attach_database (собственно на функции, которая и осуществляет соединение к БД при вызове IBDatatase.Connected:=True). В этом случае вынесите открытие соединения в главный thread приложения, а дальнейшие операции с коннектом производите в пределах нужного thread.
TIBTransaction
Компонент для явной работы с транзакциями.
Клиентская часть InterBase допускает
выполнение любых действий только в
контексте транзакции. Поэтому если
вы смогли получить доступ к данным
без явного вызова IBTransaction.
Основные свойства:
Active - управление стартом
или завершением транзакции, а
также проверка состояния
! при вызове Active:=False транзакция будет безусловно завершена по Rollback !
DefaultDatabase - компонент TIBDatabase
Params - параметры транзакции
AllowAutoStart - если False, то любые
попытки автоматического
IdleTimer - если не 0, то время,
через которое транзакция
DefaultAction - результат автоматического
завершения транзакции в
Умолчательное значение зависит от версии компонент, и может быть как taRollback так и taCommit.
AutoStopAction - свойство, аналогичное
DefaultAction по значениям (плюс saNone, по
умолчанию), указывает на метод
завершения транзакции, когда все
DataSet-ы, подключенные к ней,
В параметрах транзакции (картинка
слева, вызывается по двойному клику
на компоненте, или при нажатии
кнопки ... в свойстве Params) указываются
константы, соответствующие IB API (без
префикса isc_tpb_). Если параметры не указаны
(пусто), то IBX использует параметры
транзакции по умолчанию, которые соответствуют
уровню изолированности snapshot+wait+write (FIBPlus,
в отличие от IBX, при пустых параметрах
самостоятельно прописывает параметры"read
write read_committed no wait", т.е. с другим уровнем
изолированности и режимом