- •Введение.
- •Лекция1.Введениевклиент-серверныеСубд.
- •InterbaseSqlServer.Общиесведения.
- •Платформы
- •Типыприложений
- •ФайлыбазыданныхInterBase
- •Лекция3.Триггерыихранимыепроцедуры
- •Хранимыепроцедуры(StoredProcedures)
- •Терминаторы
- •Заголовок
- •Телопроцедуры
- •Блоккодапроцедуры
- •Операторприсваивания
- •УсловныйоператорIf…then…else
- •ОператорSelect
- •ЦиклForselecTиSuspend
- •ЦиклWhile…do
- •ОператорыInsert,update,delete
- •ОператорExecuteprocedure
- •Исключения
- •СобытияиоператорPost_event
- •Измененияиудаленияхранимыхпроцедур
- •Примерысозданияивызовахранимыхпроцедур
- •Генераторы
- •Увеличениешагагенератора
- •Триггеры
- •ПеременныеNeWиOld
- •Реализацияавтоинкрементныхключевыхполей
- •Лекция4.Транзакции.Механизмтранзакций
- •Атомарность(Atomicity)
- •Согласованность(Consistency)
- •Изолированность(Isolation)
- •Устойчивость(Durability)
- •Неявныйиявныйстарттранзакций
- •Кактранзакцияработает
- •Уровниизолированноститранзакций
- •Параметрытранзакций
- •Компонентыдоступакданнымивизуальныекомпоненты МеханизмыдоступакБд
- •ПроблемырусскихбукввInterBase
- •Лекция5. Основы языка php. Функции php для работы с субд ИсторияPhp
- •ВозможностиPhp
- •Основнойсинтаксис
- •Разделениеинструкций
- •Комментарии
- •Переменные,константыиоператоры
- •Переменные
- •Константы
- •Операторы
- •Типыданных
- •Типboolean(булевилилогическийтип)
- •Типinteger(целые)
- •Типfloat(числасплавающейточкой)
- •Типstring(строки)
- •Одинарныекавычки
- •Двойныекавычки
- •Типarray(массив)
- •Определениеприпомощиarray()
- •Определениеспомощьюсинтаксисаквадратныхскобок
- •Типobject(объекты)
- •Типresource(ресурсы)
- •Решениезадачи
- •Построениеинтерфейсадлядобавленияинформации
- •Установкасоединения
- •Выборбазыданных
- •Получениеспискаполейтаблицы
- •Отображениеспискаполейвhtml-форму
- •Записьданныхвбазуданных
- •Отображениеданных,хранящихсявMySql
- •Заключение
ПроблемырусскихбукввInterBase
Вообщето,этипроблемыкасаютсянетолькорусских,авообщелюбыхбукв,отличныхотанглийскогоалфавита.Здесьнужносделатьнесколькозамечаний:
Наименованияидентификаторов(названий)таблиц,полей,индексовипроч.вInterBaseнедопустимодаватьрусскимибуквами.
ПрисозданиибазыданныхнезабывайтеуказыватькодировкуWIN1251,каккодировкупоумолчанию.
ЕсливыподключаетексерверучерезIBConsoleужесуществующуюбазуданных,такженезабывайтеуказыватьэтукодировку.
ЕсливыподключаетеклиентскоеприложениекБДчерезBDE,достаточносоздатьпсевдонимБД,вкоторомвкачествеязыковогодрайверауказатьParadoxANSICyrillic,какэтомыделалираньше.
ПриподключенииприложениякБДспомощьюмеханизмов"прямогодоступа",такихкакIBX,FIBPlusит.п.,вспискепараметровнужноуказатьдополнительныйпараметркодировки"lc_ctype=WIN1251",безэтоговысможетепросматриватьтаблицысрусскимтекстомвполях,нонесможетедобавлятьновыхзаписей,сделанныхкириллицей.
ВInterBaseимеетсявстроеннаяфункцияUPPER,котораяпреобразуетсимволыстроковыхполейвзаглавныебуквы.Этувозможностьнередкоиспользуютдляпоискаданных.Однакоприработескириллицейонабудетработатькорректнолишьвтомслучае,еслистроковоеполебылосозданоскодировкойWIN1251ипорядкомсортировкиPXW_CYRL.Вслучаедругихсочетанийпараметров,функциянесможетправильноотображатьрусскийтекстзаглавнымибуквами.Например,отобразитьтекстполяNazvanieизтаблицыTovarзаглавнымибуквамиможноследующимзапросом:"SELECTUPPER(Nazvanie),StoimostFROMTovar"
ЕсливсежевысоздалиполескодировкойWIN1251,нонеуказалисортировкуPXW_CYRL,авамтребуетсявыполнитьпоисксфункциейUPPER,товыможетесменитьпорядоксортировкиявно,прямовзапросе.Например,требуетсянайтизаписьсозначением"Сахар"вполеNazvanie.Приэтоммынезнаем,какпользовательвписалэтоназвание:"САХАР","Сахар"или"сахар".Сделатьпоиск,независящийотрегистраможнозапросом:"SELECT*FROMTovarWHEREUPPER(NazvanieCOLLATEPXW_CYRL)='САХАР'"
dbExpress
ТехнологияdbExpressреализуеттакназываемыйоднонаправленныйкурсор,тоесть,данныеможнобудетлистатьтолькосверху-вниз.Этосущественноускоряетработусбазойданных,новбольшинствеслучаевделаеттехнологиюнеудобнойдляклиентскихприложений.Правда,начинаясшестойверсииDelphi,вdbExpressпоявилсякомпонентTSimpleDataSet,которыйсоздаетдвунаправленныйкурсориснимаетбольшинствоограничений.Втожевремя,программалишаетсяпреимуществаскоростиоднонаправленногокурсора.Всеэтоприводитктому,чтотехнологиюdbExpressнапрактикеиспользуюткрайнередко.Темнеменее,рассмотримподключениепрограммыкбазеданныхспомощьюэтойтехнологии.
Создайтеновоеприложениеиспроектируйтеформутакойже,каквпредыдущемпримере,нобезкомпонентовBDE.Изкомпонентовдоступа,помимоDBNavigatorиDBGridнампонадобятся:DataSourceсвкладкиDataAccess;компонентыSQLConnection,SimpleDataSetиSQLQueryсвкладкиdbExpress.
SQLConnectionпредназначендляподключениякбазеданных,онявляетсяаналогомкомпонентаTDatabaseвBDE.Остальныекомпонентыподключаютсякбазечерезнего.
SimpleDataSetбудетигратьрольтаблицысдвунаправленнымкурсором,аSQLQueryпредставляетсобойобычныйкомпонентзапросов.
ВыделитекомпонентSQLConnection.ВегосвойствеConnectionNameвыберитеизспискавариантовподключенияIBConnection,приэтомавтоматическинастроятсянекоторыесвойства,специфичныедляInterBase.ДалеещелкнитепосложномусвойствуParams-загрузитсяокнопараметров,котороенужнонастроитьтак:
Рис.5.4.ОкнопараметровSQLConnection
ЗдесьнамнужнобудетвручнуювписатьадресиимяфайласбазойданныхвпараметрDatabase.ЗатемуказатьпараметрыServerCharSet(WIN1251)иSQLDialect(3).ПослечегокнопкойОКзакрытьокно.ДалееперевестисвойствоLoginPromptвFalse,чтобыпрограмманезапрашивалаимяипарольпользователя,асвойствоConnectedвTrue,чтобысоединитьсясбазойданных.
ВыделимкомпонентSimpleDataSet.ПереименуйтеегосвойствоNameвTTovar(мывыбралитакоежеимя,какутаблицыизпрошлогопримера,чтобынеменятькоднажатиянакнопку).ВсвойствеConnectionвыберитеSQLConnection1.РаскройтесложноесвойствоDataSet,иоткройтеподсвойствоCommandText.Откроетсяокноредактора,вкоторомнужнобудетсоставитьзапросвыборкивсехданныхизтаблицыTovar:
SELECT*FROMTOVAR:
Рис.5.5.Окноредакторазапросов
ЗатемкнопкойОКзакройтеокно,иможетезакрытьсложноесвойствоDataSet.АвотсвойствоActiveпереведитевTrue,чтобыоткрытьполученныйнаборданных.
ТеперьзаймемсякомпонентомSQLQuery1.СвойствоNameпереименуйтевQ1,всвойствеSQLConnectionвыберитеSQLConnection1.
НапоследоксоединитеDataSource1скомпонентомTTovar,асеткуинавигатор-сDataSource1.Данныеизтаблицыдолжныотобразитьсявсетке.
Коддлякнопкитакойже,каквпредыдущемпримере.Сохранитепроект,скомпилируйтеипопробуйтедобавитьпарунаименованийтовара.Каквидите,реализацияподключениянесколькосложней,чемвпредыдущемпримере,нозатонаклиентскийПКненужноустанавливатьBDE!
InterBaseExpress(IBX)
Этатехнологияявляется"родной"длясервераInterBase,иизстандартныхмеханизмовдоступанаиболееудобна.Азначит,чащевсегоиспользуютименноее.Вбудущихлекцияхмыпоработаемсэтиммеханизмомплотнее,апокавкратцерассмотримработуснимнапримеревсетогожеприложения.
Создайтеновоеприложение,иразместитенаформесеткуDBGrid,навигаторDBNavigatorикнопкутакже,каквпрошлыхпримерах.
НасеткупоместитеодинкомпонентDataSourceсвкладкиDataAccess,исвкладкиInterBaseследующиекомпоненты:IBDatabase,IBTransaction,IBTableиIBQuery.
КомпонентIBDatabaseвыполняетподключениекбазеданных,всеостальныекомпонентывкладкисоединяютсясБДчерезнего.
Вседействиясбазойданныхпроисходятнауровнетранзакций,компонентIBTransactionкакразобеспечиваеттакуютранзакцию.ВприложенииобязательнодолженбытьхотябыодинIBTransaction,соединенныйсIBDatabase.Всложныхмногозвенныхбазахданныхтакихтранзакцийможетбытьнесколько.Вообще,имеетсявозможностьдлякаждогонабораданных(IBTableилиIBQuery)использоватьсобственныйкомпонентIBTransactionсразличныминастройками.Однакоделатьтакнерекомендуется.Обычнонаборыданныхразделяютнагруппы,например,НДтолькодлячтения,НДтолькодлязаписи,НДдлячтения/записисмягкимиилижесткимиусловиямисоединения(обэтомвследующихлекциях).ВэтомслучаедлякаждойгруппынаборовданныхвыделяютсвойкомпонентIBTransaction.
КомпонентыIBTableиIBQueryпочтиничемнеотличаютсяотпростыхTableиQuery.
Итак,выделитекомпонентIBDatabase.ЧерезегосвойствоDatabaseNameнайдитеиподключитефайлFirst.gdb.ДалееоткройтесвойствоParams(откроетсяокноредактора).Вокневпишитеследующиепараметры:
user_name=sysdba
password=masterkey
lc_ctype=win1251
Обратитевниманиенато,чтопробелыпередипослезнака"="недопустимы.Всесловаможновводитьмаленькимибуквами.Каждыйпараметруказывайтенановойстроке.НажмитекнопкуОКизакройтеокноредакторапараметров.СвойствоLoginPromptпереведитевFalse,асвойствоConnectedвTrue-связьсБДустановлена.ВсетевомвариантеобычноLoginPromptоставляютTrue,чтобызнать,какойпользовательнасамомделевошелвбазуданных.
ДалеевыделитекомпонентIBTransactionивегосвойствеDefaultDatabaseвыберитенашуБДIBDatabase1.
ЗатемвыделитетаблицуIBTable1,переименуйтееевTTovar(свойствоName),всвойствеDatabaseвыберитеIBDatabase1.ПриэтомвсвойствеTransactionтаблицыавтоматическидолженпоявитьсякомпоненттранзакцийIBTransaction1.Еслипокакимтопричинамэтогонеслучилось,выберитееговручную.ВсвойствеTableNameустановитетаблицуTovar,асвойствоActiveпереведитевTrue-таблицаоткрыта.
ТеперьвыделимзапросIBQuery1.СвойствоNameпереименуемвQ1,всвойствеDatabaseвыберемIBDatabase1.ИуэтогокомпонентавсвойствеTransactionавтоматическидолжнапоявитьсятранзакцияIBTransaction1.
ОсталосьтолькосвязатьDataSourceстаблицейTTovar,асеткуинавигатор-сDataSource.
Коднажатиянакнопкутакойже,каквпредыдущихпримерах.
Каквидите,работасразличнымимеханизмамидоступаксерверуInterBaseотличаетсялишьвдеталях.МеханизмIBXотличаетсятем,чтовприложенииобязательнодолжнабытьхотябыодинкомпоненттранзакций.Новреальнойпрактикетакихкомпонентовможетбытьнесколько,каждыйизнихобычноимеетсвоинастройки,аразличныенаборыданныхмогутподключатьсякразличнымкомпонентамтранзакций.