This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
М И Н И СТ Е РСТ В О О БРА ЗО В А Н И Я РО ССИ Й СК О Й Ф Е Д Е РА Ц И И В О РО Н Е Ж СК И Й ГО СУ Д А РСТ В Е Н Н Ы Й У Н И В Е РСИ Т Е Т
Р азраб о тка п ри л о ж ени й б аз данны х в с реде Delphi. Ч ас ть II.
У чебно-метод и ческоепособи епо специ альности «При клад наяматемати ка и и нформати ка » (010200)
В оронеж 2003
2
У тв ерж д ено научно-метод и чески м сов етом протокол № факультета ПМ М .
6 от 26.05.03
Состав и тели : Руд алев В .Г., К ры ж анов скаяЮ .А .
Пособи е под готов лено на кафед ре техни ческой ки бернети ки и ав томати ческого регули ров ани я факультета При клад ной математи ки , и нформати ки и механи ки В оронеж ского госуд арств енного уни в ерси тета. Рекоменд уетсяд лястуд ентов 4 курса д /о и 4 курса в /о факультета ПМ М .
3
Д анное пособи е, яв ляю щ ееся прод олж ени ем части I пособи я «Раз работка при лож ени й баз д анны х в сред еDelphi» ккурсу «Баз ы д анны х и э кспертны е си стемы » , сод ерж и т св ед ени я по соз д ани ю при лож ени й в сред е «кли ент-сервер» . М атери ал основ ы в ается на Delphi в ерси и 6 и СУ БД Interbase 5.5-6.0. Д ля работы с пособи ем необход и мо з нани е основ ны х компонентов Delphi д ля работы с баз ами д анны х в рамках пособи я [3] и з накомств о сяз ы ком SQL. Раз д елы 1, 4, п. 2.1-2.3 напи саны В .Г.Руд алев ы м, п. 2.4-2.5, раз д ел 3 – Ю .А .К ры ж анов ской . В ведени е В торая часть пособи я цели ком посв ящ ена особенностям соз д ани я кли ентсерверны х при лож ени й на при мереСУ БД InterBase. InterBase и д еально под ход и тд лясоз д ани яи нформаци онны х си стем малы х и сред ни х пред при яти й . Ряд особенностей д елает InterBase, по мнени ю корпораци и Borland и ряд а нез ав и си мы х э кспертов , при год ной и д лякрупны х пред при яти й : • У ни в ерсальность. InterBase в ы пускается д ля раз ли чны х программноаппаратны х платформ: рабочи х групп с сервером под управ лени ем Novell NetWare и ли д оменов на баз е Windows 2000 Server, и нформаци онны х си стем на баз е серверов IBM, Hewlett-Packard, SUN, SGI и д р. InterBase под д ерж и в ает станд арт ANSI SQL 92, корректно работает с наци ональны ми (в том чи сле и с ки ри лли чески ми ) код и ров ками какв Windows, таки в Unix. • InterBase отли чаетсяв ы сокой скоростью и над еж ностью , основ анной на уни кальны х алгори тмах д оступа, простотой ад ми ни стри ров ани я и ни з ки ми з атратами на сопров ож д ени е. • Реально IB мож ет обслуж и в ать БД раз мером в 10-20 ги габай т, при раз мере од ного фай ла БД 2 ги габай та. М ногофай лов ая БД мож ет состоять и з 65535 фай лов , таки м образ ом теорети чески й пред ел д ля од ной баз ы д анны х состав ляет132 терабай та. Преи мущ еств а более «крупнокали берны х» си стем (Oracle, DB2) прояв ляю тсяв скорости работы сбольши ми масси в ами д анны х. В InterBase отсутств ую т собств енны е сред ств а соз д ани я при лож ени й и Caseпроекти ров ани я баз д анны х, что компенси руется многочи сленны ми программны ми прод уктами сторонни х фи рм. Благод аря уд ачному сочетани ю ни з ки х си стемны х требов ани й и в ы сокой над еж ности InterBase хорошо себя прояв и л на Бостонской би рж е, в проекте Magnavox в в ооруж енны х си лах СШ А , на М еж банков ской В алю тной Би рж е М М В Б, в Ц ентре У прав лени я Полетами , в о в нешнеторгов ой корпораци и А в и аэ кспорти д р.
4
1. Ос но вы раб о ты в InterBase 1.1. Interbase Interactive SQL У ти ли та Interbase Windows Interactive SQL (сокращ енно ISQL) – основ ная ути ли та в InterBase д ляработы сБД . Е ефункци и : • Соз д ани ебаз ы д анны х • Соз д ани етабли ц и метад анны х БД • Соед и нени есБД и в ы полнени еSQL-з апросов • О тображ ени еи нформаци и о БД . Зад ачи ад ми ни стри ров ани ярешаю тсяспомощ ью ути ли ты Server Manager. В целом функци ональны е в оз мож ности WISQL нев ели ки , но сущ еств ую т многочи сленны е ути ли ты сторонни х фи рм, э ти в оз мож ности расши ряю щ и е. WISQL успешно работает и с фай лами БД , соз д анны ми в InterBase старши х в ерси й . О снов ной и нструмент InterBase в ерси й 6-7 – ути ли та IBConsole. Е е характери з ую тсов ершенно нов ы й и нтерфей с, ми ни мум нов ы х в оз мож ностей и болееж естки ели ценз и онны еограни чени я. 1.1.1. С оздан и еб азы дан н ы х О брати тесь кад ми ни стратору баз ы д анны х, чтобы он з ареги стри ров ал В ас на сервере Interbase под и менем (напри мер, 4k4gr) и паролем. Е сли ад ми ни стратором яв ляетесь В ы , то сд елай те э то самостоятельно с помощ ью ути ли ты Interbase Server Manager (см. п. 2.1). Пред полож и м, что сервер InterBase з апущ ен на компью тере с сетев ы м и менем c1r214srv, там ж ев папке d:\ib\4k располож ены фай лы баз д анны х. Папка d:\ib д оступна польз ов ателям сети в в и д елоги ческого д и ска V: . Соз д ай те папку, напри мерV:\4k\folder. Запусти те ути ли ту ISQL и в ы бери те пунктменю File | Create DataBase. Е сли серв ерз апущ ен у В ас на локальной маши не (тогд а он буд ет в и д ен в в прав ой части панели з ад ачWindows), то в появ и в шемся в и д е з начка окне требуется помети ть “Local Engine” и указ ать путь кфай лу БД , д алее указ ать и мя ад ми ни стратора (SYSDBA) и пароль (masterkey - пароль ад ми ни стратора по умолчани ю ). Пароль ад ми ни стратора з атем мож но смени ть, а такж е д обав и ть нов ы х польз ов ателей с помощ ью ути ли ты InterBase Server Manager. При работе в Windows-сетях необход и мо в ы брать в поле Network Protocol протокол TCP/IP и ли NetBEUI, в Novell-сетях – Novell SPX.
5
О брати те в ни мани е, что раз решается указ ы в ать только локальны е пути (D:\ib\4k\folder\sklad.gdb), букв ы сетев ы х д и сков (напри мер, V:\4k\folder\sklad.gdb) и спольз ов ать нельз я. Е сли в се бы ло сд елано прав и льно, в папке D:\ib\4k\folder появ и тся фай л sklad.gdb, несод ерж ащ и й пока табли ц. Послеуспешного соз д ани яБД работу ути ли ты мож но з ав ерши ть. 1.1.2. С оздан и ет аб ли ц и други х об ъ ек т овInterBase Д ля соз д ани я табли ц, генераторов , три ггеров и д руги х метад анны х (как, в прочем, и д ляв ы полнени ялю бы х SQL-з апросов ) необход и мо соед и ни тьсяс уж есущ еств ую щ ей БД . Д ля э того послез апуска ISQL в ы бери тепунктменю "File|Connect to Database", появ и тся д и алогов ое окно д ля в в од а и мени польз ов ателя и пароля. Соз д ани е табли ц в ы полняется, как обы чно, с помощ ью оператора CREATE TABLE. В се соз д анны е объ екты буд ут храни тьсяв од ном фай ле*.gdb. В ISQL сущ еств ует д в а способа в ы полнени я операторов SQL: в первом способе текст оператора след уетнабрать в окне SQL Statement; в о в тором в ы брать пункт "File|Run an ISQL Script..." и указ ать и мя скри птов ого фай ла (скри пта). Скри пт (текстов ы й фай л с расши рени ем .sql.) сод ерж и т послед ов ательность SQL-операторов , пред наз наченны х д ля соз д ани я объ ектов БД . В скри птах такж е уд обно храни ть часто и спольз уемы е SQLоператоры д ля работы с БД . При мер скри пта д ля соз д ани я БД и в сех объ ектов , в ней сод ерж ащ и хся, при в ед ен в п. 4.2. Более уд обны м способом соз д ани я объ ектов БД д ля Interbase яв ляется и спольз ов ани еути ли ты Delphi SQL Explorer.
6
З а м еча н и е. В ли тературе рекоменд уется д ля корректной работы с русски ми букв ами настраи в ать InterBase специ альны м образ ом: указ ы в ать строку DEFAULT CHARACTER SET WIN1251 при соз д ани и БД и атри бут COLLATE PXW_CYRL при опред елени и полей , в ы би рать д рай в ер LANGUAGE DRIVER = Pdox ANSI Cyrillic при опред елени и али аса в BDE. О д нако реально в сеэ то необход и мо только д ляправ и льной работы функци и UPPER яз ы ка SQL. По мнени ю ав торов , гораз д о раци ональнее(и над еж нее!) не менять яз ы ков ы х настроек, а и спольз ов ать в место UPPER UDF-функци и и з мод уляCASEUDF, которы й мож но скачать по ад ресу http://www.ibase.ru/ download/caseudf.zip (см. такж еп.2.5). 1.1.3. Получен и еи н формаци и о ст рук т уреб азы дан н ы х В ISQL мож но получи ть полную и нформаци ю о структуре баз ы д анны х: спи соктабли ц и и х структуры , спи ски и тексттри ггеров , храни мы х процед ур и т.п. Э ту операци ю мож но в ы полни ть в пункте меню View и ли Extract. Н апри мер, д ля соз д анной в гл.4 баз ы д анны х Sklad, в ы берем "Extract|SQL Metadata for Table" д ля табли цы Cust. В окошке ISQL Output появ и тся текст оператора, которы й соз д ав ал д анную табли цу и оператора, опред ели в шего перв и чны й клю ч: /* Extract Table CUST */ /* Table: CUST, Owner: RUD */ CREATE TABLE CUST (NC SMALLINT NOT NULL, NAME VARCHAR(20), ADDRESS VARCHAR(20), CONSTRAINT CUSTPRIMARYKEY1 PRIMARY KEY (NC));
1.2. SQL Explorer При мени тельно к InterBase ути ли та SQL Explorer облад ает множ еств ом д ополни тельны х в оз мож ностей , прев ращ аю щ и х ее в уд обны й полнофункци ональны й и нструмент. 1.2.1. С оздан и еали аса. В ы бери те пункт меню New, в окне New Database Alias з ад ай те з начени е IntеrBase. Переи менуй теали ас, указ ав в место Interbase1 и мяIbSklad, в строке Server Name установ и те путь к баз е д анны х c1r214srv:d:\ib\4gr\folder\sklad.gdb, в строке User Name з ад ай те и мя польз ов ателя - 4k4gr. Путь мож но з ад ав ать ли бо в формате <Имя к омпью т ера>:<пут ь> (если и спольз уется протокол TCP/IP), ли бо \\<Имя к омпью т ера>\<пут ь> (протокол NetBEUI). Е сли ранее в ы би ралось Local Engine (серв ер з апущ ен на э том ж е компью тере), то <и мя к омпью т ера> мож но неуказ ы в ать.
7
При мени теи з менени я, в ы брав пунктменю File – Apply. 1.2.2. С оеди н ен и ес Б Д Щ елкни те по з начку + напроти в али аса (раскрой те али ас). В д и алогов ом окнев в ед и теи мяпольз ов ателя, напри мер4k4gr и пароль. 1.2.3. С оздан и ет аб ли ц В ы бери те в контекстном меню д ля в етв и Tables пунктNew (соз д ани енов ой табли цы ). Появ и тсяв етка Table1, переи менуй тееена Detal. Д ля соз д ани я столбца раскрой те Detal , в ы бери те д ля в етки Columns в контексном меню пункт New (соз д ани е нов ого столбца), и з мени те наз в ани е столбца с Column1 на nd, установ и те его ти п integer, в строке Nulls установ и теNo (полеnd буд етперви чны м клю чом).
8
А налоги чно соз д ай тед руги естолбцы , з атем в ы д ели те Detal и File – Apply. Т абли ца соз д ана, и ееструктура буд ети меть в и д :
в ы полни те
1.2.4. С оздан и еперви чн ого к лю ча. В ы бери теPrimary Key - New, з атем Columns – New и под став ьтез начени еnd.
1.2.5. С оздан и еген ерат ора . В ы бери тев етв ь Generators - New, и з мени те и мяG1, под став ьтеначальное з начени е0.
9
Замети м, что д ля каж д ого д ей ств и я мож но просмотреть соотв етств ую щ и й SQL-операторна з аклад ке Text. Д ей ств и ев ступаетв си лу послепри менени я (команд а меню Apply). 1.2.6. С оздан и ет ри ггерадля авт омат и ческ ого заполн ен и я перви чн ого к лю чевого поля при доб авлен и и н овой запи си . В в етв и Detal в ы бери теTriggers –New. И з мени теи мятри ггера – By_nd, на в клад кеDefinition укаж и тев полеType з начени еBefore insert, а на в клад ке Text меж д у Begin и End в в ед и тестроку new.nd=gen_id(g1,1);
А налоги чны е д ей ств и я в ы полняю тся д ля каж д ой соз д ав аемой табли цы . При необход и мости мож но соз д ать д ополни тельны е три ггеры , напри мер, д ля каскад ны х в оз д ей ств и й .
10
Х рани мы е процед уры соз д аю тся в в етв и Procedures али аса, метод и ка з д есь такаяж е, какпри соз д ани и три ггеров . 1.3. П ерех о д к InterBase Н а практи кечасто бы в ает, что кмоменту перев од а и нформаци онной си стемы пред при яти я на архи тектуру кли ент-сервер необход и мы е табли цы , з аполненны еи нформаци ей , уж есущ еств ую т, но в формателокальны х СУ БД *.dbf, Paradox, Access. К акпреобраз ов ать и х кформату InterBase, сохрани в , по в оз мож ности , д анны е? В о многи х (но не в о в сех) случаях з д есь мож ет помочь компонентTBatchMove, пред наз наченны й д лякопи ров ани яз апи сей и з од ного набора д анны х в д ругой . При копи ров ани и компонент преобраз ует форматы , ав томати чески сохраняя и мена столбцов , ти пы и сод ерж и мое д анны х. О снов ны есв ой ств а TBatchMove: Source – и мя набора д анны х (табли цы и ли з апрос), откуд а копи рую тся д анны е, Destination – и мяН Д , куд а копи рую тсяд анны е, Mode - ти п копи ров ани я. Е сли з ад ать ти п batCopy, то табли ца д ля Н Д Destination буд ет соз д ана з анов о в соотв етств и и со структурой табли цы Н Д Source и з аполнена еед анны ми . К опи ров ани епрои сход и тпри в ы полнени и метод а Execute. Д ругой в ари анти спольз ов ани е ути ли ты datapump.exe (в ы полненной на основ е компонента TBatchMove), наход ящ ей сяв папкеBDE. След ую щ и й э тап преобраз ов ани я табли ц – соз д ани е перви чны х клю чей , генераторов , три ггеров и д р. специ фи чны х д ля InterBase объ ектов . При э том необход и мо пересмотреть структуру при лож ени я, раз д ели в его на кли ентскую и серверную части сучетом необход и мы х транз акци й . 2. Ос о б енно с ти кл и ент-с ерверны х п ри л о ж ени й 2.1. О бщ и е при н ци пы 2.1.1. Проек т и рован и еБ Д Н еслед уетсли шком ув лекатьсянормали з аци ей баз ы д анны х. В о в сем нуж на мера. Н ормали з аци я способств ует целостности БД , и склю чает и з табли ц и з бы точную и нформаци ю и сокращ ает раз мер БД . Побочны е э ффекты – з амед лени е работы при д оступе к множ еств у небольши х табли ц и нарушени е в оспри яти я пред метной области раз работчи ком – в кли ентсерверной сред емогутоказ атьсяболеез начи мы ми . 2.1.2. Проек т и рован и е при лож ен и й. Н астоятельно рекоменд ую тся:
11
• Перенос основ ны х в ы чи слени й в серверную часть при лож ени я в соотв етств и и со след ую щ ей табли цей . Д ей с тви е И н с трум ен т Заполнени еуни кальны х клю чей
Генераторы
Под д ерж ка ссы лочной целостности
Т ри ггеры
В ед ени естати сти ки
Т ри ггеры
Би з нес-прав и ла, св яз анны еси з менени ем нескольки х табли ц в рамках од ной транз акци и О грани чени яна з начени яв в од и мы х д анны х
Т ри ггеры
Запросы , в клю чаю щ и е слож ны еалгори тмы с ци клами и в етв лени ем Ч асто и спольз уемы ев SQL-операторах функци и И нтерфей сспольз ов ателем, форми ров ани е з апросов и и нтерпретаци ярез ультатов
Пред лож ени е CHECK при соз д ани и табли ц БД Х рани мы епроцед уры UDF, в ы полняю щ и есяна сервере К ли ентскоепри лож ени е
• И спольз ов ани е компонента TDataBase. К омпонентустанав ли в аетод но общ ее соед и нени е с сервером д ля в сех компонентов DataSet, в проти в ном случае каж д ы й набор д анны х соз д ает отд ельное соед и нени е, что сни ж аетэ ффекти в ность д оступа. • И спольз ов ани е TQuery в место TTable. Пред лож ени е WHERE пред почти тельнее, чем фи льтр, таккакв ы полняетсяна сервере, а нена кли ентской маши не. 2.2. Тра н за кци и 2.2.1. Управлен и ет ран зак ци ями Т ранз акци я – э то группа операци й , рассматри в аемая как ед и ное целое. В случае успеха транз акци я под тв ерж д ается, в случае неуд ачи – цели ком отменяется. При каж д ом в ы полнени и оператора SQL порож д ается транз акци я. Т акж е неяв но транз акци я порож д ается при в ы з ов е нав и гаци онны х метод ов ред акти ров ани я наборов д анны х (Insert, Edit и т.п.) и при ред акти ров ани и с помощ ью TDBGrid. Зав ершается неяв ная транз акци яв ы з ов ом метод ов Post и ли Cancel. Пред почти тельны м яв ляется яв ное управ лени е транз акци ями . Д ля э того и спольз ую тсяли бо операторы яз ы ка SQL (SET TRANSACTION, COMMIT, ROLLBACK), ли бо соотв етств ую щ и е и м св ой ств а и метод ы компонента TDataBase [2] . Рассмотри м послед ни е более под робно. В ы з ов метод а StartTransaction оз начает, что в се послед ую щ и е операторы , и з меняю щ и е д анны е, относятся к текущ ей акти в ной транз акци и . А кти в ной наз ы в ается нез ав ершеннаятранз акци я. Зав ершаетсятранз акци яв ы з ов ом метод а Commit – под тв ерж д ени е транз акци и (и з менени я окончательно фи кси рую тся в БД ) и ли RollBack – откат транз акци и (д анны е оказ ы в аю тся в состояни и , пред шеств ов ав шем началу транз акци и ). Св ой ств о IsTransaction ти па Boolean поз в оляет пров ери ть, и мею тся ли в настоящ и й момент акти в ны е
12
транз акци и (в д анном при лож ени и !). Е сли есть, то начи нать транз акци ю (метод StartTransaction) нельз я. При органи з аци и транз акци и рекоменд уется и спольз ов ать механи з м и склю чи тельны х си туаци й try … except. В при в од и мом ни ж е при мере транз акци ей (нераз ры в ной операци ей ) яв ляется отпусктов ара со склад а, сопров ож д аю щ и й ся уменьшени ем остатка на склад е (табли ца Detal) и д обав лени ем з аказ а (табли ца CD): if Otpusk <= Ostatok then begin dbSklad.StartTransaction; // Начало транзакции try qrCD.Append ; // Изменение нового заказа qrCdTotal.AsString:= …; qrCd.Post; qrDetal.Edit; // Уменьшить остаток qrDetalOst.Value:=Ostatok-Otpusk; QrDetal.Post; dbSklad.Commit; // Фиксация транзакции except dbSklad.RollBack; // Откат транзакции ShowMessage('Ошибка транзакции!'); end; end else ShowMessage ('На складе нет нужного количества!');
При и спольз ов ани и компонентов Interbase Express д аннаястанд артная схема несколько и з меняется(см. п. 2.3.2). 2.2.2. Взамодейст ви ет ран зак ци й В з аи мод ей ств и е нескольки х транз акци й , в ы з в анны х раз ли чны ми кли ентски ми при лож ени ями , при д оступе код ни м и тем ж е д анны м мож но отрегули ров ать, опред ели в уров ни и з оляци и транз акци й спомощ ью св ой ств а TransIsolation: TTransIsolation компонента TDataBase. Значени я св ой ств а обоз начаю тся константами tiDirtyRead («гряз ноечтени е» ), tiReadCommited (чтени епод тв ерж д ени й ), tiRepeatableRead («пов торяемое» чтени е). При уров не DirtyRead транз акци и в и д ят вс е и з менени я, в том чи сле и те, которы е могут бы ть в послед ств и и отменены (RollBack). Поясни м, что и непод тв ерж д енны е и з менени я фи з и чески з апи саны в баз е д анны х. И спольз ов ать DirtyRead не рекоменд уется, таккактранз акци и в з аи мно не и з оли рую тся и располагаю т поэ тому нед остов ерны ми д анны ми . Н еуд и в и тельно, что в целях без опасности в InterBase уров ень DirtyRead нед оступен и ав томати чески трактуетсякакReadCommited. При уров не ReadCommited в и д ны то лько по дтвержден н ы е и з менени я. Н апри мер, Передст арт ом т ран зак ци и 1 б ы ло: Иван овМ оск ва
13
Тран зак ци я 1 ст арт овала и и змен и ла: Иван овВорон еж Тран зак ци я 2 ст арт овалаи прочи т ала: Иван овМ оск ва Тран зак ци я 1 подт верди ла: Иван овВорон еж Тран зак ци я 2 прочи т ала: Иван овВорон еж О д нако и з д есь остается неопред еленность, таккакв торая транз акци я при раз ны х чтени ях в и д и т раз ны е рез ультаты (преи мущ еств ом перед DirtyRead яв ляетсяпод тв ерж д енность э ти х рез ультатов ). У ров ень RepeatableRead более строг и над еж ен. В се транз акци и располагаю т св ои ми локальны ми в ерси ями з апи сей и при в сех чтени ях вс егда (Repeatable) в и д яттолько тепод тв ерж д енны ед анны е, которы ебы ли д о и х старта. Н апри мер, в при в ед енном в ы шепри меретранз акци я2 оба раз а прочи тает од ну и ту ж е з апи сь Иван ов М оск ва. Прав д а, э та з апи сь мож ет оказ аться неактуальной , т.е. без над еж но устареть. Поэ тому в качеств е компроми сса часто и спольз уетсяуров ень ReadCommited. 2.2.3. Тран зак ци и и к эши рован н ы еи змен ен и я К э ши ров ани еи з менени й з аклю чаетсяв соз д ани и на кли ентской маши не д ополни тельного буфера (кэша), в котором хранятсяред акти руемы ез апи си . В сеи з менени яз аносятсяв буфер, а в БД переносятся«пакетом» фи кси рую тся- при в ы з ов е метод а наборов д анны х ApplyUpdates. При необход и мости кэш мож етбы ть очи щ ен отуж ез афи кси ров анны х и з менени й - метод CommitUpdates - и ли очи щ ен без фи ксаци и и з менени й – метод CancelUpdates. К э ши ров ани еи з менени й в есьма полез но, таккакуменьшает сетев ой трафи ки помогаетред акти ров ать з апросы «read only» (см. при мерв [3]). В случаекэши ров анны х и з менени й ти пи чнаятранз акци яи меетв и д : dbSklad.StartTransaction; // Начало транзакции try qrDetal.ApplyUdates; // Фиксация изменений qrCD.ApplyUpdates; // … dbSklad.Commit; // Применение транзакции qrDetal.CommitUdates; qrCD.CommitUpdates; // Очистка кэша except dbSklad.RollBack; // Откат транзакции qrDetal.CancelUdates; // Отмена и очистка qrCD.CancelUpdates; // … ShowMessage('Ошибка транзакции!'); end;
2.3. К о м по н ен ты IBExpress Н ачи наяс пятой в ерси и , пали тра компонентов Delphi д ополни лась страни цей Interbase, сод ерж ащ ей специ али з и ров анны екомпоненты д оступа к серверу Interbase (компоненты InterBase Express, IBX). Глав ноеи х д остои нств о – болеебы стры й д оступ ксерверу, н е исп о ль зу ю щ ий BDE.
14
Ф ункци онально компоненты IBTable, IBTable, IBTable ли шь нез начи тельно отли чаю тся от од нои менны х BDE-ори енти ров анны х компонентов . Структура и код при лож ени я почти не и з меняю тся при переход е от BDE кIBX. Н аи более и нв ари антны участки код а, св яз анны е с пои ском, просмотром и ред акти ров ани ем д анны х. При в ед ем основ ны е отли чи яв программи ров ани и . 2.3.1. С т рук т урапри лож ен и я Н еобход и мо учи ты в ать след ую щ и еособенности IBX. • О бязат ель н ы м являет ся компонентIBDataBase, сод ерж ащ и й параметры соед и нени яссервером, которы еустанав ли в аю тсяв окне DataBase Component Editor, в ы з ы в аемом при д в ой ном щ елчкепо компоненту
Путь кбаз ед анны х на сервере, напри мер c1r214srv:D:\IB\IB_SKLAD2.GDB, храни тсяв св ой ств еDataBaseName. А ли асы ни гд енеи спольз ую тся! • Д ля ред акти ров ани я наборов д анны х, в оз в ращ аемы х IBQuery, компонент IBUpdateSQL являет ся о бязат ель н ы м (в проти в ном случаенабор, нез ав и си мо отз апроса, в сегд а яв ляетсяReadOnly). • Рекоменд уется компонент IBDataSet, объ ед и няю щ и й IBQuery и IBUpdateSQL («д в а в од ном» ). Т екстSQL-з апроса храни тсяв св ой ств е SelectSQL ти па TStrings (при чем форми руется он уд обны м ред актором). Ф ункци ональность IBUpdateSQL обеспечи в ается ред актором набора д анны х, в ы з ы в аемы м в контекстном меню и работаю щ и м так ж е, как в обы чном UpdateSQL [3]. SQL-операторы мод и фи каци и Н Д з апи сы в аю тся в соотв етств ую щ и е св ой ств а InsertSQL, ModifySQL, DeleteSQL.
15
• И нтересной особенностью компонентов IBQuery, IBDataSet, IBTable яв ляется в оз мож ность непосред ств енного в ы з ов а генератора д ля з аполнени я перви чного клю чев ого поля (св ой ств о GeneratorField: TIBGeneratorField). Т ри ггеры д ляэ той цели болеене нуж ны . • При и спольз ов ани и компонентов необход и мо учи ты в ать нов ую мод ель управ лени ятранз акци ями . 2.3.2. О рган и заци я т ран зак ци й У прав лени е транз акци ями прои сход и т не через IBDataBase, а с помощ ью специ ального компонента IBTransaction, являю щ его ся о бязат ель н ы м в при лож ени и . К омпонент IBDataBase св яз ы в ается с объ ектом IBTransaction DefaultTransaction: через св ой ств о TIBTransaction. К роме того, ссы лку на IBTransaction над о указ ать в св ой ств ах Transaction: TIBTransaction наборов д анны х (IBQuery, IBTable и д р.). В при лож ени и мож ет бы ть несколько объ ектов -транз акци й , поэ тому каж д ы й наборд анны х мож ет органи з ов ы в ать св ои собств енны е, нез ав и си мы е от д руги х наборов транз акци и . О снов ны е метод ы IBTransaction аналоги чны – StartTransaction, Commit и RollBack, од нако метод и ка и х при менени я несколько д ругая, а при мер, рассмотренны й в п.2.2.1, неработоспособен. Стартует транз акци я в ы з ов ом метод а StartTransaction и ли установ кой св ой ств а Active в True. Н о след ует учи ты в ать, не з апущ ена ли ранее транз акци я д руги ми способами (в лож енны етранз акци и нед опускаю тся!). Д ело в том, что з апусктранз акци и прои сход и т такж е и при акти в и з аци и соед и нени я, прои сход ящ ей при откры ти и наборов д анны х, св яз анны х с компонентом IBTransaction. В при мере п. 2.2.1 Н Д пред полагаю тся откры ты ми (и наче не буд ут работать комби ни ров анны е спи ски ), поэ тому в ы з ов StartTransaction з апрещ енная в лож енная транз акци я. Прав и льны й при мер органи з аци и транз акци и при в ед ен в раз д еле4. При в ы з ов е метод ов Commit и ли RollBack св яз анны е наборы д анны х з акры в аю тся, при и х переоткры ти и з апускается нов ая транз акци я. Д ля д ополни тельного контроля рекоменд уется пров ерять акти в ность транз акци й (св ой ств о InTransaction: Boolean), си гнали з и ров ать об акти в ности и з менени ем цв ета э лементов формы , д елать пров ерки и з апросы при з акры ти и форм работы с д анны ми , что и реали з ов ано в мод уле OtpForm при мера. В остальном метод и ка и спольз ов ани яBDE- и IBX-компонентов од и наков а. 2.4. П ро с м о тры (Views) Д ов ольно часто польз ов ателям требуется обрати ться к некоторому под множ еств у д анны х, храни мы х в БД . Д ля обеспечени я бы строты
16
в ы полнени я часто и спольз уемы х з апросов и сняти я с кли ентского при лож ени янеобход и мости таки ез апросы в ы д ав ать в БД , мож но опред ели ть просмотры (view). О собенно уд обно и х и спольз ов ать, когд а такую и нформаци ю нуж но получать часто, а услов и я отбора остаю тся неи з менны ми . В и д , пред став лени еи ли просмотр(View) - э то в и ртуальнаятабли ца, которая не сохранена фи з и чески в баз е д анны х, но в ед ет себя точно так ж е, как "реальная" табли ца. В БД храни тся только опи сани е просмотра, которое и спольз уетсяд ляфи льтраци и д анны х при появ лени и з апроса, ссы лаю щ егося на э тот просмотр. Просмотрмож ет сод ерж ать д анны е и з од ной и ли более табли ц и ли д руги х просмотров . В аж но пони мать, что соз д ани е просмотра не генери рует копи и д анны х, храни мы х в д руги х табли цах, и когд а д анны е и з меняю тся через него, то меняю тсяд анны ев табли цах. И наоборот, при прямом в несени и и з менени й в БД просмотры такж еменяю тсясцелью отраж ени яэ ти х и з менени й . Си нтакси ссоз д ани япросмотра: CREATE VIEW ИмяПросмотра [(Столбец[, Столбец…])] AS < оператор select>;
Замечани е. Н ельз я соз д ать просмотр, которы й баз и руется на рез ультатах работы храни мой процед уры . Просмотрмож ет бы ть состав лен и з лю бого под множ еств а столбцов и строк од ной табли цы , форми руемого оператором SELECT. Н апри мер, табли ца job и з employee.gdb (табли ца сотруд ни ков и з д емонстраци онной БД , постав ляемой в месте с InterBase) и меет 8 столбцов job_code, job_grade, job_country, job_title, min_salary, max_salary, job_requirement, language_req. Просмотр отображ ает грани чны е з начени я з арплаты д лякаж д ой работы (в сестроки , но под множ еств о столбцов ) CREATE VIEW JOB_SALARY_RANGES AS SELECT JOB_CODE, MIN_SALARY, MAX_SALARY FROM JOB;
О снов ны епреи мущ еств а и спольз ов ани япросмотров : 1. У прощ ени е д оступа к д анны м. Просмотры объ ед и няю т д анны е и з нескольки х табли ц и поз в оляю т в ы полнять часто и спольз уемы е операторы од и н раз . 2. У д обны й д ля польз ов ателей способ д оступа к д анны м. Просмотры поз в оляю т «под гонять» БД к нуж д ам раз ли чны х польз ов ателей , которы м гораз д о уд обней работать только с той и нформаци ей , которая и меет отношени е только к ни м, не отв лекаясь на и нформаци ю д руги х польз ов ателей . 3. Н ез ав и си мость д анны х. Просмотры поз в оляю т з ащ и ти ть польз ов ателей отраз ли чны х э ффектов , в ы з в анны х и з менени ями в структуреБД . Н апри мер, если ад ми ни страторпри нял решени ео раз д елени и од ной табли цы на д в е, то польз ов атель э того мож ет и не з амети ть, если работает с просмотром, опред еленны м нуж ны м образ ом. 4. Без опасность д анны х. Просмотры обеспечи в аю т без опасность, раз д еляя процесс д оступа к «чув ств и тельны м» и «без раз ли чны м» частям БД .
17
Н апри мер, мож но просмотреть спи сокв аканси й , но без и нформаци и о пред лагаемой з арплатеи наз в ани и фи рмы . Просмотры могутбы ть обнов ляемы ми , но могути нед опускать в несени я в ни х и з менени й (когд а и з менени е просмотра ни как не отраж ается на табли цах, и з которы х просмотрсоз д ан). О бнов ляемость з ав и си тотхарактера просмотра. В целом з д есь требов ани ятаки еж е, каки д ляред акти ров ани яН Д TQuery (см. [1], [3, стр.39]). Просмотры мож но и спольз ов ать в при лож ени ях на Delphi нарав не с обы чны ми табли цы , указ ы в ая и мя просмотра в св ой ств е TableName и ли в оператореSQL, в строенном в TQuery. 2.5. Фун кци и , о пределяем ы е по льзо ва телям и Поми мо в строенны х SQL-функци й , таки х, какmin(), max(), avg(), InterBase под д ерж и в ает би бли отеки в нешни х функци й UDF (функци й , опред еляемы х польз ов ателем). Пред став ляя собой д и нами чески е би бли отеки (DDL в случае Windows), компонуемы е к яд ру сервера InterBase, UDF обеспечи в аю т макси мально в ы сокую прои з в од и тельность. UDF мож но соз д ав ать с помощ ью лю бы х компи ляторов (С, Pascal, Fortran и т.п.). Д ля э того необход и мо напи сать необход и мы е функци и , откомпи ли ров ать и х, в клю чи ть в состав DLL и объ яв и ть на сервере InterBase. UDF мож ет при нять д о 10 параметров , соотв етств ую щ и х лю бому ти пу д анны х InterBase, з а и склю чени ем масси в ов . В се в ход ны е параметры перед аю тсяпо ссы лке. В оз в ращ аемы е з начени я перед аю тся ли бо по ссы лке (по умолчани ю ), ли бо по з начени ю . В послед нем случае необход и мо учи ты в ать соотв етств и е ти пов : Тип Interbase
Тип Object Pascal
Integer Double precision Cstring Date
Integer Double Pchar Type IBGateTime=record Days: integer; Msec: cardinal; End;
Ч тобы перед ать чи слов ое з начени е по з начени ю , след ует при объ яв лени и UDF в БД послев ы ход ного параметра указ ать служ ебноеслов о BY VALUE. Послетого, какфункци и откомпи ли ров аны в би бли отеку, и х нуж но объ яв и ть д ля в сех БД , в которы х плани руется ее и спольз ов ани е. К аж д ую функци ю требуется объ яв лять отд ельно, но только од и н раз д ля каж д ой БД . О бъ яв лени ефункци и и нформи руетБД о еерасполож ени и и св ой ств ах. Си нтакси собъ яв лени я: DECLARE EXTERNAL FUNCTION name [datatype | CSTRING(длина) [,datatype | CSTRING(длина)…]]
О пи с а н и е И мяUDF д ляи спольз ов ани яв SQL-операторах; мож етотли чатьсяоти мени , указ анного после ENRT_POINT Datatype Т и п в ход ного и ли в оз в ращ аемого параметра RETURNS О пред еляетв оз в ращ аемоефункци ей з начени е BY VALUE О пред еляет, что в оз в ращ аемы й рез ультатд олж ен перед ав атьсяпо з начени ю CSTRING(длина) У каз ы в аетсяд ляпар аметров строков ого ти па FREE_IT Послез ав ершени яработы UDF осв обож д аетпамять, в ы д еленную под в оз в ращ аемоепо ссы лкез начени е ‘entryname’ Строка в кав ы чках, опред еляю щ аяи мяфункци и в и сход ном код екаконо храни тсяв би бли отеке ‘modulename’ О пи сани ефай ла, и д енти фи ци рую щ ееби бли отеку, в которой храни тсяUDF Name
При опред елени и и мени мод уля (би бли отеки ) в операторе DECLARE EXTERNAL FUNCTION необход и мо указ ы в ать располож ени е UDF, и спольз уя абсолю тны й путь, относи тельны й путь и ли только и мя би бли отеки . Первы й в ари ант, без услов но, яв ляется неги бки м. О тноси тельны е пути могут бы ть неправ и льно и столков аны О С. В том ж е случае, если и спольз уется только и мя мод уля, О С в сегд а буд ет и скать в под д и ректори и lib установ очной д и ректори и InterBase (напри мер, C:\Program Files\InterBase\lib) и в си стемны х д и ректори ях Windows. Н ачи наясInterBase 6, UDF д олж ны храни тьсятолько в д и ректори и ..\InterBase\udf ! К огд а UDF соз д ана и объ яв лена в БД , ее мож но и спольз ов ать в операторах SQL, в храни мы х процед урах и три ггерах. Д ляэ того след уетв став и ть ееи мя в соотв етств ую щ ее место SQL-оператора, з аклю чи в в ход ны е параметры в круглы ескобки . InterBase пред остав ляетпольз ов ателям некотороеколи честв о наи болеечасто и спольз уемы х функци й в в и д е UDF-би бли отеки ib_udf.dll (папка ..\InterBase\udf ). Э ти UDF напи саны на яз ы ке С. И сход ны етексты и д руги е фай лы , необход и мы е д ля перекомпи ляци и би бли отеки , располож ены в д и ректори и examples. Упра жн ен и е. Под клю чи те би бли отеку ib_udf.dll и пров ерьте ее работоспособность. 3. Си с тема б езо п ас но с ти InterBase 3.1. Ба за да н н ы х безо па с н о с ти Без опасность InterBase строи тся на основ е специ альной баз ы д анны х (БД без опасности ) д ля каж д ого сервера, сод ерж ащ ей а) спи сокпольз ов ателей ,
19
и мею щ и х раз решени е на установ лени е соед и нени я с БД и серви сами InterBase на э том сервере, б) пароли польз ов ателей в з аши фров анном в и д е. Э та баз а д анны х храни тся в фай ле isc4.gdb в папке ..\Interbase. След ую щ аятабли ца опи сы в аетсод ерж и моеБД без опасности : Столбец О пи с а н и е User name И мя, в в од и моепольз ов ателем при под клю чени и Password Пароль UID Ц елое чи сло, опред еляю щ ее и д енти фи катор польз ов ателя GID Ц елоечи сло, опред еляю щ ееи д енти фи каторгруппы Full name Реальноеи мяпольз ов ателя К огд а польз ов атель пы тается установ и ть соед и нени е с БД на сервере, прои з в од и тся пров ерка соотв етств и я и мени польз ов ателя и его пароля и з з апи си в БД без опасности (при перед аче по сети пароли ши фрую тся). В случаесоотв етств и ясоед и нени еуспешно устанав ли в ается. Д ля управ лени я польз ов ателями (отображ ени я, и з менени я, д обав лени я и ли уд алени я и нформаци и и з баз ы без опасности ) служ ат ути ли та команд ной строки gsec и ли более уд обная Windows-программа IB Server Manager, которую рассмотри м болеепод робно. 3.2. П о льзо ва тели и па ро ли Д ля просмотра и и з менени я коли честв а польз ов ателей и и х при в и леги й след ует в ы брать пункт Tasks|User Security в IB Server Manager, чтобы откры ть InterBase Security dialog box и в ы полни ть таки еопераци и , как: • Просмотреть спи сокав тори з ов анны х польз ов ателей . • Д обав и ть польз ов ателя(пунктAdd User). • И з мени ть польз ов ательски й пароль и д ополни тельную и нформаци ю о польз ов ателе(пунктModify User). И мяпольз ов ателяи з мени ть нельз я: д ля э того нуж но сначала польз ов ателя уд али ть, а з атем д обав и ть нов ого польз ов ателя. • У д али ть польз ов ателя. Д ля э того след ует в ы брать пункт Delete, а з атем под тв ерд и ть уд алени ев д и алогов ом окне. Замечани е. Т олько польз ов атель SYSDBA и меет прав а на д обав лени е, мод и фи каци ю и уд алени епольз ов ателей . К аж д ы й серверInterBase и меет польз ов ателя SYSDBA с паролем masterkey. Сначала э то ед и нств енны й ав тори з ов анны й польз ов атель на сервере. И он д олж ен ав тори з ов ать (з ареги стри ров ать) д руги х польз ов ателей . SYSDBA – специ альны й польз ов атель, которы й мож етобой ти станд артную SQL-з ащ и ту и в ы полни ть некоторы еспеци альны еопераци и , напри мер, shutdown д ляБД . В аж но: • Рекоменд уется какмож но бы стрее и з мени ть пароль д ля польз ов ателя SYSDBA, в проти в ном случае без опасность мож ет бы ть нарушена, так
20
как неав тори з ов анны й польз ов атель мож ет получи ть д оступ кБД на сервере (польз ов атель SYSDBA и меет д оступ ко в сем объ ектам). • Имен апользоват елей могутбы ть д ли ной д о 31 си мв ола, неяв ляю тся чув ств и тельны ми к смене реги стра, но не д олж ны сод ерж ать пробелов . • П аро ли чу вст вит ель н ы к регист ру бу кв. З н а чен и е и м еют то лько первы е 8 с и м во ло в па ро ля, но д ли на пароля мож ет д ости гать 32 си мв олов . О бы чно д лякаж д ого челов ека, работаю щ его сInterBase, соз д аетсяотд ельны й польз ов атель, од нако в оз мож ны и д руги ев ари анты : • Соз д ани е од ного польз ов ателя д ля группы ли ц в целях упрощ ени я ад ми ни стри ров ани я паролей . Н апри мер, польз ов атель FINANCE мож ет уд ов летв орять з апросы на д оступ лю бого и каж д ого и з персонала фи нансов ого отд ела. Группа сотруд ни ков д олж на з апомни ть только од и н общ и й пароль. • Соз д ани еод ного польз ов ателя д ля группы ли ц, и мею щ и х од и наков ы е при в и леги и д ляд оступа кБД . След ую щ и й SQL-оператор соз д ает БД с указ ани ем и мени польз ов ателя и пароля: CREATE DATABASE 'c1r214srv:d:\ib\folder\ibSklad.gdb' USER "SVETA" PASSWORD "privet"
О ператорбуд етуспешны м, если польз ов атель SVETA з ареги стри ров ан в баз е д анны х без опасности на серв ереc1r214srv спаролем privet, послечего SVETA станетв лад ельцем (owner) БД IB_Sklad.gdb. 3.3. Гра н ты и при ви леги и Под клю чени е к БД не оз начает ав томати ческую в оз мож ность ред акти ров ани я и д аж е отображ ени я д анны х. При в и леги и д олж ны бы ть з ад аны яв ны м образ ом; польз ов атели не смогут обращ аться ни к од ному объ екту БД , пока не получат соотв етств ую щ и е при в и леги и . При в и леги и , д анны е специ альному «польз ов ателю » PUBLIC, при мени мы д ля в сех польз ов ателей . В се табли цы и храни мы е процед уры з ащ и щ аю тся отнесанкци они ров анного д оступа при и х соз д ани и . Сначала только соз д атель табли цы (owner) и меет д оступ кд анны м, но он мож етназ начать при в и леги и д руги м польз ов ателям (пред остав лять грант). Grant (англ.) – д ар, пред остав лени е, субси д и я. Защ и та от несанкци они ров анного д оступа осущ еств ляется с помощ ью табли цы при в и леги й д оступа - спи ска операци й , которы е раз решены польз ов ателям БД . О д нои менны й SQL-оператор GRANT наз начает при в и леги и д оступа раз ли чны м субъ ектам без опасности - конкретны м польз ов ателям, ролям (см. п. 3.4), а такж е храни мы м процед урам и три ггерам. О бъ ектами без опасности
21
(охраняемы ми объ ектам), ккоторы м при меняется GRANT, могут бы ть табли цы цели ком, столбцы табли ц, три ггеры , храни мы е процед уры , просмотры . SQL-операторREVOKE уд аляетранеепред остав ленны епри в и леги и д оступа. Си нтакси соператора GRANT (под робнее см. в раз д еле Language Reference техни ческой д окументаци и , постав ляемой сInterBase): GRANT {<privileges> ON [Table] {tablename | viewname} TO {