Интернет системы

Автор работы: Пользователь скрыл имя, 30 Января 2013 в 03:08, курсовая работа

Описание

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

Работа состоит из  1 файл

Документ Microsoft Office Word.docx

— 74.53 Кб (Скачать документ)

Работа с компонентами 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 в иерархию компонент  работы с данными была заложена возможность  написания собственных компонент DataSet. То есть, возможность обращаться к некоему источнику данных, минуя BDE. До этого момента компонент TDataSource мог брать данные только из стандартного DataSet (TTable, TQuery), и для компонент "прямого" доступа приходилось писать собственный TDataSource и компоненты визуализации данных (DBGrid, DBEdit и т.п.) - примером таких компонент  является IBObjects.

 

Но в Delphi 3 ситуация изменилось, и в поставку был включен пример работы с текстовым файлом - (он включен  в поставку Delphi до сих пор) Demos/DB/TextData. В результате стали появляться наборы компонент, которые позволяли работать напрямую с любыми источниками данных, в том числе с SQL-серверами. Первым набором таких компонент для InterBase был FreeIBComponents.

 

FreeIBComponents состоял всего  из четырех компонент - TFIBDatabase, TFIBTransaction, TFIBDataSet и TFIBQuery. Дополнительный, пятый, компонент TFIBSQLMonitor служил  для мониторинга запросов, отсылаемых  через 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 в UTF8. По работе с Unicode в  Delphi 2009 с IBX и InterBase/Firebird читайте  FAQ.

 

Если Вы используете "чистую" установку 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.DefaultDatabase:=IBDatabase1;

третьим является либо датасет (IBDataSet, IBQuery), либо IBSQL. он связывается  с базой данных и транзакцией

IBQuery1.Database:=IBDatabase1;

IBQuery1.Transaction:=IBTransaction1;

четвертый - источник данных для датасета, т.е. универсальный TDataSource.

DataSource1.DataSet:=IBQuery1;

пятым является DBGrid. Он связывается только с DataSource.

DBGrid.DataSource:=DataSource1;

 

Легче всего данные связи  осуществить прямо в дизайнере, в свойствах компонент, помещая  их по очереди (в указанном порядке) на форму. То же самое (установку взаимосвязей) можно выполнить в коде, в аналогичной  последовательности.

 

Для вывода данных в грид требуется заполнить IBQuery1.SQL запросом на выборку (например, select * from employee), а  затем

IBDatabase1.Open;

IBTransaction1.StartTransaction;

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 можно  дополнительно прописывать разнообразные  параметры (константы) соединения, указанные  в ApiGuide.pdf (isc_dpb_...). Обработка этих констант производится процедурой GenerateDPB в модуле IBDatabase.pas.

 

Дополнительные свойства:

Connected - управление подсоединением  к БД, или проверка состояния  соединения

DefaultTransaction - компонент IBTransaction, который будет использоваться  в качестве умолчательного для  выполнения различных операций IBDatabase. Если это свойство не назначено  явно, IBDatabase создаст себе экземпляр  IBTransaction самостоятельно.

IdleTimer - по умолчанию 0. Определяет  время, в течение которого при  отсутствии активных действий  соединение с БД закроется  автоматически.

SQLDialect - 1 или 3. По умолчанию  3. Определяет диалект, в котором  будет работать клиентская часть.  Собственно, когда IBDatabase подсоединяется  к серверу и БД, из БД считывается  номер диалекта, и устанавливается  SQLDialect. Менять не рекомендуется.

TraceFlags - перечень действий  между клиентом и сервером, которые  будет отслеживать компонент  IBSQLMonitor или внешние приложения, поддерживающие  такую функциональность.

Подсоединение к БД

 

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

  IBDatabase1.Params.Clear;

  IBDatabase1.LoginPrompt:=False;

  IBDatabase1.DatabaseName:='servername:c:\dir\data.gdb';

  IBDatabase1.Params.Add('user_name=SYSDBA');

  IBDatabase1.Params.Add('password=masterkey');

  IBDatabase1.Params.Add('lc_ctype=win1251');

  IBDatabase1.Connected:=True;

Замена диалога запроса  имени пользователя и пароля

 

Выше уже было сказано, что можно использовать свой диалог для запроса имени пользователя и пароля. Его можно "вставить" в качестве замены стандартного, при LoginPrompt:=True. Пример:

procedure TForm1.IBDatabase1Login(Database: TIBDatabase; LoginParams: TStrings);

 var

   dlg: TDBLoginDialog; // созданный вами диалог

 begin

   dlg:=TDBLoginDialog.Create(Application);

   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:='servername:c:\dir\data.gdb';

  IBDatabase1.Params.Add('user ''SYSDBA'' password ''masterkey'' ');

  IBDatabase1.Params.Add('page_size 4096');

  IBDatabase1.Params.Add('default character set win1251');

  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.StartTransaction, то значит где то в недрах IBX этот вызов произошел автоматически. Такое поведение крайне не рекомендуется использовать. Для корректной работы приложений с базой данных желательно управлять транзакциями вручную, то есть явно вызывать методы StartTransaction, Commit и Rollback компонента TIBTransaction.

 

Основные свойства:

Active - управление стартом  или завершением транзакции, а  также проверка состояния транзакции.

! при вызове Active:=False транзакция  будет безусловно завершена по Rollback !

DefaultDatabase - компонент TIBDatabase

Params - параметры транзакции

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

IdleTimer - если не 0, то время,  через которое транзакция будет  завершена по DefaultAction

DefaultAction - результат автоматического  завершения транзакции в случае  окончания IdleTimer - taCommit, taRollback, taCommitretaining, taRollbackretaining.Также именно этим  способом будут завершены все  открытые транзакции в момент  вызова IBDatabase.Close (Connected:=False).

Умолчательное значение зависит  от версии компонент, и может быть как taRollback так и taCommit.

AutoStopAction - свойство, аналогичное  DefaultAction по значениям (плюс saNone, по  умолчанию), указывает на метод  завершения транзакции, когда все  DataSet-ы, подключенные к ней,  закрываются. 

 

В параметрах транзакции (картинка слева, вызывается по двойному клику  на компоненте, или при нажатии  кнопки ... в свойстве Params) указываются  константы, соответствующие IB API (без  префикса isc_tpb_). Если параметры не указаны (пусто), то IBX использует параметры  транзакции по умолчанию, которые соответствуют  уровню изолированности snapshot+wait+write (FIBPlus, в отличие от IBX, при пустых параметрах самостоятельно прописывает параметры"read write read_committed no wait", т.е. с другим уровнем  изолированности и режимом ожидания). То есть, в транзакции с такими параметрами  не будут видны никакие изменения  базы данных (кроме тех, которые выполнены в этой транзакции). Это является самой известной проблемой для начинающих разработчиков, когда "приложение видит изменения только после перезапуска" (и именно поэтому разработчики FIBPlus при обнаружении незаданных параметров у pFIBTransaction меняют уровень изолированности на read_committed). Для обычной работы (показ данных в гриде и т.п.) обычно используются параметры ReadCommitted (как на рисунке), т.к. они позволяют транзакции видеть чужие, committed изменения базы данных (подробно все возможные параметры описаны здесь) просто путем повторного выполнения запросов (перечитывания данных).

Информация о работе Интернет системы