ДЕРЕКТЕР БАЗАСЫНЫЦ ЖУЙЕС1

Size: px
Start display at page:

Download "ДЕРЕКТЕР БАЗАСЫНЫЦ ЖУЙЕС1"

Transcription

1 004 Д З З ГАН РЕСПУБЛИКАСЫНЬЩ БШ1М Ж0НЕ ГЫЛЫМ МИНИСТРЛ1Г1 С. ТОРАЙГЫРОВ АТЫНДАРЫ ПАВЛОДАР МЕМЛЕКЕТТ1К УНИВЕРСИТЕТ! ДЕРЕКТЕР БАЗАСЫНЫЦ ЖУЙЕС1 Акпараттык жуйелер мамандыгыныц студенттерше арналган оку-эдютемелж курал Павлодар

2 Казакстан Республикасыныц Бшм жэне гылым министрл^п е с ц С. Торайгыров атындагы Павлодар мемлекетпк университет! Физика, математика жэне акпараттык технологиялар факультет! Информатика жэне акпараттык жуйелер кафедрасы А З з ДЕРЕКТЕР БАЗАСЫНЫЦ ЖУЙЕС1 Акпараттык жуйелер мамандыгыныц студенттерше арналган оку-эдютемелж курал Павлодар Кереку 2013

3 эеж (07) КБЖ Т?Г2я7 ДЗЗ С. Торайгыров атындагы Павлодар мемлекетпк у и и вере итет i и i и физика, математика жане акпараттык технологиялар факультеты и оку-эд!стемел1к кенес!мен баспага усыиылды ПЫрсарапшылар: Н. Н. Оспанова - педагогика гылымдарынын кандидаты, доцен С. Торайгыров атындагы Павлодар мемлекетпк университетшщ информатика жэне акпараттык жуйелер кафедрасынын мецгеруипег, А. Е. Тохметов - физика-математика гылымдарынын кандидаты, доцент, Павлодар мемлекетпк педагогикалык институттынын информатика кафедрасынын профессоры. Курастырушы: А.С. Аканова ДЗЗ Деректер базасынын жуйес! : акпараттык жуйелер мамаидыгы студенттерше арналган оку-эд1стемел1к курал / кураст. А. С. Аканова. - Павлодар : Кереку, б. Эдктемел1к куралда "Деректер базасынын жуйесг пан! бойынша зерханалык сабактарга дайындалу ушш тапсырмалар жане оларды орындау жвжндеп усыныстар келпршген. Бершген зертханалык жумыстарда 6ip немесе б1рнеше кестедеи туратын деректер корын, кестелер арасындагы юлтпк epicrepaih тагайындалуын. эеж (07) КБЖ я7. Аканова АлС., 2013 J >С. Торайгыров атындагы ПМУ, 2013 Материалдык дурыс болуына, грамматикалык жэне орфографиялык кателерге авторлар мен кдоастырушылар жауапты

4 K ipicne Ka3ipri кезде Delphi багдарламасы косымшаларды ецдеудщ ен кен таралган куралдарынын oipi болып табылады. Сонымен катар, Delphi артурл1 нускаларда колданылады, сонын шшде: - Delphi-дв тек кана мл1метгер корын баскару жуйей курылады, ал деректер коры баска куралдармен курылуы мумюн, сонын шшде FoxPRO, Visual Foxpro, Paradox, Visual Basic, Access жэне т.б.; - Delphi-дв косымшанын тек клиентпк белш гана курылады, ал сервердеп деректер коры ORACLE, SQL немесе баска ортада жасалады; Ьагдарламалык куралдарды ауызша жасап уйрене ал у ете киынга туседц, сондьщтан да оны icten тэж1рибе кезще уйренген дурыс. Осыган орай, деректер корымен жумыс гстейтщ карапайым косымшаны жасауды тэж!рибелешк. Сонымен катар, деректер корыныц буркеннпк атынан (псевдоним) бастал, ецделген косымшаныц icke косылуына дешнп барлык кезевдердщ жасалауын карастырайык- Егер ci3 Delphi ортасында деректер корымен жумыс жасау ушш колданылатын косымшасымен ешкашан жумыс гстемесещз, ci3 алган тэж1рибе Delphi-дв мундай косымшаларыныц курастырылуын барынша ынгайландырылгандыгын тусшу!щзге кемектесед!. Бейнеленетш жатгыгуларды жасаудын тагы 6ip артыкшылыгы бар: Delphi-дв косымшалардын евделу куралдары туралы кейнирек окып отыра, ci3re енд1 таныс атаулар мен туышктерд1 кездеспреаз. Кез келген жуйеш куру ушш улкен жуйелерд1 жобалаудын непзп кезеццерше устану керек: 1) акпараттык аймак туралы мэлплет жинау; 2) акпараттык моделш жасау; 3) деректер корын баскару жуйесш тандау; 4) программалау; 5) ж асалган д ер ек тер коры н icke асы ру. Кез келген деректер корын эз1рлеу барысында, мынаны тусшш any керек: Деректер коры (ары карай ДЮ дербес жасалады, ал оны бас караты н жуйе жеке жасалады. Сонан кешн екуш 6 ipikxipn oip бутш багдарлама жасалады. Егер Delphi-де багдарлама жасайтын болсак, онда б1здщ багдарламаны жасаудын жалпы сызбасы келей турде болады: 1) Delphi-дщ Database Desktop неме MSAccess косымшасын колданып деректер базасын куруды карастырамыз (Ka3ipri жагдайда з

5 Database Desktop косымшасындагы Paradox деректер корын куру багдарламасы таццалады); 2) «Delphb-дв деректер корын баскару жуйе мен Paradox-те жасалган деректер корын байланыстыру ушга Delphi-мен 6ipre берйген BDE Administrator косымшасы колданылады, екеу арасындагы байланысты алиас (псевдоним - буркешшк ат) - деп атайды; МБ-мен жумыс жасау BDE Деректер коры 1-сурет - Деректер корыныц багдарламалык ортамен байланысы Деректер базасы (МБ) 1-mi деректер KecTeci 2-mi деректер кестес! Жазу1 Жазу2 ЖмуЗ 0 p ic 1 2-сурет - Eip кестел1 багдарламанын функционалды курылымы 3) «Delphiw-де «деректер кестес1» жзне «деректер коры угымдары 6ip-6ipiHeH айыркша болып келедг, 4

6 Кесте деп кестелж формага 61рыцгайлалган деректердщ жиынтыгын айтамыз. Кестеге мысал ретшде FoxPro жэне Dbase турл1 классикалык деректер коры бола алады. Деректер коры - ол курамындагы киггпк ep ict epi бойынша езара irnxi байланыстары уымдастырылган, 6ipH em e KecTeci бар жуйе. 4) Деректер корынын багдарламалауымен танысу ушш Dbase жэне FoxPro турл! кестелерщ колданамыз. ДК,-мен кез-келген жумысты «Delphi»-fle бастау ушш, BDE-жуйесш баптау керек. Бул ушш арнайы «BDE Administrator» багдарламасы кызмет етедь Кестен1 куру жэне оны бершгендермен толтыру ушщ, «Delphi» орнатылган комплеетчден «DataBase Desktop» багдарламасын колдануга болады. 5

7 1 «Койма» деректер коры н баскару жуйесш куру. «Койма» ДКБЖ алдын ала жобалап, менгершген теориялык деректерге суйенш жуйеш куру. Деректер корын эз1рлеу T3pTi6i: 1) автоматизация курылымы жэне оныц есебш тацдау; 2) ДКЖ куру жоспарынын жумысы. Автоматизация курылымы жане оныц есебт тандау. Кэсшорын койма шаруашылыгыныц есебш автоматтандыргысы келд! делж. Онда букш мумкш есептерден тек койма есебш тандаймыз. Сонымен катар, букш есеп урдосшен - материалдардын келу есеб'ш тандайык- Койма есебшщ мшездемес1 келесщей. Койма шаруасында материалдар eceoi айдьщ басынан басталады жэне келес! операциялар мен урдеетердей куралады: - еткен айдыц калдыктарды Keneci айга тасымалданады; - ай imihneri материалдардын келу ece6ih жургтзу жэне TipKey; - ай iuiinaeri материалдардын шыгынын есептеу жэне Tipxey; - ай сонындагы калдыктарды аныктау. Оку максатында, коймадагы материалдардын букш уршстер тобынан келу ece6ih тандайык. Есептщ сипаттамасы. Коймага ай сайын материалдар кел'ш тусед!, материалдардын тюшдемеш езгеру! мумкш. Осы материалдардын келу1кезендер бойынша етед1. Коймага келш тусетш материалдардын есебш жэне олар жайында деректерд1сактауын автоматтандыру керек. Осы ecenri шешудщ басты талаптары келесщей: -жуйе елшемшщ минималдыгы; -тез жумыс ictey максималдыгы; - оператор жумысына максималды ынгайлылыгы. Бул ecerrri автоматизациялау ушш жуйею курастыру кажет. Бул жуйе коймага келш тусетш материалдар жайлы деректер1мен жумыс жасайды. Сондыктан жуйенщ Typi деректер корыныц жуйеы болып табылады. Ол Деректер корымен (арыкарай ДК) жумыс жасайтын ДК жэне Деректер корын баскару жуйеа (арыкарай ДКБЖ) басты компоненттершен куралган. ДКЖ куру жоспарынын жумысы. ДКЖ куру технологиясына суйене отырып, келес! куру peti пайда болады: а) ДКЖ сэулетщ аныктау, сонымен катар онын курылу орт мен технологиясын; э) ДК куру;

8 б) д а в ж кд>у. ДК, жэне ДК Ж б1ркатар компонентгерден куралатынына байланысты, жуйеш багдарламалауды бастамастан, алдын ала болашак жуйешн непзп компонентгерш жэне олардыц багытталуын аныктау керек. Содан сон, эрб1р бел1м, ягни ДК жэне ДК^БЖ бойынша куралатын компоненттердщ кезектшпн аныктау керек. ДК ушш деректер корыныц функционалдау тшмдшгше кажегп санын жэне олардын курамын аныктау кажет. ДКБЖ уцпн пайдаланушыньщ ьщгайлы жумыс icteyi ушш канша экрандык форма жэне есептер болатынын аныктаймыз. Деректер корыньщ жуйесш куруынын дурыс жолы ДК курылуы содан соц, корды карап шыгу формаларыньщ багдарламалауы болып табылады. Сонымен, жуйенщ жобалануын (ягни жасалуын) ДК-ны курудан бастаймыз. Коймадагы материалдырды кабылдау, пркеу жэне сактау урдостершщ зерттелу1, материалдар мен урд1стер туралы деректерд1 eki озара байланыскан кестеде бейнелу! ынгайлы екенш кврсетедг Eip кестеде конма жумыс гстейтш материалдары туралы деректерд1 бейнелей\т. Бул агымды кезде коймада бар, немесе келш тусетш материалдар Ti3iMi (материалдар ассортимент!). Бул кестедеп ap6ip материал атауымен, взгеру б1рлшмен жэне багасымен белгшенедь Бул кестеш - «Материалдар» деп атаймыз, оньщ курылымы 1.1-кестесшде кврсетшген. Келей кестеде коймага келш тускен материалдардын деректер! сакталады. Бул кестедеп ap6ip материал атауымен, Kipic орде pi нвм1р1мен, бершген Kipic ордерг бойынша келш тусу мерз1м1мен жэне келш тусу мвлшер1мен белпленеда. Бериген кестеде влшем б1рлт мен багасы белгшенбейдь Ce6e6i бул деректер 6 ipihiui кестеде белгшенген болган. Бул кестеш материалдардын келш тусу кестей - «Материалдардын келут деп атаймыз, оньщ курылымы 1.2- кестейнде кврсетшген кесте - «Материалдар» Материал аты Материалдын елшем 6ipjiiri Материал багасы 1.2-кесте - «Материалдардын келуь> Kenin тускен Материал аты Келу мерз!м! Kenin тускен материалдын HOMipi материал Manuiepi 7

9 Коймага материалдардыц келш тусу жэне есебшта ypaic формализациясыныц бул нускасында, «Материалдар» кестей алгашкылык (баскарушы), ал «Материалдардыц келуь> xecreci - екшшшк (багынышты) функциясын аткарады. Материалдар жэне олардыц келш T ycyi туралы деректерге сэйкес кестелерге материалдардыц баска ерекшел1ктер туралы деректерд1 де ецпзуге болады. Мысалы, еюнин кестенщ курамына келш тускен материалдардыц багасьш енпзуге болады. Осы жетпей жаткан деректер кейш, кестедеп бар деректерден де косылуы мумкш екенш белплеп етешк. Осымен, оку максатында бул деректер курамы жеткшкть Eip материал ай немесе жыл агымында белшектеп келе 6epyi мумии. Сондыктан 6ipiraui кестенщ 6ip жолына ешнш! кестенщ б1рнеше жолдары сэйкес Kenyi мумкш. Осыган байланысты, физикалык моделвдй жобалау кез1нде осы кестелер арасындагы катынасын корсету керек. Жумысты орындаудыц Tapri6i: 1) ДК,-ньщ физикалык моделш жобалау (бейнелеу) Енд! ДК-ныц физикалык бейнелу нускасын немесе ДК-нын физикалык моделш карастырайык. Кестен1 шын бейнелеушен физикалык бейнелеуше кеиирген кезде курылымы инвариантты болып калады, ягни кесте курылымы езгеркхлз калады, 6ipaK шын кестенщ параметрлер! накты мэндерш алады, ягни усыныстыц физикалык децгешндегт интуициялык туснпкп KacneTTepi жэне кестенщ мшездемео. б1рмэдщ мэндер алады. 1.3-кесте - "Материалдар*1 Кесте жолынын тагайындауы Кесте epicihih конструкциясы Атауы Тур» Узындыгы Material Жол 20 Коймага келш тускен немесе Kenin тусетга материалдар аты енпзшедь Материалдьщ елпим 6ipniri Edizm Жол 10 Материал б1рлтнщ багасы Price Були сайды Шын кесте мен физикалык кесте арасындагы сзйкеспк б'фмэнд 1 болып келедк ДК, кестелерйнц курылымы мен параметрга жогарыда керсетшген кестелер мысалында бейнелейм^з.

10 Кестелер арасындагы байланыс «б1рдец-кепке», ягни «Материалдар» кестесшдеп 6ip материалына «Материалдьщ келуь> кестесшщ бфден кеп емес жазуы сэйкес келу1керек. 1.4-кесте - "Материалдьщ келуг1 Кестенщ тагайындауы Коймага келш тускен материалдьщ N_Prih H O M ip i Кесте epicihiu конструкциясы Атауы Typi зындыгы Автоинкремент Материал атауы Material Жол 20 Материалдын келш тусу мерз1м1 DatPrih Мерз)м Материал саны Kolvo Бутш сайды 2) Деректер корынын курылуы Д1( куру уш*н б а с т а п к ы т а п с ы р м а с ы. ДК ем кестеден куралган, олардын 6ipi кесте-шебер1, ал келеаы - бвлшек-кесте деп аталады. Олардыц арасындагы катынасы «б1рдщ - кепке». Осыдан ДК куруынын келеа жоспары шыгады. К^РУ технологиясынын тавдалуы. Delphi -д е багдарламалык жуйеш, соньщ 1ш1нде ДКЖ (ДК жэне ДКБЖ) ею нускада немесе тэртште орындауга болады: -консольдж тэртште, дэстурлж процедуралык багдарламалау стилшде; -RAD (Rapid Application Development - косымшаладры жылдам евдеу) тэрпбшде. Соцгы режим багдарламалык жуйелерд! евдеудщ интерактивт! T9pii6 i деп те аталады. Бул тэртштер кешрек туощдармеде Delphi-де жуйелердщ жасауынын технологияларына сэйкес келедь Б1здщ мысалымызда жуйеш 6 i3 RAD режимшде курамыз. ДК жасауынын жоспары. ДК жасаудьщ кeлeci (exi) кадамнан турады: ДК таркеущщ жэне сактапуынын (ягни ДК орнатылган сэулетшщ) орнын аныктау, ол ушш келесий орындау керек: - ДК орналасу орнын аныктау: езшщ компьютервдзде, баска компьютерде (немесе серверде); - ДК типш аныктау: Delphi yinih, стандартты (ягни DBASE, PARADOX, FoxPro); - ДК псевдонимш (немесе алиасты) аныктау; - ДК орналасу орнын жэне алиасты Tipxey. ДК кестесшщ курылымын курылымдау. 1-uii rypi ДК кестешебершщ курылымдауы: 9

11 - кесте тишн аныктау; - кестенщ физикалык моделш аныктау (курылым мен параметрлерд1жобалау); - йршпйлйс (баскарушы) кестенщ параметрш жэне белгшерш орнату: сурыптаудьщ 6ipiHniiniK индексш орнату; - курылган кестен1тандалган адрес бойынша сактау. ДК еюнпп кестесшщ курылымынын курылуы 6ipiH m ici сиякты болып келедь Тек сурыптаудьщ ейншщк индексп? орнату параметрлер1гана ерекшеленедь ДК кестелершй*, олардьщ арасындагы бутшдшк байланысын орнату жолымен, курылымдалуы. Курылган кестелерден ДК-нын курылымдалуы келей эрекеттерге суйенедк 1) екшк индексациялардын орындалуы; 2) курылган кестелер арасындагы «б1рден кепке» катынасын куру жолымен, бутшдшнс катынасын куру.,у Delphi-дв Деректер корын Т1ркеу. ДК аныктамасы. ДК бул кестелер арасындагы байланысты бейнелейтш файлдар: кестелер, индекстер жэне триггерлер жиынтыгы. ДК келесшерден куралады: ДК кестелер!, индекстер, ескертулер (мемо-жолдар) жэне т.с.с.. Б1р кестен1 сактау ушш, жеке файл курылады. Дэл сондай жеке файлдар кестелер индекстер! жэне мемо-жолдары ушш де курылады. Барлык осы файлдар 6ip жерде болуы жэне сакталуы керек, эйтпесе ДКБЖ кате icteyi мумкш. Сондыкган ДК барлык компоненттерш 6ipre сактаган жен. Осыдан, Delphi-дв ДК курылуы (немесе Delphi-мвн жумыс ictey) ДК орналастырылуы жэне сакталу орнын белгшеу керек. Ягни, ДК куру урдклнщ 6ipiHuii кадамы, болашак, курылатын ДК турган орнын аныктау болып табылады. ДК туратын орнын беру. Жалпы жагдайда, ДК белгш 6ip компьютерде, тасымалдаушыда жэне директорияда орналасуы мумкш. Оныц ретшде: пайдаланушыныц автономды компьютер!, жел1 cepeepi немесе кез-келген баска компыотерлпс желш болуы мумюн. Егер ДК ДКБЖ орнапаскан компьютерде орналасса, онда осындай ДК жерплпсп деп атайды. Оны ДК KOMnoHeHTTepi ушш, директорияны белплеу (немесе бума куру жолымен) жолымен ierey мумюн. Деректер коры скталатын буманы ез компьютер1н13де, серверде жасау га болады: ю

12 1) C:\Primer; 2) C:\SYSTEMA\STUDENT\...\Primer. ДК-гы псевдониму иемдену. ДК компоненттср жиынтыгыыан куралгаиы белпленген болган. Сондыктан олар орта к атауга ие болу керек. ДКБЖ технологиясында ДК атауы ретшде оган псевдонимд! (немесе оны баскаша: алиас, alias деп атайды) иемдену кабылдангаи, сонда утилиттсрден жэне ДКБЖ багдарламаларыньщ ДК-га euyi онын псевдоним! аркылы жузеге асады. Белгшенгенге байланысты, BDE Administrator утилитасында Delphi - ДК псевдоним! тчркелген - ДК*га адрес! (жол) керсетшген болуы керек. Delphi-де ДК кдоылуы немесе Delphi-мен жумыс icteyi орыналасу жэне сакталу орныньщ белгшеушен басталады. ДК курылу урд1с1н1н 6ipimui кадамы. ДК этркелуь Delphi-дсп пркелу онын BDE Administrator утилиты (немесе модуль) аркылы жузеге асады. Сондыктан б!здщ"с:\рrimer" ДК лркеу ушш, BDE Administrator-ды icxe косу керек. BDE Administrator утилитш!ч 1ске косылуы 2 тэсшдщ 6 ipiweh жузеге асырылады: 1) Windows жумыс устелшен: (Пуск/Программы/Borland Delphi 3/BDE Administrator). Бершген жагдайда мэз1р жэне iiihci мэз!рд1 ашудын тьбеп келпрмген; 2) алдымен, экранга IDE бейнелейтш Delphi басты модул! косылады Косылган Delphi-ащ IDE курылымы 1.1-суретте керсетшген. IDE-HiH ен жогаргы катарында Delphi басты M33ipi бар. Онда DateBase мэз1рш ашамыз да, ондагы Exproler жарлыгын тандаймыз. Осы жарлык аркылы BDE Administrator утилитз icxe косылады. BDE Administrator утилитшщ icxe коскан сон, онда келеа эрекетгер орындалады. Басты мэз1рде Object\New элементж тандаймыз. Пайда болган терезеде (1.1-сурет) курылып жаткан кор тишн e3repicci3 (STANDARD) деп калдьфамыз жэне ОК батырмасын шертем!з. [N e w D ata base Alias 1.1-сурет - Деректер корынын драйвер ти тн таадау терезеа п

13 П айда болган ДК BDE администратордын тер езесш щ сол жагында 6 b STANDARD1 атауы бар жолды керем1з. Осы атауды "PRIMER"-те ауы сты рам ы з. Он жак терезесшде ДК параметрлер1 керсетш ген. Оларды езгертумз калдырамыз, тек кана PATH жолын езгертеш з. Бул параметр ДК орналаскан каталогтын жолын керсетедь Жолды колымен едпзу ге болады, 6ipaK администратор куралдарын пайдаланганы ж ен: ол ушш PATH жолындагы bj батырмасына ш ертш, C:\PR1MER каталогын тандап, ОК батырмасын шерту керек (1.2-сурет). [ j : B D E A d m i n i s t r a t o r C :\ P r o g r a m F.ile s \ B o r la n d \ C o m n n o n F i l... Н 3 a b j e c t E d H - y i e w O i t l o f t e r, H e l p :.. ш x j Al Database Aliases.] Definition of STANDARD1 ; ba»abe*et CiiKfSgiSiiSon, D i M f t i f 1 "в* Excel Files 7? FoxPro Files IBIOCAL В- *o MS Access 97 Database i g- «-ДЩЩЩ в?e s y s. t r il Type DEFAULT DRIVER ENABLE BCD PATH STANDARD PARADOX FALSE U I Database Location 1.2-сурет - Деректер корынын псевдоним парам етрлершщ терезеа Енд! псевдоним аныктамасын еске сактау керек. Ол ушш ДК администраторыныц сол жак терезеанде псевдоним атауында тышканнын он жак батырмасын шертш, пайда болган т!з1мнен Apply элементш тандау. Пайда болган сухбаттык, 6i3 езгертулерд1 сактаймыз ба деп суралатын, терезеде ОК батырмасын шетру керек. Содан сон BDE Administrator утилитшен шыгу керек. Осымен псевдоним курылуы аякталды, енд! оган баска утилиттер мен косымшалардан Kipyre болады. EipaK псевдоним катынайтын каталог ani бос. Деректер корынын кестелерш жасау керек. Деректер корынын кестелерш куру ДК курылуын келеа жолмен бейнелешк. Концептуалдык жобага байланысты деректер коры 2 езара байланыскан кестелерден куралган. Сонымен катар, 6ipiHiui кесте басты болып табылады. Сондыктан ДК келеа т1збекпен курамыз: 1-uii жэне 2-кестелердщ курылымын куру; кестелер арасындагы байланысты орнату. 12

14 Кестеш курылымдау. Деректер корыныц кестелерш куру ушш, Database Desktop (DBD) (Пуск/Программы/Borland Delphi 3/Database Desktop) утилитасын icx e косу керек. Жумыс псевдонимш орнату ушш, басты мэз1рдщ элементщ File\ Working Directory тавдап, пайда болатын Aliases Ti3iMiHeH псевдоним атын PRIMER тавдау, содан сон ОК батырмасын шерту керек. ДК кетесщ куру ушш, басты мэз;рдщ элементш File New TabIe тандап пайда болган Create Table терезес5нде курылатын кестенщ тишн (Paradox 7) 6 3 rep icci3 калдырамыз да ОК батырмасын шертем13. Осыдан кешц, ДК кестесщщ курылымын аныктау терезеа пайда болады (1.3-сурет). 1.3-сурет - Database Desktop утилитасы: курылымын аныктау терезеа. ДК KecTeciHiu Кестенщ a p 6 ip жолы ерютерге сэйкес келедк Багандар тагайындалуы: - Fields Name, e p ic аты; - Type, e p ic тига; - Size, e p ic влш ем 1 (ж о л д ы к epict epi у ш ш, c e 6 e 6 i б а ск а e p ic ie p e p ic тишмен аны кталаты н елшемда тусш д1ред1); - Key, егер e p ic бцйншшк кшт курамына KipeTiH болса «*» жулдызшадан куралады. Егер 6ipimamiK кштке б1рнеще e p ic юретш болса, онда олар бгршшшк кштте болган габекпен аныкталады. Сонымен катар, б1ршшшк индекстш курамына KipeTiH барлык opict ep баска epict ep алдында аныкталуы керек, ягни e p ic r e p тымшщ устшде болуы керек. 13

15 «Материалдар» кестесше KipeTiH epicrepfli аныктайык. Field Name баганына Material енпзеййс. врютщ тишн аныктау ушш, Туре баганында шертонз де, бос орын пернесш шертщдз. Осыган жауап peтiндe epicrep ти тнщ Ti3iMi шыгады, олардын шйнен кажетп тишн тавдау керек (1.4-сурет). в*"*'!?ййг ^. " У ЩУПЙ1ййюаий т ш Ш Я К 'В Г ' ш 1.4-сурет - Gpic тишн тандау Material epicihin тишн аныктау уннн> Alpha-ны тандап, Size баганында 20 мэнш белплейм1з. Key баганында жулдьпшьтны орналастырамыз, ол epictin деректерд 6 ipihminik кштке ёнепнш белгшейдь Ол уши* пернетакгадагы кез-келген символды басамыз. Кез-келген символды ешшщ рет бассаныз, Key баганындагы жулдызша алынып тасталады. 1.5-кесте - Типтердщ сипаттамалары 9pic тит Benrici Сакталатын мэндер Alpha A 255 символга дейшп символдык мэндер. Number N диапазонындагы жылжымалы упрмен сандык мэндер. Дэлдш 15 perri сандарга дейш. Money $ Number Тйпше ужёас, 6ipaK акшальщ соммаларды сактауга арналган. УтЗрден кёйщп белплер саны ескер1лмейд1, - мэнд! керсеткен кезде акшалык б1рлйспн танбасы шыгарылады. Short S диапазонындагы бугшсанды мэндер. Longlnteger I диапазонындагы бутшсанды мэндер. I 14

16 1.5-кесте - Жалгасы BCD # Садык мэндер, сонымен катар екмпк-ондык форматындагы белшекть сан дар. Белшектж белжтеп улкен санды белгшермен жумыс кезшде долджл камтамасыздандырады. Дэлдж мацызды есептеулерде (каржылык, гылыми косым шалар) колданылалы. Есептеулерд1 журпзуге, баска сандык epictepre Караганда кеп уакыт кажет етедь Date D Мерз1м мэш (б.з.д ден дейш). Time T Уакыт мэш. Mep3iM жэне уакыт мэш. Memo M зьшдыгы 255 символдан асатын жолдык мэндер. Максималды узындыгы шектелмеген. 1-ден 240 символга дешн ДК кестеамен 6ipre сакталына алады; калганы Memo-файл (кенейтшу$.mb) TYpiндe сактапады. Formatted Memo Graphic Fields F G мемо-epicihe уксас, 6ipaK форматталган мэтшд^ мэтш фрагменттер! эртурл1 каршпен, туспен, стильмен бейнеленген мэпндерд1 сактай алады. Сактау кез1нде ВМР.форматына езгерт1петш BMP,.PCX,.T1F,.GIF,.EPS, файл форматындагы графикалык суреттер. Олар ДК непзп KecreciHeH белек сакталады. OLE 0 Microsoft фирмасынын OLE (Object Linking and Embedding) технологиясын колдайтын форматтар туралы акпарат. Logical L Логикалык мэндер ("True", "False"). Эрштер бшктш ескершмейдь Autoincrem ent ± Автоинкременгпк epic. Мэндердй тек оку ушш руксаты бар. Эдетте юлтпк epic бipiншiлiк кшттщ курамында болады. Жаца жазбаны коскан кезде, epic мэш автоматты турде есептелед!, бул 6ip кестеде бipдeй жазба болмауы унин. Баска жазуларда epic мэн! кайталаньш колданбайды. Binary В Кез келген екшк мэн. Пайдаланушыныц косым шал ары мен тусиедрш беру кажет. DBD осы жолдардыц мэндерш тусшд1рш бермейдь Heri3ri кетеден белек.mb -файлдарда сакталады. Узындыгы аныкталмаган. Bytes Y Узындыгы 1-ден 240 байтка дешнп пайдаланушы косымшаларымен тус$щцршетш, кез келген екшк мэндер. ДК кестесшен 6 ipre сакталады. Кесте б1ршшшк кшт аркылы индекстеледь Materialy кестесшщ баска да багандарыньщ аныкгамасын ецпзешк (1.5-сурет). 15

17 Restructure Paradox 5.0 (or Windows I able: Material.db field rotten J ' '. /FieldMme -T lltypaj. Sirt, ik»7, 2 djzhi: - ~: > %?, 3 (Z e n a ' ft Щ - Ш Ш Шт * " * T able goperber. jvebsty Check* Ч'ЧЯЙ P Ю Minimum value: J. Maximum value: ~ сурет - Material кестес1н1н курылымын аныктау Есептщ шарты бойынша барлык ep ict ep толтырылуы керек. Сондыктан s p 6 ip e p ic у '11 мшдетп толтырылу талаптарын аныктаймыз. Ол ушш, epicrreh e p ic x e ету кезшде Required Field ауыстырып коекыштарды icke косамыз. Баска e p ic r e p, e p ic мэнше шектеулер кою ушш кызмет етедк - Minimum value, epictitt минималды м энш аныктайды. - Maximum value, вргстщ максималды мэнм аныктайды. - Default value, вздктен анъщтапады. - Picture, e p ic бейнесшщ шаблонын аныктайды. Шаблонды куру у ш ш Assist батырмасын шерту керек. б р ю т е р д щ 6 ip in n e м э н н щ жокгыгы, e p ic м э н щ д е п шектеулершщ жокхыктын б к д а р ёда. Кестелерд1 толтыру жэне еске сактау. Кесте курылымын курылымдаган кешн, Database Desktop-да кестеш толтыруга болады. KecTeHiH орыс, казак алфавиттершде толтырылуы сэтта болмау м ум кш, онда кестелерда латын apiirrepimeh толтьфганы жен. Сакталган кестеш дискще сактау ym ih, Save As батырмасына б асу керек. Содан сон пайда болган терезеде Кесягеюц атын белплеу керек ( 1.6-сурет). Куры л атын кестешч (Materialy) атын аныктамастан бурын, С SPRIMER каталогында (6i3 колданатын PRIMER псевдонимше, жумыс п севд о н и м! ретжде белшенген) Materialy.DB файлы курылады жэне сэйкес кенейтулер! бар индекстер1де курьшады. (6

18 S a v e T a b le As щ ш яш ш ят ш т ат ш!* i n w n r n z у; С^ииип» ff ёэрпггис V И м я Ф а й л а : ф а й л е j P a i a d o x f d b j 1.6-сурет -Кестенщ сактапу терезеа Курылган кестен1 кайта курылымдау. Егер ДК-нын бар кестенщ курылымын езгерту керек болса, онда File Open Table мэз1р элементш тацдау керек. Пайда болган сухбаттык терезеде кестенщ атын тацдап, ОК батырмасын шерту. Кестенщ курамы кврсетшед1 (1.7-суретте Materialy кестесшде жазбалар жок, ce6e6i 6 i3 оларды эл1 ецлзген жокпыз). Егер кесте жазбапарын б1рден DBD- да ецпзпм^з (сонымен катар, кейб1р жазбаларда мэндерд! езгерту немесе жою) келсе, онда F9 батырмасын шерту керек. Осыдан кешн, кесте езгертулерд1 енпзу режим! не кешедь Кесте курылымын езгерту ушш, Table\Restructure мэз1р элементш тавдау керек. Содан сон, кесте курылымын аныктауга ар налган сухбаттык терезе пайда болады. Белшек-кестешц курылымдалуы. Екшнн кестенщ «Материалдардыц келш T ycyi» курылымын аныктаймыз (1.8-сурет), ол белшек-кесте болып табылады. Осы кестеш курылымдау тэсш 6ipiHiiiiciHe б1ршама сай келедй EipaK келес1 ерекшелжтершен баска. NJPrih epicih eh баска, c e 6 e 6 i ол e p ic автоинкременгп болып келеда, барлык e p ict e p r e, Required (оны ДК-да сактау кезшдеп мэндердщ мшдегп турде бершу талабы) атрибутын белплейм!3. «Келу мерздмь), «Материал» epicrepi бойынша индекстерд1 курам ыз. Ол ушш Table Properties комбинзщпншнан. индексте (терезешц жогаргы оц жагында) Setondary Itidexes здементж тандаймыз. Содан сон, сухбаттык терезе 1.^Ур' Н'е 'бвйиеленген I С. Бейсемг* I I атындагы

19 тур ге ие болады. fi Database Desktop Elle Edit View ТдЫс: ficcord Io o ls Mflndow Help 1.7-сурет - Materialy кестесшщ жазбалар енпзшмеген калпы. C r e a t e P a r a d o x У T a b l e : U n t i t le d jtieid (Oita? ТаЫе fitopertie*: v:fifias.r : г~ -ta>a' j.и.» сурет - Prihod кестесшщ курылымы 18

20 Crratc* P arado x / Tattle: I Unfilled CMMar f W d N»npt у >... 1 ш js ip Ш w m N_Pph jjcj Material> «> * * 1! ' Л Bjj B fy з Щ З r> 4 Kojvo ; J.,; j S l c o r x k y indexes р Щ Щ f Щ ) f M W I S S e w. (& Cancel 1 Help I» * * -» '! '''. М Ы Е Ь М ' 1..1^ J 1.9-сурет - Secondary Indexes-Ti терезе Жана индекст! аныктау ушш, Define пернесш шерту керек. Пайда болган сухбаттык терезеде Fields ерюшде б1збен аныкталатын кестенщ e p ic r e p raim i болады. Index Fields e p ic i курылып жаткан индекс курамына KipeTiH epict epfli сактау ушш арналган. Fields Ti3iMiHeH Index Fields Ti3iMiHe накты жолды K euiipy ушш, он багыты бейнеленген батырманы шерту керек. Ti3iMre косылу T i36eri манызды, ол лз1мде орналасы ретш аныктайды. Керек жолдарды Index Fields Т1з1мше x ip iciip reh кешн (1.10-сурет), ОК батырмасын шертем1з. DeteRr.n KoTvo т т т ш т т щ DeJ*l=rb :... Д' СЬ*п М». - j! j * V option» - * -.Г', -' J- "-v: - '- - I- Motqu* СтшФЩФпв&Ы* u......! I olc I I H«lp I 1.10-сурет - Индекс курамына KipeTiH жолдардын аныкталуы. Пайда болган терезеде индекс аты суралынады (1.11 -сурет). Атауды енпзш, ОК батырмасын шерту керек. 19

21 jfidtehiaaie: t Sott_DataPrih_Mete4 Ok,,~~1. * ttn e Ы I!-1 Hefe сурет - Индекстщ сакгалу терезес! Индекс атауын тек жолдыц атымен гана атауга усынылмайды, ce6e6i ондай тэсш кестелер арасында тутастылыктын сштемесш курган кезде автоматты турде колданылады суретте керсетшгендей, жана индексп косканнан кейш, онын аты индектер т1з1м1нде пайда болады. Кейш, индекс атынан шертга оны жоя (Erase батырмасын немесе озгерте (Modify батырмасы) аламыз. Курылган кестеш Prihod атымен сактаймыз. щ "у" т ---. ; Е Ш Ш Ъ : -?я : 1 S «&&*... - Cancel Halp 1.12-сурет - Prihod KecTeci ушш аныкталган индекстер Ti3iMi Деректер к о р ы н к у р ы л ы м д а у. «Материалдар» жэне «Материалдардьщ кел}уь> кестелер} «б!рдщ кепке» байланысында, ягни Materialy кестеспнч 6ip жазуымен Prihod кестесшщ 6ipHeuie 20

22 жазулары байланыса алады. Байланыс epici негынде ек! кестеде де бар Material жазуы болады. Бершген кестелер арасындагы ' с]лтемелпс тутастыгын аныктаймыз. Paradox-шгы сштемелйс тутастык, бдмщдщён, кестелер арасындагы байланысты, ал екшипден, каскадты катынасты аныктайды. Prihod кестес1н (мэздр элемент! File Table \ Open) ашамыз жэне кесте курылымын езгерту режимше KipeM i3 (Table Restructure). Пайда болган Table Properties тшмшен Refrential Integrity элементш тандап, Define батырмасан шертем1з. Пайда болган субатгык терезеде (1.13-сурет), Fields тшмщде Prihod кестесшщ жолдары керсетшген, ал Tables т1з!мшде - PRIMER деректер корынын кестелер! сурет - Сштемелш тутастылыкты куртын терезе Fields тым!нен Material жолын тандаймыз да, он жакка багытталган бейнеа бар батырманы шертем1з. Material атауы Child Fields (багынышты кестенщ сырткы ки тн щ жолы) жолына жазылады. Tables Т1зшшей Materialy кестесш тандаймыз да, сол жакка багытталган бейнеа бар батырманы шертем1з. Parents Key (кестенщ аналык к и т ) жолында Materialy кестёсийц б1ршшшк юлттщ opictepi керсетшедй Б1зд1н жагдайымызда, бул Material epici. Update rules ажыратып коскыштары Materialy кестесшдеп байланыскан жолдар немесе Materialy кестесшдеп жазбаларды жою кезшде, Prihod кестёещщ каскадты катынасын аныктайды: 21

23 - Cascade, Prihod кестесшдеп багынышты жазбалардын каскадты езгертшу1 жэне жойылуы; - Prohibit, Егер бершген жазбага Prihod кестесшде байланыскан жазбалар бар болса, Materialy кестесшдеп жазбаларды жоюга немесе багынышты жазбаларды жоюга жэне езгертуге тиым салады. Cascade тандаймыз (1.14-сурет) жэне ОК батырмасын шертемп. Аты с у р а н ы л а д ы Paradox-та с ш т е м е л 1К тутастылык аталады. Атауды ен п зем 1 з, м ы сал ы Materialy^Prihod Integrity, ОК батырмасын шертем13. Enai с ш т е м е л ж т у т а с т ы лыктын аты т1з!мге е н п з ш е д ь Prihod кестесшдеп езгертулерд1 еске сактаймыз (Saw батырмасы) жэне Prihod кестесшш курылымын езгерту режимше (Table j Restructure) кайта ирем в. Пайда болган Table properties т1з1мшен Secondary Indexes (б1ршшшк киггп аныктау ушш курылган индекстершен баска кестенщ индекстер!) элементен тандаймыз. Индекстер т1з1мшен жана Material (Material epici бойынша) атауы бар индекс пайда болганын керем1з. Бул индекс автоматты гурде курылган, сырткы кштанщ накты емес аныкталуымен алтемелж тутастылыктын курылуы кезшде (1.15-сурет). Referential Integrity icws. еишд E 2ff Kot vo [?J ±1 I*Update lute t* Cascade f Prohibit F Sinci referential integrity OK Cancel Help 1.14-сурет - Сштемелнс тутастылыктын шарттарын аныктау

24 1.15-сурет - Prihod кестесжж сытемелш тутастылыкты курганнан кейжп индекстер Tijiisii Осымен, ДК куру УРД*С1 аякталды, сондыктан кайта курылымдау режимжен жэне DBD-дан шыгуга болады. Осындан кей1н курылган кестелсрмен жумыс icrey упнн, каралайым косымшаны курылымдаумен айналысамыз. DELPHI-де ДКБЖ курылуы. ДКБЖ экрандык жэне есеп формаларынын жэне ДК-f* енпзшетж жэне ДК-дан шыгарылатын деректерд! ендеу процедурапары жиынгыгынан куралады. Windows ДКБЖ орт ас ында ДКЖ багдарламалау ы н косы мша деп атайды. Осымен, жогарыда бейнеленген «пайдаланушы - жуйе» жуйешн жумыс сулбасынан жуйенш жумыс ict eyi ушж, келеы формалар керек: Мэпрге ар налган форма; - Корга деректерд1 енпзуге арналган форма; - ДК карал шыгуга арналган форма; - 1 есеп кс арналган форма; - 2 есепке арналган форма; - 3 есепке арналган форма. Жогарыда ДКЖ бейнелеушщ сырткы формасы керсет1лген. ДКЖ жумыстылыгын камтамасыз ету ymih, формалар мен ДК арасында байланысты орнату керек: экрандык формадан ДК деректердщ екделуг Ол келеи пункттерде жасалынады. Delphi-де ДКБЖ-мен ДК формаларын байланыстырылуы аныкталганвизуалды емес компоненттер аркылы жузеге асырылады. Сондыктан экрандык форма мен ДК арасындагы байланыс орнату 23

25 ушш, арнайы визуалды емес компонент (контейнер) TDataModule колданылады. Олар жеке курылуы керек. Б1зд1н есеб!м1зге кажетп формалардын т!з!мш курамыз: - Мэз1рге арналган форма; - Корга деректерд1енпзуге арналган форма; - ДК карап шыгу формасы; - 1 есепке арналган форма; - 2 есепке арналган форма; - 3 есепке арналган форма; - TDataModule комоненть Компоненттер мен формалардын орналасуы келесщей болады: 1) TDataModule компонент!; 2) Мэз1рге арналган форма; 3) ДК арналган форма; 4) Корга деректерд1 енпзу формасы; 5) 1 есепке арналган форма; 6) 2 есепке арналган форма; 7) 3 есепке арналган форма. ДКБЖ куруга кажегп формаларды ей тэсшмен куруга болады: 1) Егер олардын саны алдын-ала белгш болса, онда монитор экранында жзне IDE Delphi жоба коймасында (repository) кажетп визуалды жэне визуалды емес формалар санын алдын-ала енпзуге болады, ягни жобага канша форма кажет болса, сонша косуга болады. File\New Form жарлыгы кемепмен визуалды формалар, ал File\New Data Module жарлыгы аркылы визуалды емес формалар косылады. Б1здщ жуйе ушш, барлыгы алты визуалды форма жэне 6ip TDataModule компонента кажет болады; 2) егер формалар саны алдын-ала белпыз болса, онда монитор экранында жэне сэйкесшше, IDE Delphi жоба корында (repository) жоба ушш кажегп форма агамды ДКБЖ куруында курылуы мумкш. Экранда формаларды орнату File\New Form немесе File\New Data Module жарлыкгары аркылы жузеге асады. Баскаша айтканда, жобага ap6ip форма кажеттшш бойынша койылады. Б1зд1н жагдайда жоба корына жана формаларды косу, косу жарлыкгары (File\Add to Project) аркылы жузеге асады. Алдымен, экранга кажегп формалар саны шыгарылды деп есептешк. Егер формалар жетпесе, оларды кажетп санына жетк' зем13. Ол (File\New Form) эрекетшщ кайталуы аркылы жасалынады. Мундай эрекет канша форма кажет болса, сонша рет жасалынады жэне File\New Data Module жарлыгы аркылы 6ip контейнер курылады. 24

26 Ещц формалардьщ курылымдалу ретш аныктайык- Формаларды куру рет1 жалпы еркга турде болып келедц 6 ipak 613 жогарыда керсеплген perri тандаймыз. Бершген формаларды бейнелеу жэне куру peti ДКБЖ куру урд!сш женшдетедь ДКБЖ куруын ДК байланысы ушш, TDataModule контейнершщ курылуынан бастаймыз. ДКБЖ формаларын жобалауын экрандык ДК курамы бейнелетш формадан бастаймыз. ДКБЖ жобалануы эр формада жекелеп ДК байланыс жасау жолымен жэне ДК алынатын немесе экрандык формага Шййлетчн деректерд1ендеу процедуралардыц курылуы аркылы жасалынады. Сонымен катар, эр форма компоненттер1 арасында байланысты орнату керек. Экрандык формалардьщ (нреушде жумысты аякггау жарлыгын ескерген жен. Компоненттердд аныктап алып, олардьщ формада орналастыруын беюткен сон, олардьщ ДК-га руксаты орнатылады жэне эрб!р форма компонент} уш>н деректерд1 ендеу процедурасы курылады. Жогарыда кел-пршген аныктамадан, ДКБЖ ДК сиякты кептеген компоненттерден куралатынын керем1з. Бул барлык ДКБЖ компоненттер!н курылымдауды жэне багдарламапауды талап етеди Сондыктан оларды ДК сиякты белгш 6ip орында сактау керек. Осы макратпен, C:\PRIMER каталогында АРР бумасын курам ыз. Бунда 6 i3 курылымдалган косымшаларды сактаймыз. Жалпы жагдайда, косымшаларды кездейсок жерде сактауга болады, 6ipaK ДК-мен 6ip бумада сакталуы курылымдаушыга ынгайлы жумыс icteyre кемектеседк ДКБЖ курылуы. TDataModule контейнершщ курылуы. Экрандык форма мен ДК байланысы визуалды емес компоненттер деп аталатын арнайы компоненттермен камтамасыз ёталедг. Бул элементтер курылымдау режимшде гана кершедь ал жуйен'щ жумыс (степ жаткан режимшде экранда кершбейдк Егер ДКБЖ 6 ip экрандык формадан курапса, онда визуалды емес компоненттерд1 сактауга арналган контейнер туршдеп арнайы койма керек емес. Ондай жагдайда, визуалды емес компоненттерд1 экрандык формада орнапастыруга болады. Экрандык формалар кеп болган жагдайда, жэне олардьщ эркайсысы ДК-fa катынау жасауы керек болса, катынау келеа турде жузеге асады: Барлык экрандык жэне еееяпнк форма ДК ушш катынау (байланыс) керек. Егер ДКБЖ б!рнеше -формадан куралган болса, олардьщ ДК-га катынасы ею тэсщмен жасалады: 25

27 1) ДК-Fa sp6ip форманын (жэне пныи компонентгерше) катынауын баска формаларга тэуелсь, автономды турде жасауга болады; 2) екшип тэсш бойынша, ДК-га ap6ip форманын катынау жасауды кайталамауды усынады, ал барлык экрандык жэне есептак форма ушш арнайы TDataModule типта компонент аркылы б1рынгай руксаттаманы уйымдастыру. TDataModule тиш компонент ез кезепнде ДК-га катынау жасау ушш арналган TTable, TQuery, DataSource визуалды емес компоненттерд1 Kipicripyre болатын контейнерд1 бейнелейдк Онда ДК-га руксаты кажета формалар TdataModule компонента аркылы руксаттаманы алады. Сонымен, ДКБЖ-мен жумыс жасау ушш, TdataModule типта компонента куру керек. Delphi ортасындагы TdataModule экземплярынын жасалуы File\New Data Module M93ip пункта аркылы жузеге асырылады. TDataModule комонента деректер корымен жумыс жасау унин, компоненттер контейнер! болып мггейдь Delphi компоненттер! палитрасында Data Access парагында тышканмен визуалды емес ТТаЫе (1.16-сурет) компонентанен шертш, содан сон тышканмен контейнерде шертем1з. Осыдан кейш, компонент бейнеа контейнерде калады. да Delphi 3 - Project! Е Н е Edit S earch yiew Project fiun Component D atabase Iooltt W orkgroups Help eftmi «Standard1Adcfcoo«f Wn32 System] Interne* Dele Access j Data Controls Dedren Cube C^eoort j Diak_ii 1.16-сурет - Delphi компоненттерщщ палитрасы TTable (баска да компоненттерд1, мысалы TQuery, TDataSource) визуалды емес болып аталады, ce6e6i деректерд! сактау жэне деректерге катынау ушш, ал компоненттердщ визализациялануы ушщ емес, ол максаттар уш!н, визуалды компоненттер (TDBGrid, TEdit жэне баскалар) колданылады. Bi3 ТТаЫе компонентан орналастырып болган сон, онын касйетш орнатамыз. Бул максат ymih, 6i3 формадан сол жакта орналаскан объектьчер инспекторын (Object Inspector) колданамыз. Егер ол кершбесе, оны F11 пернесш шерту аркылы шакыруга болады. Объектшер инспекторы тышкан аркылы ерекшеленген компонентан касйетш орнатуга мумюндис бередь Ttable компонентан тышкан кемепмен ерекшеп аламыз. DatabaseName (ДК псевдоним!) мэншщ касиет!н пайда болган! 26

28 т1з!мнен немесе вздтмен Tepin PRIMER -ге орнатамыз. TableName мэщнщ касиетш (ДК кестесшщ аты) Materialy.DB орнатамыз, ол пайда болган Ti3iM аркылы тандалады. Active мэншр касиетш True кыламыз. Осыдан кёщн, ТТаЫе (ездшмен, Ttablel аты на ие) компонентшщ Materialy.DB кестеймен байланысы басталады. ТТаЫе жэне TQuery компоненттер! жинакталган деректёрд! сактау уинн кызмет етедк Жинакталган деректердщ угымы ДК KecTeciHiH тусш!гшен б1ршама кен болып келед1. Ce6e6 i жинакталган деректер курамына: - ДК-нын кептеген жазбалары немесе жолдары xipyi мумюн (ТТаЫе, Tquery компоненттер^; - ДК-нын б1рнеше кёстейернен курылган жазбалар (Tquery компонент!). DataModule контейнершде TDataSource компонентен орналастырамыз. Ол визуалды жэне визуалды емес компоненттер (в данном случае Tablel) арасындагы байланыстарытын звено ретшде кызмет етеда. Сондыктан TDataSource компоненттер! н деректер K03i деп жш атайды. TDataSource компонентшщ DataSet касиетш пайда болган тшм аркылы Tablel-ге орнатамыз. TDataModule-ai кез-келген 6ip атпен (езд1пмен ол UnitS.pas) атаймыз. TdataModuie бейнеленген Unit модул шщ аты осы TdataModule-де орналаскан, ДК'Да жэне TDataSource-ne колданылатын баска формалардьщ барлык Unit модулihin MdTiHiHe косылады. Ол Delphi ортасыныц бас мэз^ршде File\Use Unit элементшде журпзшедь Ары карай деректер топтамасынын деректер!мен жумыс ктейтш визуалды компоненттер datasource касиетшде сэйкес TDataModule -ден TDataSource компоненттщ атын к у Р а У керек. Сонымен катар, аты курама болып келедк алдымен TdataModule компонент1н!н аты, содан сон нукте аркылы - TDataSource компонентшщ аты, мысалы TdataModule. TdataSource. Экрандык формалардьщ курылуы, олардын ДК-на катынау жасалуы жэне деректерд! вндеуд! уйымдастыру (карапайым нускасы) жэне ДКБЖ Masipi ушш, экрандык форма курастыру. 1 формага (View\Forms мэз!р элемент!) кешешк, сухбаттык терезеден Form] тандап, ОК батырмасын шертемаз. Формада Standard паракшасындагы MainMenu компоненты орналастырамыз. Содан сон, мэйрда ендеу куралын шарыкамыз (оны ею тасшмеи жасауга болады): I 1 формасынын imitjae MainMenu компоненты ею рет шерту; I формадагы компонентт'щ ерекшеленген кезыде Object 27

29 Inspector терезесше кешем1з. Items касиетш шертш, J батырмасын шертем!з. Form 1.MainMenul (бул MainMenul компонентен орналастырганнан кешн, атау ездшмен шыгады) мэярдщ конструкторында турып, мэз1р пунктгерше (Object Inspector-aen Caption касиеп) атауларды берем1з «Файл/Ввод/Просмотр/Отчет/ Выход». Келес! денгейге ету yuiih <Enter> пернесш шертем1з. Мэз1р пункттер1н1н жеке топтарга визуалды белу ушш, Отчет -тан кейш, б!рнеше минус (-) танбаларын колданамыз, онын атуын коюга мшдетп емес. «Ввод» мэзф пункт! ушш, «Название материапа/поступление материала» мэз!раетын курамыз. Ол ушш оны шертш, тышканньщ он жак батырмасын шертем13, пайда болган терезеден Create Submenu пунктш тандаймыз. Енд1, M33ip курылып болган сон, ap6ip пунктпен мэз1р кодын байланыстыруга болады, ол бершген пунктп тандан сон эрекет етедь Осы жагдайдын ендеу процедурасын - OnClick куру ушш, мэз1р I конструкторында орналасып, мэз!р пущййнде тышканмен ек! рет щертещз. Пайда болган код Тузетупйсд терезесшде OnClick окигаларды ендеу процедурасын кодты жазамыз, ол осы пункт тандалган кезде эрекет етед!. Дэл осындай нэтижеге процедуранын енделу атында тышканмен шерту кемепмен жетуге болады, ол Object Inspector терезесшщ Events парагында орналаскан. Мысалы, Просмотр пунктше келес! кодты енпзетш: Forml. Visible := False; Form3. Visible := True; Поступление материала мэз!р элемент!: Forml. V isiblef alse; Form2. Visible := True; Выход M33ip элемент!: Close; File\Save Project As мэз1р элемент!н тандап, жобаны сакгаймыз. Алдымен, жоба формасынын аты суранылады (б1зде бес форма, олардьщ аттары Forml... Form4, DataModuleS). Формаларды 'Unit*.pas' аттарымен сакгаймыз. Содан сон, жоба аты суранылады. Жобаны 'appl.dpr' атымен сакгаймыз. 1 форманын unit модушнщ мэтшще модульдердщ аттарын Unit2 жэне Unit3 косамыз. Осыдан кешн, косымшаны орындаймыз. (Delphi ортасынан ] шыкпай-ак косымшаны icke косу уш!н, F9 батырмасын басу керек.) ] Косымшаны курып, оны Delphi ортасынан жеке кке косу ушш. ] Ctrl+F9 батырмапарын басып,.ехе кенейт!лу1мен жэне атымен - курылган файлды icke косу. Йздщ жагдайда 'appl.exe' файлын icke ' 28

30 косу керек. Жумыс ict en ж а т к а н к о с ы м ш а н ы Run\Program Reset ж а р л ы г ы м е н т о к т а т у г а б о л а д ы. ДК курамын бейнелеу уш1н, экрандык форманы куру* ДК-нын 6ip кестесыы курамын экрандык формада бейнелеу. Ен алдымен, карапайым форманы курамыз, ол ДК-нын тек 6ip гана кестесые катынау керек. View\Forms M33ip жарлыгыньщ э л е м е н т а тандау жолымен, 3 формага кешем!з, сухбаттык терезеден Form3 тавдап, ОК батырмасын шертем13. Формада TDBGrid компоненты компоненттер палитрасынан (Data Controls парагы) алып, орналастырамыз. Алдымен TDataModule бейнеленген, 3 форманыц unit мэты модуйые Unit5 модуль атын косып, TDBGrid компонентыы DataSource касиеты DataSourcel (бул жогарыда 6i36eH курылган TdataSource компонентыы аты) мэнше орнатамыз. TDBGrid компонент! деректер жиынынын бейнеленуы кестелщ турде корсетуге арналган. Формага TButton (компоненттер палитрасыньщ Standard парагы) компоненты косымыз, осы компонентке объектшер инспскторын колданып, CancelButton атауын (Name касиет!) берем1з. Батырманын усивдеп жазбасын (Caption касиет!) Отмена-Fa взгертем1з. Курылымдалып жаткан форманын rypi 1.17-суретте бейнеленген. вмавмй } ledjanizflnii Отмена 1.17-сурет - Курылымдау Кезёщндеп форма Typi Батырманы баскандагы, багдарлама орындапатындай erin, батырманы кодпен байланыстырамыз. Осы жагдайды ендеу проиедурасын - OnClick куру уинн, формада орналасып, тышканмен Отмена батырмасына e x i рет шертем1з. Пайда болган OnClick евдеу процедурасындагы кодты Тузету (Правка) терезесыде келес! кодты енпзем1з: 29

31 Close; Form I. Visible: True;, v Косымшаны юке косамыз. Ол ymih, Run мэз1ршен Run жарлыгын тандаймыз (немесе F9). Файл/Ввод мэз!ртен Просмотр жарлыгын тандаймыз. Жумыс icten жаткан косымшанын сырткы Typi 1.18-суретте бейнеленген. Г Л 5 Г П Material Макароны М ука ledjzmlzena O raeria I 1.18-сурет - 3 форманын Typi Деректер жиынына жазбаларды косуга TDBGrid-тш езщен болады. Жазбаларды косу ушш, пернетактадан Insert йёрнеещ шерту керек. Егер деректер жиыныныц соцгы жазбасында болсаныз, онда «темен багытталган» багытка шерту керек. Деректер жиыны жана жазбаны косу режимше автоматгы турде етед1>жазбаны енпзгеннен кешн, оны сактау ушш мензерд! баскару пернелер1мен баска жазбага ету жолымен колдануга болады. Жазбаларды сактаудан бас тару учли, Esc батырмасын шерту аркылы жузеге асады. Жазбаны езгерту ушш, агымды жазбанын керсетюш1н кажетт1 орынга койып, керекп жерлерде езгертулерд1енпзу. Деректер жиыны езгерту режимше автоматты турде кешед!. Жазбаны жою ушш, оны ерекшелеп Ctrl+Del пернелер жиынын шерту керек. ДК-нын ек1 кестес1н1н курамынын бейнелену!. Енд1 жумысты киындатамыз. ДК-нын еет кестесшщ курамын бейнелейм1з. Оларды ек1нускамен бейнелеймь: а) Экрандык формада кестелер арасында байланысты орнатпа кесте курамын бейнелеу; 30

32 б) Кестелер арасындагы байланысты ескере отырып, бершген кестелерд1бейнелеу. Экрандык формада кестелер арасында байланысты орнатпай кесте курамын бейнелеу. Eip формада ек1 деректер жиынын (басты жэне багынынкы) басты деректер жнынына катысты агымды жазбысы, деректердщ жиынындагы багынынкы жазбаларына сэйкес келетщ жазбалар эркашан бейнелетшдей етщ, байланыстыруга болатынын керсетем1з. м Form3 imataial ledjzmlzena I а in.prih imaterid idataprih ikdvo : ; 1; ; d 1 1 U ± 1 Отмена 1.19-сурет - Басты жэне багынынкы деректер жиыны бар форманын курылымдалу кезщдел Typi PRIMER деректер корыньщ Prihod кестеамен жумыс ictey ушш, DataModuleS контейнерше ТТаЫе компоненты (каснеттер мэн1 дэл б!рш1шсшдепдей, 6ipaK TableName к;асиет1 Prihod.DB кестесше багытталады) косамыз. Формага TDataSource (онын аты ездтмен TDataSource2 деп аталады) компонентш орналастырамыз. Осы компоненттщ DataSet касиетш ТаЫе2-ге ауыстырамыз. 3 формада TDBGrid (онын аты ездтмен TDBGrid2 деп аталады) компонентш орналастырамыз, онын DataSource касиетш DalaSourcel деп белплейм1з (1.19-сурет). ТаЫе2 компонентшщ Active Касиетш True ауыстырамыз. Осыдан кешн, ТТаЫе компоненттер1 мен Materialy.DB и Prihod.DB кестелер! арасындагы шын мэншде байланыс орнатылады. Карап шыгу кезшде материалдар жайлы деректерд1 (Materialy.DB KecTeci) езгертуге болмайтындай ету ушш, DBGridl компонентшщ ReadOnly касиетш True-га ауыстырамыз. 31

33 Косымшаны icke косам ыз. Prihod. DB кестесше TDBGrid2 компонентшен б1рнеше жазбаларды косамыз. N Prih epicihih мэш автоматты турде пайда болады ( 1.20-сурет). / F o i m 3 Н И Р M aterial E d J z m Z e n a 1 * М акароны лачка 120 М у ка к г 50 Сахар к г 67 - n Prih MateiiaI, ^DataPrih Kolv<j*J И1 Макаооны Сахар _ J 3 Мука _ и I f 1 ftwar.j 1.20-сурет - Басты деректер жиынындагы агымды жазбамен байланыскан жазба, багынынкы деректер жиынында керсетшед1 Д К к естел ерж 1 Н б а й л а н ы с ы н е с к е р е о т ы р ы п, о л а р д ы эк р а н д ы к ф о р м а г а ш ы г а р у, я г н и о л а р д ы ц а р а с ы н д а г ы Master- Detail б а й л а н ы с ы н ы ц о р н а у ы. Materialy. DB жэне Prihod.DB кестелер! 6ip-6 ipme «б^рдш - кепке» байланысына сай келетж 6i3re мэл1м. Б13 кестелер арасында йлтёмёлш тутастылык аныктагандьщтан, Table 1 (Materialy. DB) кестесшщ жазбасына керсетюит орнаткан кезде, Table2 (Prihod DB) кестесшщ тек 6ip гана агымды жазуы пайда болгандай жасауга болады. Бул Masrer-Detail деректер жиынынын байланыс механизм! аркылы жузеге асады. ТаЫе2 компонент} ymih, объектшер инспекторында Master Source касйетш DataSourcel Щщнё орнатамыз. Master Fields касиетын мэшне кешем13 де, Щбатырмасын шертем1з. Пайда болган Field Link Designer терезесшде байланыс параметрлерш орнатамыз. Available Indexes еркшде агымды индекс ретшде 'Material' жолы бойынша тандаймыз. Detail Fields тшменен Material epicra тандаймыз, Master Fields Т1з1мшен Material epicih тандап, Add батырмасын шертем1з. Joined Fields жолында 'Material -> Material' деген ернек пайда болады (1.21-сурет). ОК батырмасын шертемп. 32

34 Field Link Designer Abatable Indexes jj Dflla» Fields Martei Field» E d jz m joined Fields ' Material -> Material Cielete j Cteat j i-j... - (VWSMrl. Л.,-JBJ л. OK ~~ Cancel Це1р 1.21-сурет - MasterFields касиетшщ мэнш орнату терезеа. ТаЫе2 комионентщде агымды индекс (FieldlndexNames касиет1), 'Material' epici бойынша курылган индексше ауыстырылган. Енд! ТаЫе2 деректер жиынында тек материалдын келш ryci бойынша жазбалар квреетшедь ( 1.22-сурет). аi F o r m 3 f Щ Jfcfc'iH'i >1 и M a te r ia l ' I E c L i z m l Z e n a ll IМ а к а р о н ы п а ч к а М у к а к г 5 0 i : С а х а р к г 67 j j ; ;; n M a te r ia l In_rJ. i D a t a P r i h Ko*vo Г: E М а к а р о н ы *.. О т м е н а ft 1.22-сурет - Master-Detail байланысы, багынышты деректер 1 жиынында тек кана багынынкы жазулар керсетшед1 зз

35 Мэл1меттед ДК-га енпзу ушш, экрандык форманын курылуы. Жумысты арьг кдрай жалгастыру ушш, DataModuleS KOHTeiiTepiн дайындаймыз. Delphi компоненттер палитрасынан Data Access парагынан ТТаЫе визуалды емес компонентш косамыз. Онын DatabaseName (ДК псевдоним!) касиетш PRIMER -re пайда болган т!з!мнен немесе колымын енпзш ауыстырамыз. ТаЫеЗ-те TableName (ДК KecreciHiH аты) касиётшщ мэнш PRIHOD.DB деп аламыз. Содан сон, Active касиетш True леп аламыз. TDataSource компонентш орналастырамыз, DataSource3 компонентшщ DataSet касиетш ТаЫеЗ деп белплейм!з. PRJHOD.DB кестеамен байланысы ушш, визуалды емес компоненттер! контейнерге мшдетп турде косу керек, ce6 e6 i оган уксас DataModule контейнердег! компоненттер 6ip-6ipiM eh байланыскан жэне кешн оган циклднс катынау жасалуы мумкш. 2 формага Data Controls компоненттер палитрасынан TDBGrid элемент!н орналастырамыз. 2 форманын unit мэтш модул!не Unit5 модулшщ атын алдын ала косып, DBGrid компонент!н!н DataSource касиет!н DataSourcei деп белллейм!з. Енд! ТаЫеЗ кестесшщ деректер жиынында тек TDBGrid торынан гана емес, баска да визуалды компоненттер аркылы катынауга болатындай жасаймыз. 2 формага TDBEdit компонентш (Data Controls компоненттер палитрасы) косамыз. TDBEditl компонент! аркылы катынау жасауга болатын, руксаттаманы аныктайык. Ол ушш, онын касиеттершщ мэндер!н I DataSource :DataSource3 деп алып, DataField касиетш DatPrih деп аламыз. TDBEdit2 компонент! аркылы катынау жасауга болатын, руксаттаманы аныктайык. Ол щшн онын DataSource касиетш DataSource3 мэнше, ал DataField касиет!н Kolvo деп белплейм13.. TDBLookupComboBox компонентш орналастырамыз. Осы компоненттщ касиеттерш орнатамыз: - DataSource, касиеп DataModule5.DataSource3; - DataFiled, касиет! Material, - List Source, касиеп DataModuleS. DataSource I; - ListField, касиет! Material; - KeyField, касиет! Material. Экрандык формада ДК баскару батырмаларын косу. Экрандык формада ДК кестелер! бойынша навигацияны камтамасыз ететш, жэне онын калпьш баскаратын батырмаларды куруга болады. Ол ушш, косымшага бес TButton (Standard компоненттер пагштрасынын парагы) батырмаларын косамыз. Осы компоненттердщ аттарын объектшер инспекторын колданып, озгертем!з. Сэйкес!нше 34

36 InsertButton, EditButton, DeleteButton, PostButton, CancelButton. Осы батырмалардын атауларын (Caption касиет1) объектигер инспекторы» колданып езгертешк, сэйкесшше "Добавить", "Изменить", "Удалить", "Запомнить", "Закрыть" (1.23-сурет). И N_Prih MateiiaJ idaiapnh Kolvo d 1 Мука Мука Э Макароны Сахар (Сахар ^ т ] ( Добавить ; Изменить I ; ' Удалить I! Запомнить! : Закрыть 1.23-сурет - Агымды деректер жиынымен жумыс ict ey re арналган, визуалды компоненттер! бар форма Тышкан кемепмен InsertButton батырмасын тандап, оны ек1 рет шертем1з. Автоматты турде кодты редактрлеу терезесше кош ем13. OnClick калпына келеа багдарлама кодын енпзем!з: procedure TForm2.InsertButtonClick(Sender: TObject); DataModuleS. Table3. Insert; Insert тэсш Tablel деректер жиынын жазуды косу режим!не кеш!ред!. 0pic мэндерш енг!з!лу! DBEditl, DBLookupComboBoxl, DBEdit2 компоненттер!мен жузеге асады. Ол ушш, деректер жиыны dsbrowse режимшде болуы керек. EditButton баскан кездег! ецдеуд! аныктайык: procedure TForm2.EditButtonClick(Sender: TObject); DataModuleS Tablei.Edit; Edit тэсйп Tablel деректер жиынын жазбаны косу калпына келепред!. 0pic мэндерш енпзшу! DBEditl, DBLookupComboBoxl,

37 t., DBEditl компоненттер!мен жузеге асады. Ол ушш, деректер жиыны! dsbrowse режим шде болуы керек. DeleteButton батырмасынын басылу нэтижесш аныктайык: 1 procedure TForm2. DeleteButtonClick(Sender: TObject); IF MessageDlg('}Ka3ydbifj жойылуын растацыз', mtconfinnation, [mb Yes, mbnoj.o) = mryes THEN DataModuleS. Table3.Delete; Erep Tablel деректер жиыны жазбаларды карап шыгу dsbrowse режимшде болса, сухбат терезеа шакырылады (erep MessageDlg j функциясы орындалга болса); егер пайдаланушы Yes батырмасын шертсе, агымды жазбанын Tablel деректер жиынынан einipuiyi пайда болады. PostButton басылу нэтижесш карастырайык-' procedure TForm2.PostButtonClick(Sender: TObject); DataModuleS. Table3.Post; Егер деректер жиыны жана жазбаны косу немесе тузету режимщце болса, онда Post бершгендер тэсгщнщ орыидалуы I журйзшедк Ол ДК кестесшдеп агамды куйш еске сактайды. Еске сакталганнан кейш, деректер жиыны карап шыгу режимше dsbrowse кешеш. CancelButton батырмасынын басылу нэтижесш аныктайык: procedure TForm2.CancelButtonClick(Sender: TObject); close; Forml. Visible;=true; Erep деректер жиыны жана жазбаны косу немесе тузету режимшде болса, онда Cancel бершгендер тэсш нщ орындалуы журпзшеда. Ол ДК кестесшдеп жазбанын еске сакталуын 1 болдырмайды жэне деректер жиынын карап шыгу режимше ауыстырады да мэз1р формасына кешедь Деректер жиынын жазбанын косылу немесе езгерту режимше ауыстыруга болмайтындай ету ушш, сонымен катар DBGridl I компонентшен жоюга болмайтындай ету уш1н, DBGrid 1.ReadOnly < касиет1н True мэн1не орнатамыз. Содан сон, косымшаны icke косамыз. Жазбаларды езгертуге немесе баска жазба жазу ушш, DBEditl, DBEdit2 компоненттерше енпзуге жэне 1 I 36

38 DBLookupC om boboxl компонент! ты менен мэнд! таадау н егаш де колданылады (1.24-сурет). / 'F o r m 2 Щ я Ш Ш N_Pfih ь; Material (DataPnh * ikolvo А 1 Мука Мука Макароны Сахар оао7.оо 3500 М Макаронь! Мука Сахар тить I Запомнить! Закрыть 1.24-сурет - Жаца жазбаны косу Жазбаны езгерту кезщ ц е де солай болады. Жазбаны жойган кезде, сухбаттык терезе пайда болады (1.25-сурет). [Information D! г Подтвердите уделение записи 1Г Г Ж Р 1 j l I 1.25-сурет Жазбаны жою ж внш дёг! колдау ДК бейнелеу одан api курд ел i форманын курылуы, NJPrih мэн1 Prihod кестесшдеп сирек кездесетш мэндерш камту р й н арналган, жэне баска жуктеуд! ж у р п зб е й д ь Сондыктан бул picti DBGrid2 баганалар курамында корсетпеу жен болады. Бул максаттар ymih, Prihod к естесш щ жолдар Ti3iMiH курамыз. Delphi-д е ДК-ньщ кандай жол дары деректер жиыныньщ косымшасын кол дан у га болатынын бел гш еу д!ц eki т э с ш бар. Bipimiii тэсш бул деректер жиыны непзделген ДК кестесшен барпьщ жолдарды колдануда непзделедь Бул тэал эдетте, езд1пм ен колданылады, ягни оны 6is де Tablel жэне ТаЫе2 деректер жиынын курганда колдандык. Екшш! тэсш деректер жиыны непзделген ДК кестесш щ iumi жиын epictepih колдану н еп зш д е колданады. Бул максат ушгщ, 37

39 деректер жиынынын epicrep редакторы колданылады. Ол дерекгер жиыны ушш енделетш epicrep катарына и; ;\чык ор?стерд немесе ДКнын iuiki жиын epictepih косуга мумкшднс бередь DataModuleS контейнершен тышкан кемепмен ТаЫе2 компонентен тандаймыз да, тышканныц он жак батырмасын шертеьиз. Экранда пайда болган калкып шыгатын мэз1рден Fields Editor элементш тандаймыз. Пайда болган epicrepfli ецдеу редакторында (1.26-cypeTi: а)) тышканныц он жак батырмасын шертем1з де, пайда болган калкып шыгатын мэз1рден Add Fields мэз1р элементш тандаймыз. БД Prihod.DB кестесшщ барлык opictepihih Т131М1 керсетшедь NJPrih epiciheh баска, барлык ерютерд? ерекшелейм1з (тышкан жэне Shift пернелер1 кемепмен) жэне Add батырмасын шертем1з (1.26-сурет: б)). Шнд1 epicrepai евдеу т1з1м! барлык белпленген epicrepfli косады (1,26-сурет: в)). а) б) в) 1.26-сурет - Орютердщ редакторымен жумыс: a) epictep редакторынын бос Ti3iMi; б) epictepfli косу; в) epicrep редакторынын толтырылган Ti3iMi 3 формадагы DBGrid2 компонент нщ ТаЬ1е2 деректер жиыны ym ih, баганалар курамында енд! тек кана epictep редакторында гана косылган epictep бар (1.27-сурет). Opicrep редакторында деректер жиынынын epictep Ti3iMHiH аныктау ymih (ТаЫе2 компонентшен тышканнын он жак батырмасын шерту) осындай тэсшмен ap6ip косылган epic ymih, Delphi косымшасындагы TField компонентшщ (деректер жиынынын epici) курылуына экеп соктырады. dp6ip осындай компонент ездтмен уникалды атпен - 6ipiHim кураушы аты непзшде деректер жиынынын аты (ТаЫе2) алынады, ал екшпп кураушы аты непзшде - ДК кестесшдеп epic аты аталынады. Осымен, TField компонент Material epicihe сай келед1, Table2Material атауына ие болады. Егер epicrep редакторында тиют1 epicke шертетш болсак, объектшер инспекторында epic касиеттерш орнату немесе езгертуге болады, 38

40 сонымен катар накты Dip 0Р' болады. yjiilhj окига ввдеуиш н аны кгауга ж Form3 Meteiid Макароны Мука Сахар пачка кг кг z e n a J Сахар i " I jkolvo J Idm w l ; аныкталады 1.27-сурет DBGrid2 epictepmin курамы ерктер редакторымен DBCridl компонентшщ параметрлерш, баганалар атауы орысша аталатындай етш еэгертем13. Ол унин, DBGrid2 компонентжен он жак батырмасын шертём13 де, капкып шыгатын мэз^рден Columns Editor элементш тавдаймыз. Экранда редактор терезеа компоненттер у стел i пайда болады (1.28-сурет:а)). TDBGrid устсшнщ мшездемесш взгерту уннн, толыгамен аныкталмаган багандардан, толык аныкталган багандарга ету керек. Ол ушш кнопке Add All Fields батырмасын шету керек, нэтижесшде баганалар косылады.олардын эркайсысы ТаЫе2 компонентшщ epicrep редакторынын ерыне сай келед! (1,28-сурет: б)). 9p6ip багананын бас жолын езгерту ушш, тышкан комепм ен баганалар редакторында багана атын тандау керек жэне объекп'лер инспекторында Title касиеттер Т131мш ашу (ол уинн касиеттщ атауы жанындагы крести тышканмен шерту керек). Осы р1з1мшц Caption элементшде баган атауы белпленген; бас жолдарын тж сп турмеп взгертем1з де, DBGrid2 баган редакторынан шыгамыз. Дэл солай Tablel деректер жиынымен де жасаймыз (1.29-сурет). 39

41 Я E d itin g D B G r id 2.C o iu m n s ' ' A d d defete МохеЦр H o V f e D b w n : A dda lpjeldt Qeioyftl j a) ин Editing OBGridZ.Columns 0 - M aterial 1 - D a ta P rih 2 - Kotvo A d d Delete Move Up M o v e D o w n 1ГАЗЗА1РВИГ11 Restore default! : i.; сурет: a) DBGrid2 баганаларынын бос Ti3iMi; 6) DBGrid2 баганаларыньщ толтырылган Ti3iMi. 6 ) 1.29-сур ет - D B G ridl ж эне 2 баганаларынын атауларын орнату 40

42 Дэл сондай езгертулерд1 2 формада да жасаймыз. Сонымен катар, 2 формадагы ТаЫеЗ деректер жиынында жазбалардьщ сурыптау тэрт1бш езгертем!3. Ол ушш, ТаЫеЗ компонентшщ (DataModuleS 1щ1щёй) объектшер инспекторында IndexFieldNames к а с и ф р н индекспк epicrepih курайтын эрб!р Prihod.DB кестесшщ p rie T i индекстер! ушш аныкталган, "DatPrih;Material" мэшне калкып щьнчатын т а з щ Щ н тавдаймыз. Осыдан кешн, DBGrid баганалар редакторына кайта Щ е м 1 з жэне тышкан кемепмен DatPrih баганын Material баганыньщ алдында туратындай e x in орналастырамыз. Косымшага компиляция жасап, оны icke косамыз суретте керёётшгендей, ТаЫе2 деректер жиыны Prihod.DB кестеамен тек к е я е д ь К,осымшада ол келу мерз!м1 бойына сурыпталган, ал эрб!р келу мерз1м1йшнде материал атауымен сурыпталган. - Дега прихода 1Материал 1Кол-во Мука Сахар Макароны Мука Макароны 560 гао5оа Добавить : м ^ ~Б Г 1000 Закрыть 1.30-сурет - Материалдар келу мфз!ш бойынша сурыпталган Экрандык формады есептелетш opictep/ii куру. Егер 3 формада мэш баска ерютерден алынатын есептелетж epic куру керек болса, келесщей эрекетгерд1орындау керек: растер редакторында жана жолды куру керек, оны Calculated деп белгшейм1з. Ол ушш, DataModuleS кенпп, кажетп деректер жиынынын (тышкан кемепмен) агымды ету (Tablel), тышканньщ он жак батырмасын шертш, мэз1рден Field Editor тавдау, кайтадан тышканнын он жак батырмасын шертш, мэз1рден New Field тавдау. Осыдан сон сухбаттык терезеден epic атын белплеу, оньщ тигпн жэне жолдык epicrrep ушш - елшемш орнату керек (1.31 -сурет). 41

43 СВЗВОНННННННННННЯЯНННЕО properties Цат fvychid Cffwmrt ТвЫе2«усШ 29V> :/String Sfe* ' - л*. Л,. ir.wi r fieldlype- -* * jf ;C~~ Tp *- r flal* ОАШъд r L«*up ; Lookupdsfhifen - - тг; -т-г -.1 jj РаФ* J. Г _ d ; ОК ] С<гЫ на сурет - New Field терезеа Жана epic ушш TField компонент]' курылады, енда оган катынауды epicmep редакторында жасауга болады. Есептелетш epic жататын, деректер жиыны (Table2) компонент! ymih, OnCalcFields окига ецделушщ аныктау керек. Мысалы, ТаЫе2 деректер жиыны ^тшн, «Приход» кестелж деректер корын бiлдipeтiн, есептелетш epicrepre Table2Vychisl «Да» м эн ш ещтаекпз, егер Table2Kolvo ерюшде мэш 100-ден асса. Kepi жагдайда, Table2Vychisl epicihe бос м эц щ енпзем^з: procedure TDataModule5. Table2CalcFields (DataSet: TDataSet); IF Table2Kolvo. Value > 100 Then Table2Vychisl.AsString'Да' ELSE Table2Vychisl.AsString := ' '; Егер деректер жиыныныц AutoCalcFields касиетыц мзш True болып орнатылса, деректер жиынынын dslnsert жэне dsedit режимшде, онымен реляциялык байланыскан (кестел1к деректер корыньщ бутш дш нс шектеулер} орнатылган кезде) OnCalcFields окигасы есептелмейтш epictep модификациясы кезшде басталады. OnCalcFields окиганы ендеу-процедурасы есептелелтш epic мэншщ есептеу алгорйтмодц курылымын кздрайды. Осы енделпште мэн тек есептелетш epicke гана менппктелу! мумкш, ал ДК курылымында аныкталган epicke менппктей алмайды (1.32-сурет). 42

44 ^ Fo r m3 Материал Ед.иэм Цонв М а к а р о н ы пачка 120 j, Н И кг 50 I Самар КГ J, Материал 1Дата прихода!кол-во 1Наличие 1 М у к а Да J Мука 2 а Д а л1 Отмена 1.32-сурет - 1ске косылган косымшанын тур] Ескерту. KeA6 ip кездерде есептелетш op ict ep re баска кестелер оргстерщце болмайтын мэндерд1 менийктеу каж етгш п болады. Баскаша айтканда, кейде есептелетш epicke форманын кейб[р айнымалыларыньщ мэндерщ жазуга тшмд] болады. Мысалы, 613 ТЫ деректер жиынына жазбаларды косайык, кейб!р есептеу алгоритм! бойынша Summa opicih ih мэнш есептейм1з. Summa ep icih e есептеулер журпзу ymih, TekOstatok айнымалысы колдансын. TekOstatok мэнш 6i3 ТЫТО есептелетш epick e енпзетш болайык- Мунда 6ip киындык туындайды: мэнд] есептелетш epicke енпзшу1 OnCalcFields евдеу процедурасы аркылы жузеге асады жэне бул TekOstatok локалды айнымалы мэш жогалтылган кезшде болады. Осы жагдайда ТЫ-ге косылатын жазулар, алгоритм жумысы урдшшде, локалды айнымалыларды еске сактау кейб!р динамикалык ты мшде тура келеда, ал соннан сон осы элементтердщ мэндерш ТЫТО epicihe менннктеп, оньщ кажетп элементтерш OnCalcFields окигалар ендеушде шыгару. Экрандык формада эртурл! кестелер деректерш бейнелсу ушш SQL-сураныстарды колдану. BipHeme кестёлерда бейнелеуше арналган 6 ip форманы курайык. Ол ymih, TDataModuleS контейнерщде TQuery компонентш (компоненттер лалитрасынын Data Access парагы) орналастырамыз. 03 бетшше оныц аты Queryl. Онын DatabaseName касйетш PRIMER мэнше орнатамыз. TDataSource (атауы TDataSource4) компонентш орналастырамыз. Онын DataSet касйетш Queryl мэнше орнатамыз. 4 формада TDBGrid компоненпн орналастырамыз. Онын DataSource касйетш DataSource4 деп белплеймйз. 43

45 Queryl компонент! ушш, объектшер инспекторында SQL касиетш табамыз да, батырмасын шертем13. Пайда болган редактор терезесшде 501,-суранысыньщ мэтшш енпзем1з: SELECT P. DatPrih, P. Material, P.Kolvo.T.Zena, (P.Kolvo * T.Zena) As Stoim FROM Materialy T, Prihod P WHERE T.Material = P. Material ORDER BY P.DatPrih, P.Material OK батырмасын шертем13. Осыдан кешн, Queryl.Actrve касиетш True мэшне орнатамыз. Queryl деректер жиыны коймага келш тусетш материалдар жешнде деректер куралган. Осы жиынныц жазбасыньщ курамында DatPrih (келу мерзш?), Material (Материал аты), Kolvo (кeлiп тускен мелшер), Zeria (6ip материал ушш орнатылган багасы), Stoim (келш тускен материалдын багасы) epictepi бар. SQL касиетш деп сураныс мэтшшен кершгендей, PRIMER ДК деректер жиыны ею кестеден «жиналады», олар Materialy.DB жэне Prihod.DB. Осыдан осы ДК кестелершщ жазулары, б^рдей мэцщ Material epiciheh жиналады (1.33-сурет). и F о г III 4 ИМЗЕЗ! Д а т а п р и н т е М ате ри а л I К ол-во U вне [С у м м е : г М ука : : Сахар М акароны ; М ука ; : М акароны : : й i f ; 'v t-sm 'i-k Ьтмйн# ' ' I ' ; Л г; сурет Эртурл! кестелерден деректерд1 6ip кестеге 6 ip jcrlp y 1 формадагы Отчет пунктшде келеа кодты ейпземи: Forml. VisibleFalse; Form4. Visible; True; Queryl деректер жиынында жана жазуларды косуга, жазуларды взгертуге жэне жоюга болмайды. Ол 61 рнеше кестелерден жиналган жазбапар тек окуга гана арналганг болып табылатындактын, взгертуге руксаты жок. Есептж формаларды куру жэне олардын ДК катынау жасалуы. Есепт1н жасалуы баска формалармен катар карастыруга болады. BipaK онын взшд!к ерекшел1ктер1 мен касиеттер1 болгандыктан, оны 44

46 жеке бел!м ретжде карастырамыз. Сонымен катар, есептш курылымын TinTi ДК^БЖ -дан жеке де карастыруга болады. Е с е гт к форма курамында уш T ypni компоненттер бар. Олар есептщ кесте туршдеп экрандык формасы жэне мэты, кагаз тасымалдагыштарына шыгарылатын ecen T i шыгару, электронды турде курылымдалатын есептер. Жуйе жумысын тексеру жэне icke косу. Жуйеш icke косу келеа команда аркылы жузеге асады: Run\Run. Сонымен катар, жуйеш icke косу F9 батырмасы аркылы жузеге асады. Егер жуйе icremefi калсы, немесе жумысы токтап калган жагдайда Run\Program Reset командасы аркылы акаулыктарды жоюга болады. Егер формалардын бейнелену peti сэйкес келмесе, оны Main Form жолындагы Proect\Options мэз!р элемент] Forms косымшасы жарлыгы кемепмен взгертуге болады. Есептерд1 куруга арналган компоненттер. Delphi-am QReport компоненттер палитрасында есеп куруга арналган жиырмадан аса компоненттер орналаскан. Олардын непзплер1 Kejieci болып табылады: TQuickRep, TQRBand, TQRSubDetail, TQRGroup, TQRLabel, TQRDBText, TQRExpr, TQRSysDat, TQRMemo, TQRRichText, TQRDBRich Text, TQRShape, TQRImage, TQRChart. Осы компоненттердщ багыты келеек TQuickRep барлык баска компоненттерге базалык болып табылады, ол толыгымен есептщ турысын аныктайды. Есептщ курылымдык бежгш аныктайды: TQRBand деректердщ орналасуына арналган бастама, есеп титулы жэне т.с.с.. Есеп непзшде TQRBand компоненттершен куралады, олар келеснн жузнгн асырады: есеп такырыпшасынын аймагы; парак такырыпшасыныц аймагы; топ такырыпшасынын аймагы; белшектж деректерд1 бейнелеуге арналган аймак; парактьщ теменп жагынын аймагы; ееещ щ теменп жагынын аймагы. TQRSubDetail- Багынынкы кестенщ, есепте бар байланыстын непзшде, Master-Detail байланысын орнаткан кезшдеп деректгр1 орналаскан аймагын аныктайды. TQRGroup - есепте деректерд1 топтауга арналган. TQRLabel есепте статистикалык мэтшд1 орналастыруга мумк1нд1к бередь TQRDBText - есепте деректер жиынынын курамын орналастыруга мумкшдш бередь 45

47 I TQRExpr - ернектердщ нэтижеа болап табылатын, мэндерд! шыгаруга арналган. Л 1 TQRSysDate - есептеп мерзшд1, кундк уакытты, парак HeMipiH, кез-келген мэннщ кайталану счетчипн шыгаруга мумюшпк бередг TQRMemo - есепте тусшнстеме epictepih шыгаруга мумкшдж беред!. TQRRichText Тузетшген тусш1ктемелерд1 есепте шыгару ушш арналган. TQRDBRich Text - Тузетшген тусш1ктёмелерд1 есепте шыгару уиин арналган, олардын акпарат K03i деректер жиынынын epici болып табылады. TQRShape - есепте графикалык фигураларды орналастыруга арналган, мысалы тнстертбурыш. TQRImage - есепте графикалык акпаратты шыгаруга арналган, онын акпарат кез1 деректер жиынынын epici болып табылады. TQRChart - есеп графиктерш орналастыруга мумкшдж бередц TQuickRep компонент!. TQuickRep ecentih мшездемесш жэне турысын аныктайды. Осы компонента формага орналыстырган кезде формада есеп торы пайда болады (1.34-сурёт). ШПШЙПМИИИИИВИИИИИИИИИИИНЩЕ 1.34-сурет Есептщ бос торы. TquickRep компонентш формада орналыстырганнан кешн пайда болады Кешн осы торда ecentih курылымдык бел^ктер! орналастырылады, мысалы, TQRBand тобы..... Заголовок отчета) Jjoeap) {Приход 1.35-сурет - Есеп компоненттер! орналаскан есеп торы 46

48 TQuicJcRep компонентшщ мацызды окигалары мен тэсшдерш атап шыгамыз. Бершген компоненттщ к/acuemi ке лес шей: Property Bands: TquickRepBands. Бершген касиет логикалык мэндердщ жиынтыгынан (False/True) турады, олар жеке кураушылардьщ тишн аныктайды: HasColumnHeader есеп берудщ багандар такырыпшалары; HasDetail - белжтенген акпарат; HasPageFooter - бетпч теменп белш (астар); HasPageHeader - беттщ такырыпшасы; HasSummary - есеп берудщ теменп бел (астары); HasTille - есеп берудщ такырыпшасы. Property DataSet: TdataSet. Ол есептщ курылуы непзшдег! деректер жиынына керсет1лед1. Одетте есеп беру уинн, 6 ip деректер жиыны колданылады. Егер ДК б1рнеше кестесшен байланыскан акпаратты шыгару керек болса, оны SELECT операторы кемепмен 6 ip МЖ-на косады. Бул жагдайда МЖ ретвде есеп беру ушш TQuery компонент! н колдануга болады. BipHeuie байланыскан МЖ-нын акпаратын есеп беруге косуга болады. Бул жагдайда МЖ ece6i ретшде Master-жиын керсетшед!, ал багыттау Detail-жиынына сэйкесшше TQRSubDetail компонент!нде жузеге асырылады. Егер есеп беруге байланыспаган деректер тобыньщ акпаратын косу керек болса, онда композициялык есеп берушшер колданылады, ягни баска есеп берушшердщ тобынан куралган. Property Frame: TQRFrame. Бершген касиет есеп берудщ коршау параметрлерш аныктайды: Color - коршау сызыгынын Tyci; DrawBottom - сызыкты астынан шыгаруды, не шыгармауды аныктайды; DrawLeft- сызыкты сол жагынан шыгаруды, не шыгармауды аныктайды; DrawRight- сызыкты оц жагынан шыгаруды, не шыгармауды аныктайды; DrawTop- сызыкты устшен шыгаруды, не шыгармауды аныктайды; Style - сызыктын стилш аныктайды; Width - сызыктын жуандыгын пиксельмен аныктайды; Property Page: TQRPage- парактын параметрлерш аныктайды. Property Printer Settings: TquickRepPrinterSettings принтердщ параметрлер!н аныктайды. Property PrintlfEmpty: Boolean - Есеп беруда оньщ шшде мэл!мет жок болса да баспага беру керекттн керсетед! (True). Procedure NewPage. Бул эд!с жаца бетке кешуд1 орындайды. BeforePrint немесе AfterPrint есептер компоненттер! окигаларды евдеуде колданылуы мумкш жэне OnPrint, OnStartPage жэне OnEndPage окигаларды ендеуде колданылмайды. Procedure Preview - есеп беруд! алдын-ала карау терезес!не 47

49 шыгарады. Алдын-ала карау терезеанде есеп берудщ курамын баспага капай шыгатынын карау ушш: ecenti тышканнын кемепмен таддау; тышканнньщ оц жак батырмасын басу; шыккан мэз1рден Preview элементш тандау керек. Procedure Print ecenti принтерде басып шыгарады. Procedure PrinterSetup - принтердщ параметрлерш орнатуын камтамасыз етедь Property AfterPreview.TQRA/terPreviewEvent - есеп беруш алдынала карау терезеа жабылганнан кещн келедь Property AfterPrint.TQRAfterPrintEvent - есеп бёруд1 баспага шыгарудан кешн келедь Property BeforePrint:TQRBeforePrintEvent - есепт! алдын-ала карау терезес! шыгар алдында жэне ecent i баспага шыгару алдында, есеп 6epyai генерациялау кезшде келед1. Property OnEndPag:procedure(Sender:TObject) - ecentiн сощы бетш генерациялауга дайындык кезаде келедк Property OnStartPage : procedure(sender:tobject) - есептщ 6 ipihini 6eTiH генерациялауга дайьшдык кезшде келедь TQRBand компонента TQRBand компоненттер! ecentiн нелзп курамды 6eniicrepi болып табылады жэне оган статистикалык мэт!ннщ жэне деректердщ койылуы упнн колданылады. Бершген компонент келеа касиеттерге ие болады. Property BandType:TQRBandType - есеп компоненттершщ орналасу орнын жэне тэрт^бш аныктайды. Бул компонентой мумкш мэндер! мынадай: - rbtitle, есеп компонентшщ такырыпшасын аныктайды. TQRBand компонентшде орналаскан акпарат, есептщ баска барлык бвлжтершщ алдында орналасады, TQRBand компонентшщ Typi есеп берутщ bi такырыпшалык акпараты ушш колданылады; - rbpageheader, бет такырыпшасыныц компонентш аныктайды. - rbdetail, белхкпк акпараттьщ компонент!; - rbpagefooter, бет астарыныц компонент^ есеп беруд 'н 9p6ip 6eri ушш беттеп барлык деректерден кейш шыгарылады; - rbsummary, есеп астарынын компонент. Барлык баска акпараттан кешн есептщ пост бетше шыгарады жэне есеп берудщ акыргы бетон алдына шыгарылуы керек; - rbgroupheader, топтын такырьшшалык компонент!. Есепте акпараттьщ топталуы кезшде колданылады. Жана топтын шыгуы кез!нде шыгарылады; - rbgroupfooter, топтын астарынын компоненты. Есепте 48

50 акпараттыц топталуы кезшде колданылады; rbsubdetail, Master-Detail механизмшщ кемепмен байланыскан есеп беруде ею немесе одан да кеп акпараттарды шыгару кезшде багыньщкы деректер тобынан башктенген акпаратты шыгару ушш кажетп компонент. TQRSubDetail компонентш формада орналастыру кезенде TQRBand компонент! генерацияланганда бул мэн компонентке автоматты турде бершедй Программа бул мэнд1 BandType касиетше орналастырмауы керек; - rbcolumnheader, багандардын такырыпшаларын орналастыру ушш керекп компонент. Есеп беруде беттщ такырыпшаларынан кешн эр 6ip бетте орналасады; 1 rboverlay, алдьщгы нускалы есептермен 6ipiryi уш1н колданылады. Property Enabled:Boolean - TQRBand компонентшде бар акпарат басылап жатыр ма (True) жок па (False) ёкешн керсетедь Property ForceNewPage: Boolean - TQRBand курамындагы акпарат унем1 жана беттен басылып шыгу керек пе (True) жок па (False) соны керсетеди TQRBand компонентасыньщ келесщой окигасы бар. Property BeforePrint: TQRBeforePrintEvent - TQRBand компонентыньщ аймагында орналаскан акпаратгын басылымы алдында шыгады. TQuickRep жэне TQRBand компоненттер! кемепмен карапайым есепт! куру эдкк TQuickRep жэне TQRBand компоненттер! ешкандай топтык акпараты сакталмаган карапайым ecenti куру ушш минималды кажеттенген болып табылады. Prihod.DB кестесшде коймага экелшген материалдар туралы деректер сакталады. ДКК курамына юретш ДК келес! epicrep юредь - N_Prih, материалдьщ келу окигасыньщ уникалды HOM epi; - DataPrih, экелшген куш; -MATERIAL, материалдьщ аты; - KOLVO, экелшген материалдьщ жалпы саны. Мб формага ТТаЫе (аты Tablel) компонентасын орналастырайык, Prihod.DB ДК кестеамен байланыстырайык жэне оны ашайык (Active = True). Формага компоненттер политрасынын QReport бетшен TQuickRep (аты QuickRepl) компонентасын орналастрайык Есептщ DataSet касиетше Tablel мэшн коямыз. Есепке TQRBand (аты QRBandl) компонентасын косайык. QRBandl компонентой BandType касиетше rbtitle мэнщ коямыз. Есептщ QRBandl компонентасы орналаскан кещсйкте QRLabell атымен TQRLabel (статикалык мэтш) компонентасын орналастырайык.. Осы 49

51 компонентой Caption касиетше «Поступление на склад материалов» мэнш кояйык, Font касиетше калын кисайган бшктш 16 пункгп Kapinxi кояйык (1.36-сурет). Поступление материалов на склад 1.36-сурет - Есеп беруде тек онын такырыпшасы гана аныкталган Енд1 Prihod кестесшщ жазбасына сэйкес есепке деректерд] орналастырайык. Ол ушш есепке TQRBand (аты QRBand2) жана компонентш орналастырайык жэне онын BandType касиетше rbdetail мэнш кояйык. Одан кешн топта QRDBTextl... QRDBText4 атымен TQRDBText терт компонентасын орналастырайык. Бершген компоненттерда сэйкесшше МЖ epicimeh байланыстырайык - N Prih, MATERIAL, DataPrih, KOLVO. Ол ушш эр 6ip QRDBText компонеттщ DataSet касиетше Tablel мэнш коямыз, ал DataField касиетше сэйкес epictih атыньщ мэнш коямыз. (1.37-сурет). IПоступление материалов на склад ; j ftlerig jtfateriaj patapri hj J<olv^ 1.37-сурет - Есеп берудш белшектенген акпараттын такырыпшасы жэне тобы

52 Шыккан ecenti керу ушш онын уст*нен тышканнын он жак батырмасын басып жэне шыккан мэз!рден Preview элементш тандаймыз. EcenTi алдын-ала карау терезею ашылады (1,38-сурет). 1» HEIDI.- JVC' в Ш ^ П И и s la l Ж Ш Й 1 Поступление материалов на склад 1 Мука Мука Макароны Сахар S00 5 Макароны «1 Й Ж Ш I.. Page 1 oil 1.38-сурет - Алдын-ала карау тереземшдеп есеп берудщ курамы Алдын-ала карау терезесш ашу 4 формадан «Просмотр» батырмасын басу аркылы жузеге асырылады. Ол ушш 4 формага TButton компонентш косамыз. Бул батырманын такырыпшасын объектщер инспекторын колданумен «Просмотр» деп езгертем13,. OnClick батырмасына окигаларды ендеу аныктайык: Form6. QuickRepl. Preview; TQRBand компонент! кемепмен багандардын такырыпшаларын керсету. TQRBand компонент! BandType касиетшде rbcolumnheader мэш койылган багандар такырыпшаларын керсету уиин колданылады. Багандардын такырыпшалары TQRLabel компонент! кемепмен аныкталады. Есепке TQRBand (аты QRBand3) компонетасын косайык жэне BandType касиетше rbcolumnheader мэнш коямыз. QRBand3 деп аныкталатын есеп беру кещсппнде TQRLabel (аттары QRLabell... 51

53 QRLabelS) терт компонентш орналастырайык жэне б р компонентттердш Caption касиетше сэйкесшше «Экелу», j «Материалдьщ аты», «Куш», «Саны» мэндерш коямыз. Бер1лген компоненттердщ Font каоиетщё асты сызылган шрифт режимш орнатамыз жэне шрифттщ езш квлденен деп аныктаймыз. Есептщ алдын-ала карау терезесше юрешк. Есептщ эр 6ip бетше 6eiriH жогаргы бвл^пнде багандардын аттары шыгады (1.39-сурет). т я н ез иуи д.н < И и g g BltflOE ffowl Поступление материалов на склад прихода Название материала Д а та Кол-во j 1 Мука Мука Макароны Сахар Макароны Paget of сурет - Есеп беруде багандардын такырыпшалары шыгады TQRBand компонент! кемепмен есептщ такырыпшаларын жэне астарын безешлру. BandType касиетшде rbpageheader мэш койылган TQRBand компонент! бетон такырыпшасын керсету ушш колданылады. Ол эр 6 ip жана бет ушш баска аппарат шыгар алдында шыгады. BandType касиеттнде rbpagefooter мэш койылган TQRBand компонент! бетон астарын керсету ушш колданылады. Ол эрб1р жана бет ушш кез келген баска акпарат шыкканнан кешн шыгады. Есепке TQRBand (аты QRBand4) компонентш орналастырамыз жэне онын BandType касиетше rbpageheader мэнш коямыз. Бетон такырыпшасына ешкандай мэтш орналастырмаймыз, тек бетон жогаргы белене сызык сыза саламыз. Ол ушш Frame. DrawTop компонентшщ бетон такырыпшасы касиетше True мэнш коямыз. Ол жогары бойынша орналаскан сызыкты сызады. Дэл сондай тэсшмен есептеп парак астарын (аты QRBandS) 52

54 аныктаймыз жэне BandType касиетш rbpagefooter мэшне, ал Frame. DrawBottom касиетш True деп орналастырамыз. Ол сызыкты теменп жагында орналасуын камтамасыз етед!. Алдын-ала карау режимше гарген кезде 6\з эрб1р бетон басында жэне аягында сызык бар екенш керем!з. TQRSysData компонент! кемепмен есепте косымша жэне жуйел! акпараттын керсетшуь TQRSysData компонент! косымша жэне жуйелш акпараттын керсетшу! ушш колданылады. Керсет!лген акпараттын Typi келеа касиеттермен аныкталады: property Data : TQRSysDataType; Бул касиеттщ мумкш болатын мэндер! келесщей: - qrscolumnno, есеп берудщ агымдагы баганнын номер! (б1рбагандык есеп беру ушш у нем! 1 ). - qrsdate, агымдагы мерз!м. - qrsdate Time, агымдагы мерз!м мен уакыт. - qrsdetailcount, МЖ-да жазылатын жазулардьщ саны; - qrsdetauno, МЖ-да агымдагы жазылатын жазулардьщ номер! - qrspagenumber, есептщ агымдагы беттщ номер!; - qrspagecount, есеп беттершщ жалпы саны; - qrsreport Title, есептщ такырыпшасы. - qrstime, агымдагы уакыт. Есептщ QRBand5 астарыньщ компонентасына ею TQRSysData (аттары QRSysDatal... QRSysData2) компонент!н орналастырамыз. Онын Data касиетшщ 6 ipihiiiicihe qrsdate (агымдагы кун) мэнш орналастырамыз, ал екшнпсше qrspagenumber(ecemiн агымдагы беттщ HOMepi) мэнш орналастырамыз. Есептщ нэтижелерш алдын-ала карау режимше керешк. Енд1 есептщ эр беттщ соцгы жагында бетон номер! жэне агымдагы мерз!м шыгады. Есептеп деректерд1 топтау ajici. Деректерд! топтау уш!н TQRGroup компонент! колданылады. Оньщ Expression касиет! врнект/ керсетедь Топка ернектщ шартын канагаттандыратын МЖ-нщ жазбалары юредь Орнекпц мэнш езгерткенде топтар езгередь Топтын такырыпшасы ретшде компонентасынын BandType касиетшде rbcolumnheader мэш койылган TQRBand кызмет етед1. Топтын астары ретшде BandType касиет!нде rbgroup Footer мэн! койылган TQRBand компонентасы кызмет етед!. TQRGroup компонентшщ FooterBand касиет! топтын астарыньщ компонентше сштемеы бар. Акпарат материалдын атымен топталатын коймагака материалдар келу! туралы жана есеп курастырайык. Ол ymin 7 формада есептщ деректер тобын аныктайык ( ТТаЫе компонент!, аты 53

55 Tablel, TablelName касиетше Prihod.DB, Active: True). МЖ-да Material epicihe агымды индексгп орнатайык (.FieldlndexNames немесе IndexName касиет1нде/). Есепте орналастырайык: 1) есептщ такырыпшасы - TQRBand компонент! QRBandl атымен, ВапаТуре касиет1 = rbtitle; 2) багандар такырыпшасы TQRBand компонент! QRBand2 атымен, ВапаТуре касией = rbcolumnheader; 3) TQRGroup компонеттер-тобы QRGroupl атымен; 4) Белшектнс акпараттын аймагы - TQRBand компонент! QRBand3 атымен, ВапаТуре касиет! = rbdetail; 5) Топ астары - TQRBand компонент QRBand4 атымен, ВапаТуре касиет1= rbgroupfooter. QRGroupl компонентасына келеспп орналастырайык: 1) FooterBand касиетше QRBand4 мэн!н; 2) Expression касиетше Tablel.MATERIAL мэнш, ол формула болып табылады жэне формулалар редакторында жазылады. Expression касиет! ернектщ мэнш визуалдамагандыктан, топта TQRExpr (аты QRExprl) компонентш орналастырамыз жэне Expression касиетш Tablel.MATERIAL мэш аныкталгандай erin коямыз (1.40-сурет). [Expression builder ЕЗ Г Constant" *... Г" ropetatois i [Numeric / ] Add i I y» f - V'* - i 1 Category. Dataset a i Tablel AvaJabte (unchont AVERAGE a COPY Z 3 COUNT DATE FALSE A vsta c t< «^> ) N_Prih Material OataPrih Kolvo l - J - J j _ ^ J Retirns the average of numeric «X* - H J I Add Add -2=J... at JisU Tablel. Kotvo _A n d J Undo I Clear 1 o k 1 Cancel И > Г 1.40-сурет - Формулаланын курылуы 54

56 QRBand4 топтар астарыньщ компонентасында Kolvo ер1сшде косындыны (келш тускен накты материалдын жалпы санын) есептейм13. Ол ушш топтар астарында TQRExpr (аты QRExpr2) компонентасын орналастырамыз жэне оньщ Expression касиетш SUM(Tablel.KOLVO) формуласын курайтындай етш коямыз. Бвл^ктенген акпараттар тобында деректер тобынын N Prih, Material, DataPrih и Kolvo epictepimeh байланыстырылган (DataSet жэне DataField касиеттеро TQRDBText компонентасын орнастырамыз суретте керсетшгендей есеп берудщ баска аймагын статикалык мэтшмен толтырамыз. -1 1* П о с ту п л е н и е м ате риало в на ск прихода) М а т е р и а л Дата поступления 'ТОВАР:,T a b l e 1.M a t e r i a F jyiateria jbatapnhj /Итого по то в а р у ^UM (T ablel Kolvo j] сурет - Есептщ тауар бойынша топтау макет. Ш '< Поступление материалов на склад Ч» i f ««a l i f t l t p o n Д ага посг/плвчля ТО В А Р : Макароны Э Мавроди S Ua«po*tf 1*0101 Итого по товару: 700 ТО В А Р : fll 1.42-сурет - Алдын-ала карау терезесшде есепт! тауар бойынша топтау 55

57 Алдын-ала карау терезесш ашу ушш 4 формасындагы "Топ" батырмасын басу керек. 4 формага TButton батырмасын косайык. Онын ОпСНск окигаларды ендеуш аньнсгайык: Form 7. QuickRepl.Preview; 1.42-суретте топтардын 6 ipimh астары керсетшген- ондагы материалдьщ келушщ соммалык Typi шыгарылады. Сузуд1 колданыл есептерд! курылымлау. Filtered касиетше True мэнш коямыз, OnFilterRecord окигасынын ендеуцпсшде шарттары жазылган фильтрацияны орындаймыз. Мысалы, егер МЖда фильтр орналастырылса: Accept := DataSet['KOLVO'] > = 500; End; Онда TablelFiltered касиетшде False мэнш койганда фильтрацияны орындайды; деректер тобыньщ нэтижесшде тек кана 'KOLVO' epicinaeri 500 жэне одан да кеп мэндер1 бар жазбалар керсетшеди Filtered касиетшщ мэшн False мэнше орнаткан кезде, сузбеу токтатылады, онын шарттары OnFilterRecord окигасында керсетшген. Косымшаны тестьиеу жэне жендеу. Тестшеуден кей1н Ввод/Название материала меню пункп жумыс 1стемейт1н1н байкадык. Жана материалдарды жэне онын мшездемесш косу уш н форма курайык. Осы формага TDBGrid компонентасын орналастырайык, DataSource касиетше DataSourcel мэшн коямыз. TButton компонентш орналастырамыз, бул компонентке CancelBtn (Name касиеп) атын берешк; батырманьщ такырыпшасын "Закрыть" атына (Caption касиета) згертей1к. Батырманы кодпен байланыстырайык. ОпСНск бул окигаларды ендеу процедураларын куру ушш "Закрыть" батырмасына тышканмен eki рет басу керек. Кодтар редакторшде келес1 кодты жазамыз: Close; Form], Visible := True; 1 формага ауысайык жэне Ввод/Название материала менюшвд nyhkti ymih 8 форманы шакыратын кодты жазайык: Forml. Visible := False; Form8. V isib le T ru e ; Осымен косымшанын дайындалуы аякталды деп есептейм13. Есеп берудщ жана формасын курайык ( 9 форма). Формага TQuickRep (аты QuickRepl) компонентасын орналастырайык, 6ipaK оган катынау Queryl аркылы жузеге асырылсын. Ол ушш DataSet 56

58 касиетш DataModule5.Queryl мэнш коямыз суретте керсетшгендей баска компоненттерд1 косайык жэне есеп беру аймагын статикалык мэтгнмен толтырайык- Поступление товаров на склад 13 Дата поступления Название материала! Кол-во [^ена за едл,ьумыа, }atapri fdalena? pcolvo) ^enaj ^itoim { Lifro ro? J ~ -* brlabel/ «I I A 1.43-сурет - Есеп берудщ нэтижелж макет! Есептщ аягында барлык экелгаген материалдардын нэтижелж сомасын с03 туршде косамыз. Ол уиин QRBand4 аты бар TQRBand компонентой косамыз, BandType касиет1 = rbsummary. QRBand4-Ke TQRLabel (аты QRLabel7) компоненты орналастырамыз. Unit4-ке кешш жэне "Итог" батырмасынын OnClick окига ендеуше мы на кодты косамыз: procedure TForm4.Button5Click(Sender: TObject); var ss: String; Str(TempTotal.ss); Form9.QRLabel7.Caption := SumNumToFullfTempTotal); Form9. QuickRepI.Preview; Unit5-ie TempTotal айнымалысын аныктаймыз жэне коймага экелщген TempTotal материалдардын нэтижелж сомасын есептейш кодын косамыз: var DataModuleS: TDataModuleS; TempTotal: Integer; implementation Объектшер инспекторшде AfterOpen касиетш тышканмен 2 рет шертш, (JnitS ашамыз жэне келеа кодты косамыз: procedure TDataModuleS. Query I AfterOpen(DataSet: TDataSet); 57

59 Queryl.First; TempTotal: = 0; { use temp for efficiency } while not Query I.EOF do TempTotal := TempTotal + QueryIStoim. Value; Queryl.Next; SumNum ToFull(TempTotal); Проектке Writesum.pas жазбасына ProjectJAdd to Project менюш колданып сандарды ауыстру модулш косайык. W ritesum.pas модулжш листинг! Unit Writesum; interface uses Sys Utils; (Санмен жазылган сомманы жазбаша жазу функциясы: мысалы, > жиырма уш тенге 12 тиын тенге 99 тиын дешнп мэндерда аударады. Number параметршде дурыс элде бурые мэн екенш функция байкамайды (ягни жузд1ктерге дешнп дэлджпен двцгелектелген оц сан) бул жендеуд1 функцияны шакырганга дещн журпзу керек}. function SumNum ToFull(Number:real):string; implementation function SumNumToFull(Number:real):string; var PartNum, TruncNum, NumTMP, D: integer; NumStr : string; i, R : byte; F la g ll: boolean; Begin D:= ; R:=4; TruncNum: Trunc(Number); // тецгет белгыеймлз iftruncnum<>0 then repeat PartNum "TruncNum div D; Dec(R); D: =D div 1000; Until PartNum<>0 58

60 R:=0; / / тецге аударымы FOR i:=r DOWNTO 1 DO BEGIN Flag11: =False; Num TMP: =PartNum div 100; {сандардьщ жуздт белгтеу!} Case NumTMP o f 1: NumStr: =NumStr+'CTO 2 : NumStr: =NumStr+ДВЕСТИ 1 3: NumStr: =NumStr+ 'ТРИСТА '; 4: NumStr: =NumStr+ 'ЧЕТЫРЕСТА '; 5: NumStr:=NumStr+'ПЯТЬСОТ '; 6: NumStr: =NumStr+ 'ШЕСТЬСОТ'; 7: NumStr: =NumStr+ 'СЕМЬСОТ'; 8: NumStr: =NumStr+ 'ВОСЕМЬСОТ '; 9: NumStr: =NumStr+ДЕВЯТЬСОТ'; NumTMP: (PartNum mod 100) div 10; {ондъщ сандарды белгшеу} Case NumTMP o f 1: Num TMP: = PartNum mod 100; case NumTMP o f 10: NumStr: =NumStr+ДЕСЯТЬ '; 11: NumStr: =NumStr+ 'ОДИННАДЦА Tb '; 12: NumStr:=NumStr+ДВЕНАДЦАТЬ '; 13: NumStr: =NumStr+ ТРИНАДЦАТЬ '; 14: NumStr:=NumStr+ 'ЧЕТЫРНАДЦАТЬ '; 15: NumStr:=NumStr+ 'ПЯТНАДЦАТЬ '; 16: NumStr: =NumStr+'ШЕСТНАДЦАТЬ '; 17: NumStr: =NumStr+ 'СЕМНАДЦА ТЬ I 18: NumStr:=NumStr+ 'ВОСЕМНАДЦАТЬ '; 19: NumStr: =NumStr+ДЕВЯТНАДЦАТЬ '; case i o f 3: NumStr: =NumStr+'МИЛЛИОНОВ '; 2: NumStr: =NumStr+ 'ТЫСЯЧ '; 1: NumStr: =NumStr+ 'ТЕНГЕ '; Flagl l:=true; 59

61 2: NumStr: - NumStr+ДВАДЦА ТЬ 3: NumStr: =NumStr+ 'ТРИДЦАТЬ ': 4: NumStr: =NumStr+ 'СОРОК 5: NumStr: =NumStr+ 'ПЯТЬДЕСЯТ '; 6: NumStr: =NumStr+ 'ШЕСТЬДЕСЯТ'; 7: NumStr: =NumStr+ 'СЕМЬДЕСЯТ 8: NumStr: =NumStr+ 'ВОСЕМЬДЕСЯТ 9: NumStr: =NumStr+ДЕВЯНОСТО end: NumTMP:=PartNum mod 10; {6ipniK сандарды белгшеу} ifnot Flagl 1 then case NumTMP of I: if i=2 then NumStr: =NumStr+ 'одна 'else NumStr: =NumStr+ 'ОДИН'; 2: if i=2 then NumStr: =NumStr+ 'две ' else NumStr: = NumStr+ДВА '; 3: NumStr: =NumStr+ ТРИ 4: NumStr: =NumStr+ 'ЧЕТЫРЕ 5: NumStr: =NumStr+ 'ПЯТЬ 6: NumStr: =NumStr+'ШЕСТЬ 7: NumStr: =NumStr+ 'СЕМЬ ' 8; NumStr:-NumStr+ 'ВОСЕМЬ 9: NumStr: =NumStr+ДЕВЯТЬ V case i o f 3: case NumTMP o f I : NumStr: =NumStr+ 'МИЛЛИОН '; 2,3,4: NumStr: =NumStr+ 'МИЛЛИОНА '; else NumStr: -NumStr+ 'МИЛЛИОНОВ '; 2: case NumTMP o f 1 : NumStr: =NumStr+ ТЫСЯЧА '; 2.3,4: NumStr: =NumStr+ ТЫСЯЧИ'; else if PartNiimoO then NumStr: =NumStr+ 'ТЫСЯЧ 1: case NumTMP o f 1 : NumStr: =NumStr+ 'ТЕНГЕ'; 2,3,4: NumStr: =NumStr+ТЕНГЕ '; else NumStr: =NumStr+ ТЕНГЕ '; 60

62 if i> 1 then PartNum:=(TruncNum mod (D*1000)) div D; D: -D div 1000; END; //тиындардыц аударымы PartNum: =Round(Frac(Number) *100); if PartNum=0 then SumNumToFuIl:=NumStr+ '00 ТИЫН'; Exit; End; NumTMP:=PartNum div 10; {ондьщ сандарды белгтеу } ifnumtmp=0 then NumStr:=NumStr+'0'+IntToStr(PartNum)+'' else NumStr:=NumStr+IntToStr(PartNum)+' '; NuntTMP: = PartNum mod 10; {6ipniK сандарды белгшеу} Case NumTMP o f 1: if PartNum<> 11 then NumStr: =NumStr+ 'ТИЫН' else NumStr: =NumStr+ 'ТИЫН'; 2,3,4: if (PartNum<5) or (PartNum> 14) then NumStr: =NumStr+ 'ТИЫН' else NumStr:=NumStr+ 'ТИЫН'; else NumStr: =NumStr+ 'ТИЫН'; SumNum ToFull: = NumStr; // SumNumToFull end. QRBand4 epicihe TQRLabel (аты QRLabelS) компонентасын косайык, Caption касиетше "Итого:" деп езгертем1з. Тагы да TQRExpr (аты QRExprl) компонентой косайык жэне ол SUM(Tablel.Stoim) формуласы болуы керек онын Expression касиетшщ мэнш аныктаймыз 1.44-суретте алдын-ала карау терезесшде есебшщ нэтижес1 керсетолген. Есепто дайындау ymih, Excel-дщ коптеген MyMKiHfliicrepi (графикалык бейнелеулер жэне т.с.с.) бар. Сонымен катар, бизнес-урдюке Excel ортасында жасау ьщгайлы болып келед1. Сондыкган, осы ресурсты колдану уш н> OLE процедурасы кемепмен деректерд1 Excel-ге ж1беру керек. 61

63 а ш ш ш a j m ев 9 \» \ a e»lld f[g»«поступление товаров на скпаб ШЖ Дата поступления Название материала Кол-во Цена за ед Сунна Мука 1000 S Сахар 3S Макароны Мука Макароны III И т о г о : ДЕВ ЯГЬСОТ ДЕВЯНОСТО ТЫС СЕМЬСОТ ТЕНГЕ 00 ТИЫН * ', Я М Л * ' ** % * * * * ' PageloM Г 1.44-сурет - Тауардьщ нэтйжешк мэндершщ есеп 6epyi 62

64 2 «Мешц элем!м» деректер корын баскару жуйссш куру Жумыстын максаты: «Менщ элем1м» ДКБЖ алдын ала MS Access-Te жобалап, менгершген теориялык деректерге суйешп Delphi ортасында жуйеш куру. Деректер корын орындаудын тэрт бк 1) Ms-Excel -ден Ms-Access-ке деректерд1 экспорттау; 2 ) Косымшанын басты формасын калыптастыру; 3) ADO технологиясы бойынша Ms-Access ДК-на косылу. Ms-Excel -ден Ms-Access-Ke деректерд! экспорттау. 6 зщ)здщ жумыс папканызда косалкы «MyWorld» атауы бар папканы курьщыз. Ms-Access багдарламасын icke косьщыз. Ms-Access-Ti icxe косу менкмнен «Жана деректер коры» пунктш тандацыз. Экранда «Жана деректер корынын файлы» атты терезе пайда болады. Бул терезеде Ci3 курган «MyWorld» папканы табьщыз жэне оган KipiHi3. «Файл атауы» ерющце «MyWorld» йэнш басыцыз, содан кешн «Куру» батырмасын басыныз. Ms-Access-тщ йшшде «MyWorld: деректер коры» атты терезе пайда болады. Kefieci команданы орынданыз: Файл - Сырткы деректер - Импорт. Пайда болган терезеде Елдер-xls (MS Exsel.xls-де алдын ала жасалган файылды табьщыз). dpi карай шебердщ белгтерш кадагалацыз. Нэтижесшде «MyWorld: деректер коры» терезесшде «Елдер» атты кесте пайда болады. Егер Access-Te манызды элементтердщ атаулары (мысалы, кестелердщ атаулары жэне epic деп те аталатын кесте баганаларынын атаулары) бос орынга ие болса, онда ол dpi карай б1ркатар мэселе тугызуы мумкш. Сондыктан оларды кайта атаумен айналысамыз. «Елдер» кестенщ жарлыгын белплещз, ДК терезесшде «Конструктор» батырмасын басьщыз. Ci3 кесте конструкторы терезесше тусеаз. Бул терезеде «Атауы» epicihe «Орютщ елшемше» 50 мэшн бёлйяещз. Барлык баска epictepre «OpicTin елшемь> касиетшщ мэвдн «зын бутш» etin белплешз. «0pic9» epiciiiin атауын «ЖумысшыЕр», «pic 12» epicihin атауы н «ЖумысшыЭйсл», «Калалык ерлер» epicihih атауын «КалаЕр», «Калалык эйелдер» epicihin атауын «КалаЭйел», «Ауылдык ерлер» epicihin атауын «АуылЕр», «Ауылдык эйелдер» epicihin атауын «АуылЭйел» ден езгертщкз. «Сохранить» батырмасын басьщыз жэне кейб[р деректердщ жогалуы мумкш деген пайда болган ескертуге «Ою> (орындауды жалгастыру) деп жауап 6epini3. Одан кешн конструктордын терезесшде «Вид» (саймандар тактасында шетшен сол жагында) батырмасын шертщге жэне кестенщ 63

65 барлык деректер! ездершщ орнында екещппне кез жетюзшп. Осымен MS Access-пен жумысты аяктаныз. Косымшанын басты формасын калыптастыру. Delphi-д! icke косыцыз жэне жана жобаны курыныз. Оны апдында С1з курган «MyWorld» папкасына сактацыз (UnMain модульдin атауы, MyWorld жоба файлынын атауы). 2.1-кесте - Объектшер нспекторындагы форманын касиетерщщ мэн! Форманын касиет Касиетпн мэш Name fmmain Caption Страны мира Енд! басты формага 3 Panel компонентой орналастырыныз жэне оныц касиеттерш объектшердщ испекторы кемепмен курастырыныз. 2.2-кесте - Panel компонент!н касиеттер! Компонентттщ Касиетпн Касиетпн мэш Касиетпн мэш j касиеп мэш 1-rui Panel 2-rni Panel 3-uii Panel Name ратор pabot paleft Align altop albotttom alleft Height Формага Splitter компонента орналастырыныз (Additional калтасы). Формага тагы да 6ip тактаны орналастырыныз жэне оган келес!дей касиеттердщ мэн!н бектщ з: 2.3-кесте - Splitter компонентой касиеттер! Компонентгпн касиеп Name Касиетпн мэш pamid Align alclient ратор тактасына SpeedButton батырмасын орналастырыныз (Additional калтасы) жэне оган келесщей касиеттерд! 6eKiTiHi кесте - SpeedButton компонентшщ касиеттер! Компонентгпн касиеп Name Касиетпн мэш BtnHelp Top 1 Left Glyph 1... /Load/ Готовые/ Help.bmp 64

66 pamid такгасына RxDBAware бетшен RxDbGrid компонентш орналастырьщыз, онын Align касиетш alclient-та етш бектьиз. pabot тактасына DataControls бетшен DBNavigator компонентш орналастырыныз, оньщ Align касиетш alright-та етш бектщ з. С1зде суретте керсетшгендей шыгуы керек. ADO технологиясы бойынша Ms-Access ДЦ-на косылу. Формага DataAccess бетшен DataSource компонентш жэне ADO бетшен ADOQuery компонентш орналастырыныз. DataSource Компонент! ущщ онын DataSet касиетш ADOQueryl мэншде бекщшз. ADOQuery! компонентш белш керсепшз жэне объеюплер инспеукторында ConnectionString касиет1 жанында кеп нуктеа бар батырманы шерпшз. Экранда теменде керсетшген терезе пайда болады. Онда радиобатырманы Use Connection String басасыз жэне Build-ix uiepreci3. В В Н П Н М ^ :., Л -SoucedCoradion : : - ^ : г щ j С Use Ddtaijnk '.. А 11 G U» Correction S&iig J I 6* 11 OX I Caned и» I 2.1-сурет Байланысты орнату Б здщ апдымызда косылу KacHerrepi таспырмаларыныц коп беги терезес! ашылады. «Деректерда ж!берушь> (Provider) бетшде Microsoft Jet 4.0 OLE DB Provider nyhktici бойынша шерлшз. Содан кейш «Косылу» (Connection) бетше етвдз, немесе «Opi карай» батырмасын басыныз. Кандай жагдайда болсын ci3 теменде керсетшген терезеге шыгасыз: 65

67 Псcreaui'xах»*«^eewwemi Дплмгтвгме fn» У «в»т» CMMWI дл...и am шт Accm* 1. Выберите иг*«im m им* 8i m l» «k r I _J? ВввА>п сведем ся а гя еязла в б и у в» «ы г ГЬлыовчп [Admin I Р Пустой паре па I' **тг...т т т н и ш троп» Промо^гк noovwwe j OK Orwa Огам J 2.2-сурет - Деректермен байланыс касиетгер1 Ken Hyirreci бар батырманы щёртщй, ашылган терезеде из курган MyWorld деректер корын танданыз жэне Открыть (Ашу) батырмасын басыцыз. Проверка подключений (Крсылуды тексеру) батырмасынын кемепмен тексеруд1 етгазицз. Егер тексеру табысты етсе, онда ОК басыныз. ADOQueryl компонента ушш объектшер ннспекторында онын SQL касйетш SELECT* FROM СТРАНЫ мэшнде беют!щз. ADOQueryl компонент! бойынша ею рет шертщ!з жэне пайда болган epictep редакторында тышканнын б1р}нды батырмасын басыныз, содан кешн шыккан менюден «Add all fields» пунктш танданыз. Ci3 б1збен курылган «ЕЛДЕР» кестесшщ ергстертщ толык Ti3iMiH керу керекс!з. ADOQueryl компонентшщ Active касйетш True мэшнде бектщз. RxDBGridl жэне DBNavigator компоненттер! ушш DataSourcel мэншдеп DataSource белг!лен!з. Осыдан кешн RxDBGridl «Елдер» кестесжен деректер пайда болуы керек.. RxDBGridl компонент! бойынша ею рет шерпшз жэне пайда болган e p ic re p редакторында тышканнын 6ipmmi батырмасын басыныз, содан кей!н шыккан менюден «Add all fields» пунктш танданыз. «А may» epici ушш объекплер ннспекторында Width KacHeriH 120 мэшнде бектщз. Жобаны орындалуы ушш icke косыныз. Бас форманын Typi темендел суретте керсетшгендей болуы кажет: 66

68 [Название j Население Мужчины Женщины Дети взрослые j Стас ж 1 АВСТРАЛИЯ Ц 1^ Г 3 (АВСТРИЯ АЗЕРБАЙДЖАН АЗОРСКИЕ О-ВА (ПОР* АЛБАНИЯ [АЛЖИР , 2.3-сурет - Кестеш толтыру Г - И - H + l - M Ф IH Сурауларды куру. 1здеу жэне фильтрация. Ещи багдарлама Access ДК - нык кестесшен жазуларды олардьщ кестеге енпзшу TapTi6iMeH шыгарады. Егер колданушы кесте жазуларын сурыптаудьщ, мысалы багана атауы бойынша тышкан батырмасын шерткеннен кеищ, тфррбш белилеу жэне езгерту мумкщдогще ие болса, колайлы болушы едь TRxDBGrid компонент! Grid-тьщ багана атаулары батырма ретшде колданыла алатындыгын аныктайтын TitleButtons цасиетше ие. Оньщ мэш = False. True мэшнде бул касиетп бек!туде мундай батырманы басуды ендеу ушш жэне атауда батырма касиетгерш бейту ушш OnTitleBtnClick окиганы колдануга болады. TRxDBGrid багана атауларыныц батырмаларымен жумыс. RxDBGridl компонентой кыскаша болуы ушш DBGridl (Name касиетш езгерту) атауын езгерту. Объектшер инспекторында DBGridl ушш True мэшнде TitleButtons касиетш белплещз. ипмагп модулше теменде кара шрифтпен керсетолген ек' ауыспалынын хабарламасын косыныз: var fmmain: TfmMain; NameSortField:string; Desc:boolean; implementation NameSortField ауыспалысы dpi карай сурыптау етоозшетон кесте epicih аныктау уинн, ал Desc есу немесе кему сурыптау T3pTi6in аныктау уинн. колданылады. fmmain формасы уинн теменде керсет!лген окига ендеу mi OnCreate курыныз: procedure TfmMain.FormCreate(Sender: TObject); 67

69 1 NameSortField:= DBGridl, Columns [0]. FieldName; Desc:=False: DBGridl компонентшщ теменде керсетшген OnGetBtnParams жэне OnTitleBtnClick окигалар ендеушшерш курыныз: procedure TfmMain.DBGridlGetBtnParams(Sender: TObject: Field: TField: AFont: TFont; var Background: TColor; var SortMarker: TSortMarker; Is Down: Boolean); if (Field <> nil) and (Field.FullName NameSortField) then if Desc then SortMarker: =sm Up else SortMarker: =smdown; procedure TfmMain.DBGridlTitleBtnClick(Sender: TObject; ACol: Integer; Field: TField); if (Field <> nil) then if NameSortField Field.FullName then Desc:=Not(Desc) else Desc:=False; NameSortField: Field.FullName; Багдарламаны орындау уинн >ске косыныз жэне баганалар атауларында батырмалардьщ жумысын тексерщв багананын жана атауын шерткенде батырма осы багана атауында пайда болуы кажет, ол орналаскан багана атауын шерткенде батарма езшщ сырткы турш езгерту керек. ДК-на SQL сурауынын багдарламалык езгеруь Процедура атауын форма классын бейнелеу Public бел1мше орналастырыныз: Теменде керсетшген процедураны курыныз жэне баска да косалкы багдарламалардьщ хабарламалары жанында unmain модулш1н interface секциясында онын атауын орналастырыныз: procedure TfmMain.NewQuerySQL; var strsql:string; DataSource I. Enabled: False; With ADOQuery 1 do 68

70 ifactive=true then Active: =False; SQL.Clear; strsql := 'SELECT*FROM Страны ORDER BY Страны.'+NameSortField; if Desc then strsql: =strsql+' DESC;' else strsql: =strsql+ '; SQL.Add(strSQL); Active:=True; DataSourcel. Enabled :-True; Озбен куры л га н окигаларды ендеушшерде NewQuerySQL процедураны шакыруды косьщыз: procedure TfmMain.DBGridlTitleBtnClickfSender: TObject; ACol: Integer; Field: TField); if (Field <> nil) then if NameSortField=zField.FullName then Desc: =Not(Desc); end else Desc: False; NameSortField: -Field. FullName; NewQuerySQL; procedure TfmMain.FormCreate(Sender: TObject); NameSortField: =DBGridl. Columns[0].FieldName;Desc; =False; NewQuerySQL; Багдарламаны орындау ущн icke косьщыз жэне баганалардын сурыпталуы ойлагандай icke асып жатканына кез жетк' зщ)з. ДК-на сурауды орындау уакытында багдарлама колданушынын эрекетше жауап бёрмешо жэне оны ол туралы ескеру керек. Rx ютапханасында осыны icteyre кемектесетщ ShowSplash Window арнайы функция бар. Бул функциянын суреттелуш кггапхана бойынша аныктамада окыцыз, содан кешн unmain модулшщ мэтшше теменде кара шрифтпен бел in керсетшген жолын орналастырыныз: var 69

71 fmmain: TfmMain; NameSortField:string;Desc:boolean; implementation uses SplshWnd; f$r *.DFM} procedure TfmMain.NewQuerySQL; var strsql:string; Splash: TForm; Splash ShowSplash Window (Application.Icon, Деректердщ жуктелу!. Сэл moca турыцы...' False, Application.MainForm); try DataSource 1. E n abledf alse; With ADOQuery I do if Active=True then Active: =False; SQL.Clear; strsql: = 'SELECT * FROM Страны ORDER BY Страны.'+NameSortField; ifdesc then strsql:-strsql+'desc; else strsql: =strsql+';'; SQL.Add(strSQL); Active: True; DataSource 1.Enabled ш True; finally Splash.Free; Деректерд! фильтра циялау жэне Ьдеу. Елдерда атауы бойынша йдеу ынгайлылыгы уинн RxDBAware бетшен ратор тактасына TRxLookupEdit компонентш орналастырыныз. Объегплер инспекторында осы компоненту касиеттерше келеш мэндерд1 бер!н.1з: 2.5-кесте TRxLookupEdit компонентш касиеттер! Компонентой касиет1 Касиетшт мэш PopUpOnlyLocate False CharCase ecuppercase Text LookUpSource DataSource 1 LookUpField Название ShowHint True Hint ПОИСК СТРАНЫ

72 ш ш ш ш.& d! I Название Население Мужчины Женщи! А I- ПАНАМА ! ПАПУА-НОВАЯ ГВИНЕ I ПАРАГВАЙ ' ПЕРУ JLl ПРЙЙЙ : i 4 J_l 1 1 и ПОЛЬША j ПО Р ТУГА ЛИ Я jrj! 2.4-сурет - Деректер жиыны M + IГ - Н 1 и Проект! орындауга ж1бергеннен кешн, еркже бул компонентш мэшн енпзу жалгастырылады жэне ол туске боялады, табылмаган жазбага курсор деректер жиынын шыгарады, темендепдеп суретте керсетшгендей: Бул багдарламамен жумыс ictey кез1нде, колданушыны елдер Ti3iMi мен халыктары 100 миллион тургындарымен камтылган, немесе балалар саны шектеугп бар елдер сиякты мысалдар кызыгушылык тудыра алады : Осындау жазуларды эртурл! тэалдер аркылы коруге болады. Eip шекараны курастыру жэне фильтардщ 6ip шартын, колданушыга деректер жиынынын баганасын б!здщ багдарламада усынамыз ол yuiih ол фильтард! колданады Фильтардщ шартына барлык керекта компонентгерд1 баска тактага орналастыру ынгайлы болады. pabot панелше жана панелд1, pafilter панелше ТСИескВох компонентш орналастырып, касиеттерш келеадей турде тузету керек: 2.6-кесте - pabot компонентан касиеттер1 Компонентен касиет! Касиетпн мэш Name pafilter Align alclient 2.7-кесте - TCheckBox компонентан касиеттер1 Компонент1н касиета Касиетпн мэн! Name CheckFiltr Left 1 Top 3 Caption Фильтр no: 71

73 СЪде 2.5-суреттегщей шыгу керек: Bl. J Страны мире И И И Н В В Р * ll J... J Название I Население Мужчины Женщины 1I Дети» А В С ТРА ЛИ Я АВСТРИ Я АЗЕРБАЙДЖ АН АЗОРСКИЕ О-ВА (ПС А ЛБАНИЯ АЛЖ ИР А Н ГИ ЛЬЯ _1 ±Г*' Г ( и л и р л в ' ш в Ь з 1 Ч * 1 - И 1 Щ 2.5-сурет - Фильтрлеу терезее] Багдарлама барысында колданушы ешкандай жана мэндерд! коспайды жэне де шшрмейда, сондыктан да DBNavigatorl - дын букш батырмаларын экранга коюдын еш кажет! жок. Навигатордын сырткы турш езгертем1э. ShowHint касиетшде True копонентасын коямыз, содан кешн Hints касиетшде тж тертбурышты батырманы шертщ!з. Экранда агылшын тшндеп сездер суретте керсетшгендей шыгады, оларды казакшага аударыныз. Багдарламаны гёкё косып сездер дурыс жэне магыналы шыгатынына кез жеткышз. Содан кейш VisibleButtons касиетшщ iiuinneri касиетше навигатордын 4 батырмаларын калдырыныз - l-iui кешу, акыргысын, алдындагысын жэне келескш. pabot. тактасынын он жагына навигаторды юппрейпшз. cbcond жэне edfiltr аттарын мешшктеп, pafiltr панешне 2 компонентаны TComboBox жэне Tedit - та косамыз. cbcond копонент1нщ касиетшде Items-тг тертбурышты батырманы шертш оган «Больше» жэне «Меньше» мэнш 6epiHi3. pafiltr панелшш сырткы KepiHici 2.6 суретше сэйкес болуы керек. Anchors касиетшде cbfiltr, cbcond жэне edfiltr компонеттершщ орналасуына кол жетюзвдз, бос орынды cbfiltr копоненп орналассын. pabot компонент! езшщ елшемдерш езгертпес!'н. 72

74 Страны мира J j Г «ияьтр по;.v-1.^. si i P l J i i I. 1 т! Название ^ I Население Мужчины j Женщины ДеА1 АВСТРАЛИЯ 17CC1ACQ D7Q tt o 4 о О с Т г м с J ' АВСТРИЯ АЗЕРБАЙДЖАН АЗОРСКИЕ О-ВА (ПС АЛБАНИЯ АЛЖИР АНГИЛЬЯ 9200 Больше 1 1 я н о 2.6-сурет Больше мэнш тексеру cbfiltr копонентшш курылымын epicrep ушш куру керек, филь-прдш шарттарын оган коятындай etin. Ол epictep сандык типте болуы керек, ал ёюшшдён, экранга бершген т а 1ммен шыгару керек. ДК - да олардын шын аттары сэйкес келмеу! де мумкш. cbfiltr ehfleymici yniijj OnEnter жагдайын темендегщей etin курамыз: procedure TfmMain.cbFiltrEnter (Sender: TObject): var i: integer; cbfil tr. Items. Clear; With ADOQuery 1 do for i:=0 to FieldCount-I do if (Fields[i] is TIntegerField) then cbfiltr. Iterns. Add(Fields[iJ. Display Label): Багдарламаны ж1бергеннен кешн roim дурыс калыптасуын тексерщз. edfiltr компонентасында колданушы сандык деректерд! енпзедь Колданушы кате ж1бермеу ушш, осы epicte сандардан баска ештене болмауы керек. BepinreH OnKeyPress компонентасына ендеупйш курамыз: procedure TfmMainedFHtrKeyPress (Sender: TObject; var Key: Char); if (Key=Chr(VK_BACK))or(Key=Chr(VK DELETE)) then Exit; if not(key in fo'.. '9']) then Key: = #0; 73

75 Багдарламаны ж1берш, осы компонентанын жумысын 1 тексерщ1з. AdoQueryl компонентасын Filter касиетшде Design-Time орналастырьщыз темендегщей мэнде: [Население]> CheckFiltr компонентасы -ушш темендеп вндеуппш ОпСНск окнгасына кздэыцыз: procedure TfmMain.CheckFUtrClick(Sender: TObject); AdoQuery 1.Filtered : CheckFiltr.Checked; Багдарламаны Ж1берш онын CheckFiltr компонентасында ерекшелшген бщ я ттамде елдер халыктарымен 100 мнллионнан аса тургынымен шыгатынын тексервдз. cbfiltr, cbcond жэне edfiltr компоненттерш колданып, колданушы фильтр аркылы езгерту алуы бхздщ келес] мщдетаоз. Установите в для свойства компонента cbfiltr копонентасында Text касиетшде Design-Time орналастырып, «Население» мэнш, ал осы касиетке edfiltr компонентасында (сто миллионов). CheckFiltr компонентасында ОпСНск окигаларында вндеушшер1мен темендегщей болуы керек: procedure TfmMain.CheckFiltrClick(Sender: TObject); var s,sf: string; ij.longint; //Сандьщ мэны mecepy жэне цайта кодтау: try i: =StrToInt(Tnm(edFiltr. Text)); if i> then ShowMessageCCndbiK, мэн ome улкен!'); AdoQuery 1.FilteredFalse;CheckFiltr.Checked: =False; Exit; except on E: EConvertError do ShowMessagefНеверное числовое значение!'); AdoQueryl.Filtered; False;CheckFiltr. Checked: =False;Exit; //cbfiltr. Text-тан DisplayLabel тэт бойынша FieldName-di i3dey; with ADOQueryl do for j: 0 to FieldCount-1 do if Fields [j].displaylabel = cbfiltr.text then 74

76 sf: -Fields[j]. FieldName, Break; // AdoQuery угим РШегцасиетшщ мэн in цапьштастыру: if CheckFUtr. Checked then s: -'['+cbfiltr. Text + ']'; i f cbcond. Text='Больше' then s: =$+ >' else s:~s+'<'; s: =5+lntToStr(i); A doquery 1. Fitter: =s; AdoQuery 1.Filtered. = CheckFUtr.Checked; Колданушы жаца филь/прмен колданганда eckihi жоюы керек. cbfiltr, cbcond и edfiltr компоненттер! OnChange уш>н ендеуишп курып, оларды келесшерге жазьщыз: CheckFiltr. Checked: False; Эр Typni фильйрлердщ жумысы мен багдарламаньщ орындалуын тексерннз. Филытрд! езгертткенне кешн колданушыга кейб1р деректерд1 енпзуге тура келедьоньщ формасында орын алмау уш н< онын такырыбын колданьщыз. DataSource] компонентасынын OnDataChange окигасын колдану тшмдк ^ С тр ан ы мира (10) Ш Й Ш ш Ш г :,- - -=JDJ2<J ± 1 Р Ш Ш Г i J Название Население Мужчины Женщины Дети I Взроет ж II ГИБРАЛТАР ,Е КАЙМАНОВА КУКА О-ВА С ЛИХТЕНШТЕЙН *! МОНАКО НАУРУ и p <ильтр по- \Цеш»( л>.ены11в» l(! сурет нан Kimi балалар бойынша фильтр zj; j j Л -i-i -i procedure TfmMain. DataSource 1 DataChange(Sender: TObject; Field: TField); Caption:='Страны мира ('+IntToStr(AdoQueryI.RecordCount)+') '; 75

77 end: Багдарламаны орындалу ymih наберыз жэне де онын жумысын тексерщ^з. QuickReport аркылы есеп беруд«курайык. Есеп берудщ мумкшд1ктёр1 деректер базасынын кеп тараган турше жатады. Шыгару батырмалары кагазды документгердщ барлыгында кездесёдк Delphi колданушыга есеп шыгару ушш кептеген ксмпонёнттерда усынады, олар Qreport бетшде жиналган барлык компоненттер. Осы тэж1рибеде QReport компонентасы аркылы есеп берудщ онай TypiH курамыз. Меню катарынан File, New тандаймыз да шыккан терезеде Report пиктограммасын белплеп, Ок батырмасын басамыз. Экранда «QuickReport 1» жана формасы пайда болады. File, Save As танданыз да «MyWorld >папкасында форма ушш модулый unrep атымен сактаныз. unrep модулшде implementation секцнясына теменде кара шрнфтпен бершген жолды косыныз: implementation uses unmain; {$R *.DFM} Инспектор объектюшде QuickReportl формасы ушш енпзу жолын шертодз, ол DataSet касиетше кажет. ТуЫршетш Т131мде fmmain.adoquery 1 магынасын танданыз. Евди fmmain формасына есеп беру ymih жана батырманы орналастырамыз (2.8-сурет). I Страны мира (216) М М Название ~ Население Мужчины j Женщины Детм вэр^ АВСТРАЛИЯ АВСТРИЯ АЗЕРБАЙДЖАН АЗОРСКИЕ О-ВА(ПС АЛБАНИЯ АЛЖИР V АНГИЛЬЯ 9200 Р 5йльтр пь: Населён^ ~- Больше ) сурет - Миллионнан аскан тургындарды фильтрлеу 76

78 Name касиетше BtnRep батырманы орналастырып, Hint жэне ShowHint касиеттер! аркылы квмекп орналастырамыз. Енд1 BtnRep батырмасын шерткеннен кешн экранда есеп берудщ формасы шыккандай эрекет ету кажет. Ол уш!н BtnRep батырмасы ушш теменде керсетшген OnClick окиганы ондеушнп курыныз: procedure TfmMain.BtnRepClick(Sender: TObject); QuickReportl. Preview; end: Содан кешн багдарламаны орындалуы уш»н ж^берыз. Экранда одан эр! керсетинп отыргандай хабарлама пайда болатыны бэлюм. Ол хабарламага жауап ретшде Yes батырмасын басыныз да жэне жобаны кайта Ж1берщ1з. Енд! BtnRep батырмасын шерткеннен кейш экранда суретте керсетиггендей б!здщ болашак есеп беру1м1здщ формасы шыгуы керек: В (В [а э» < i м [ Щ # н а? [ ciose z l Раде 1 of 0 /л 2.9-сурет - Баспага шыгару алдындагы керу Есеп берудщ e 3i эл1 жок, 6ipaK формада б1ркатар батырмаларды Kepin отырмыз. Олардын устшен жасырын кемек 6epymi свздерд1 оку ушш тышканнын курсорын журпзщь. Енд1 Design-time-га QuickReportl формасына оралайык. Б!здщ алгашкы есеп 6epyiMi3fli кура бастайык. QuickReportl формасына QRBand компонентш орналастырыныз. 2.8-кесте QRBand компонентш касиеттер! Касиет Катиеттж мэш BandType rbdetail Name BandDetail 77

79 Одан кешн BandDetail-ra QRDBText ею компонентш орналастырыныз. Екеу1 ушш fmmain.adoqueryl-да DataSet касйетш орналастырыныз, ал DataField касйетш 6ipiHmici ушш Атауында, еюншщ ущщ Халкында орналастырыныз. QuickReportI формасына тышканнын он жак батырмасын шертщз жэне пайда болган менюден Preview пунктш танданыз. Экранда келей турге жакын форма пайда болуы керек: шшешяяшшяишяшштшттттщ*' ''1t w " 1: ' 1 9 в И 4 В 0 ^ раю - in i «ii. i АВС ТР АЛИ Я АВС ТР И Я АЗЕРБАЙДЖ АН М О Р С К И Е О -В А (П О Р Т.) 2Э АЛБАНИЯ АПЯМ Р АНГИЛЬЯ 8200 А Н ГО Л А АН Д О Р Р А ;Page 1 of 9 АНТИГУА И БАРБУДА z J 2.10-сурет - Есеп 6eTi Мал1меттер корында «MyWorld» базасын куру. Багдарламаны баска 6ip папкага немесе баска компьютерге апару керек деп ойлайык. BDMyfVorld.mdb фаылынын жолы езгертшсе, онда ci3re дурыс емес деген хабар шыгады да, багдарлама жумыс [стёмёйдь Багдарлама ез жумысын мшдетп турде келесшерден бастауы керек: а) файл мен ДК багдарламасымен 6ip папкада сакталып турганын тексер; э) erep 6ip жерде болса, онда жумысты бастау керек; б) эйтпесе, экранга ДК*дагы файылды 1здеу диалог терезесш шыгару керек. в) егер де колданушы диалогты терезеде ДК-нын файылын тапса, онда жумысты жалгастыруга болады. г) егер де файыл табылмаса, онда жумысты аяктау. г) осы алгоритмд1 icke асырып керешк. 78

80 ДК мен динамикалык байланыс. Модульдщ формасында ауыспалы жолдык тийи жэне оган ConnectionString касиетш деп AdoQueryl компонентасын менишктешк. Ол ушш Ctrl+C пернелеруйлеамдшп аркылы объектшер инспекторларыньщ касиетш Kemipin, содан кейш модульдщ формасына койьщыз. Жол узак болгандыктан оны б1рнеше жолдарга белу керек болады. Нэтижесшде азде келесщёй шыгуы керек (карамен белпленген): var fmmain: TfmMain; NameSortField: string; Desc.boolean; var ConStr: string 'Provider=Microsoft.Jet. OLEDB. 4.0;Password= User ID=Admin;Data ' + 'Source-C:\Mou Документы \MeaHoe\BDMy World. mdb; Mode-Share Deny None;Ext' +'ended Properties="";Jet OLEDB: System database="";jet OLEDB:Regis' + 'try Path="";Jet OLEDB:Database Password="";Jet OLEDB.Engine Type'+'=5;Jet OLEDB:Database Locking Mode= I ;Jet OLEDB: Global Partial Bu' + 'Ik Ops=2;Jet OLEDB.Global Bulk Transactions=1 ;Jet OLEDB.New Data' + 'base Password="";Jet OLEDB.Create System Database False; Jet OLED'+'B: Encrypt Database=False;Jet OLEDB :Don'U39't Copy Locale on Compact='+ 'False; Jet OLEDB. Compact Without Replica Repair=False;Jet OLEDB:S' +'FP=False'; implementation uses SplshWnd, unrep; Мэтшнщ жолдары баскадай косылып турулары да мумкш, ол непзщен провайдерлерге (ci3, ДК мен байланыскан) байланысты. ДК-нын файылында уйымдастырылган жол: $оигсе=с:\мои Документы \MeaHoe\BDMy World, mdb; Жол isbw/'с^символыньщ б1р1здшгшен басталып нуктел1 ут1рмен аякталады. Айтылганды жана 6ip багдарлама iiiiihfleri багдарламаны жасайтын, жолдардын киылысуында жэне оны баскага ауыстыруында колданайык. Директивадан кешн модуль формасына {$R *.dfm} теменде бершген Мэтшд1 енпзодз: {$R *:DFM} procedure ChangeBasePathfvar scon:string;sbase:string); var j l,j2: integer; ji:=pos('data Source=',scon); 79

81 ifjl>0 then repeat lnc(fl): until scon[fl]='='; lnc(jl);j2:=ji; repeat Jnc(j2); until scon[}2]=';'; DeietefsconJ 1 J2-j 1); lnsert(sbase,scon,j 1); function FindFileBD (nmfilebd: string;var scon:string; v a r dig: TOpenDialog): string; var sb:string; sb:= ExtractFilePath(ParamStr(0))+ nmfilebd; ifnot(fileexists(sb)) then //Сухбатты баптау: dig. Filter:='Файл ' +nmfilebd+ * '+nmfilebd; dlg.title :='Найдите файл базы данных! ; dlg.initialdir:=extractfilepath(paramstr(0)); if dlg.execute then sb:- dlg.filename; ChangeBasePath(scon,sb); end else ShowMessageCHe найден файл БД:'+U13#10+sb+#13M10+ До свидания sb:-"; Result:=sb; if sb<> " then ChangeBasePath(ConStr,sb); Dialogs бетшен TOpenDialog компонентш формага орналастырыныз. Name касиетше dlgbd магынасын бервдз.

82 Енд) темендеп шрифтпен жазылганды ендерщ OnCreate формасына енгашз: procedure TfmMain.FormCreate(Sender: TObject); var sbase.string; sbase: FindFileBDf'BDMy World, mdbconstr, dlgbd); if sbase<> " then ADOQueryl. Active :=False; A DOQuery 1. ConnectionString;=ConStr; ADOQueryl.Active := True; NameSortField: DBGridl. Columns [0].FieldName;Desc: = False; NewQuerySQL; end else Application. Terminate; Проект компиляциясын (CTRL+F9) орынданыз. Егер де кате болмаса проект! сактаныз, меню катарынан File, Close All тандап багдарламанын жумысын тексерхщз оны проводник аркылы ж1береаз. Багдарлама дурыс жумыс icreimhihe коз жетюз1ц1з, файл BDMyWorldmdb багдарлама сакталган жерде турса. Ол ушш 6ip жерде Temp папкасын курып оган BDMyWorld.mdb файлын жэне MyWorld.exe keiuipin алыныз. Temp папкасынан BDMyWorld.mdb файлын жойып тастап MyWorld.exe кайта ж1бер1щз. Осы терезеде ез папкацызга барыныз да BDMyWorld.mdb файлын тауып, «Открыть» батырмасын басьщыз жэне багдарламанын дурыс жумыс 1стейтшше коз жетк1з1н>з. Багдарламаны жауып оны проводник аркылы ашьщыз. Пайда болган диалогты терезеде «Отмена» батырмасын басыныз, сол кечде экранда келесщей мэл1мет шыгуы керек: Не найаен Файл БД C:WL\MYWORLDVrEMP\BDMjWodd mdb До свидания! ~ 6Г~ 2.11-сурет - Кателк туралы терезе 81

83 Emu Temp папкасына BDMyWorld.mdb файлын кеипрш алып. MyWorld.exe кайта ашыныз. Багдарлама ешкандай кедерпаз жумыс жасауы керек. INI-файлдары (Теорнялык мэл1мдемелер). ДК - ын окыту сыныбынын басты жуйелж компьютерше орналастыру керек деп жорамалдайык, ал баска компьютерлерге тек кана багдарламаны гана коямыз (файл сервер эдасг). Багдарламаны ашу барысында ол эр дайым окыту компьютерлершде ДК - ын 1здеу жайлы диалогты терёзееш шыгарып отырады, колданушыга ол кедерп тугызады. Осы жагдайдын алдын алу шартына INI-файлын колдану болып табылады. Бул файлдар кептеген ОЖ WindowsTa баска да багдарламаларды К РУ жагдайда колданылады. Delphi - да INI-файлмен жумыс «TIniFile» классынын «inifiles» модуш аркылы жузеге асады. INI файлдарында секциялар мен кщттёр бар, оларды аттары аркылы табады. Windows папкасынан TELEPHON.INI деректер файлын мысалга келторешк: [Providers] NumProviders=2 NextProviderID=3 ProviderIDO=l ProviderFilenameO=UNIMDM.TSP ProviderIDl=2 ProviderFilenamel=WAN.TSP [Provider 1] NumLines=l NumPhones=0 [HandoffPriorities] RequestMakeCall=DIALER.EXE Курылган файлда 3 секция - [Providers], [Provider!] жэне [HandoffPriorities] бар екещцгш керемв Секция аттары -пк тертбурышты жакшага алынган. Секциялар шшде рлттер орналастырылган, 3p6ip жолдын тецсгадшен кешн сол жагынан кшттщ аты, ал он жагынан онын магынасы. 2.9-кесте - Heri3ri TiniFile кластарына Функциялар Тусшпстеме 1 2 Create Ini-файлын оку немесе жазу ушш ашу Free Ашылган Ini-файлын жабу

84 к е с т е - Ж а л г а с ы 1 2 UpdateFile Файлдан дисюге бершген деректерд1 жацарту SectionExists Бершген секцияда файлдын бар екендшн текссру ValueExists Бершген секцияда кшттш файлда бар екенд1гш текссру ReadSections Барлык секциялар бар екендтн ал у EraseSection Бершген секцияны онын барлык кшгтер1мен жою DeleteKey Бершген секцияда кштп жою ReadSection Бершген секциянын кшттерш any ReadSection Берглген секциянын барлык кшгтершщ (аггарымен) Values магынасын алу ReadString Жолдык магынадан кшттер аркылы бершген секциянын оку ReadBool Логикалык магынадан кшттер аркылы бершген секциянын оку ReadDate Кшт аркылы бершген секцияда кунд1 оку ReadDateTime Кшт аркылы бершген секцияда куид1 жэне уакытты оку ReadFloat Кшт аркылы бершген секцияда аныкталганды оку Readlnteger Кщт аркылы бершген секцияда бупн магынасын оку ReadTime Кшт аркылы бершген секцияда уакытты оку WriteString Кшт аркылы бершген секцияда (жацару) жолдык магынасын жазу WriteBool Логикалык жазбаны бершген секциянын к и т не жазу WriteDate К\нд\ бершген секциянын кштше жазу WriteDateTime Уакыт пен кунд1 бершген секциянын кштше жазу WriteFloat Аныкталганды бершген секциянын юлтше жазу Writelnteger Бутш магынаны бершген секциянын кштше жазу WriteTime Уакытты бершген секциянын кштше жазу INI-файлын К РУ- Delphi менюшде File, New - д,\ танданыз да шыккан диалогты терезесшде «New» - дан «Text» белпсш тацдап, «ОК» басьщыз. Код редакторында 2 бегл K0peci3, олардын 6ipeyi «Filel.txt» болып аталады (2.12-сурет). В C :\M om док«мвктычникитач004\! unmain Fie1.txt j Г~-гГТ~Г [insert сурет - Файлды керсету л Г 83

85 Delphi менкмнде File, Save As тацлацыз да, пайда болган диалогты терезеде жана мэтшдж файлды осы папкада сактаныз, «МуWorld.INI» аты аркылы сакталган «MyWorld» npoekri орналаскан жерде (2.13-сурет) Ёнд! мэтшдш редакторда MyWorldJNI бетшдё темендеп eki жолды басыныз, [Database] PathBase=C :\Мои документы\т emp\bdmyworld.mdb «Сохранить» батырмасын басыцыз. Папка: I 3 MyWotld И «й о - jomjiv/orid 9] MyWorld-cfg MyWofld.dof M y W o H d Ф " MyWoild D MyWoild.ies MyW«ld_4 И unmain.~dfm В unmain ~pat [Ё3 unmain dcu jjp unmain unmain Э unrep.~dfm B u rfle p.~ p e s й Л unreadcu ф unrep unrep _?JxJ Имя Файла; MyWotldlNl Сохранить ±>1 1 ил Файла: A ny ("*) Отмена Справка 2.13-сурет - Сакгау Tepe3eci INI-файлын курдык, онда 6ip секция - Database жэне 6ip кшт - PathBase бар. Осындай файлды «Блокнот» багдарламасы аркылы куруга да болады, 6ipaK Delphi де курган ынгайлы. INI-файлын колдану. Енд5 багдарлама жумысынын алгорит1мшщ басын кёлёю турдей ауыстырамыз: багдарлама ашылган жерден INI-файлын осы папкада 1здейм1з. Егер де ол бар болса, оны INl-файлында керсетшген ДК Я нын жолына сэйкес ашамыз. Егер де ол жок болса, оны INI-файлында ДК - нын жолы болмайды да келеа пунктке кешекпз. Егер де ашылган папкада INI-файлы жок болса, онда бастапкы пунктке К0шем1з. Егер де INI-файлы болса жэне де Database секциясы немесе PathBase Kurri табылмаса, онда кате туралы мэлшет шыгарамыз да келес! пункт'ше кёшемгз. 84

86 Ашылган багдарлама папкасында ДК файылын 1здейм1з. Егер ол болса, оны ашып жумысты орындаймыз. Егер де ол жок болса, онда пункт1не кешем i3. ДК - ынын файылын табу уинн экранга диалоггы терезесш шыгарамыз. Егер кодцанушы оны диалогты терезеде таба алмаса, онда олармен коштасып жумысты аяктаймыз. Колданушы ДК ынын файылын диалогты терезеде тапса, онда оны багдарламада бершген жолды сактау керек. Нактыландыратын жауапты табылган жолды INI-файлына сактаймыз. Табылган ДК - мен байланысамыз да багдарламаньщ жумысын бастаймыз. Жана алгоритмд! тексеру жэне нактылау ушщ темендепж орындаймыз: 1) колданылатын модульдерге inifiles модулih косамыз; 2) модуль формасынын мэтщше езгертулер енпзем1з, темендеп кара шрифтпен жазылгандарды: function FindFileBD(nmFileBD, nmlmfil: string; var scomstring; vardlg.topendialog): string; var sb,sini:string;inifil: TiniFile; sb:= ";slni: =ExtractFilePath(ParamStr(0))+ nmlnifil; if FileExists(sIni) then IniFil: TiniFile. Create(slni); try sb:=inifil.readstring('database', PathBase, "); if sb=" then ShowMessagef'Ошибка INI-файла l'+#i3#io+sini); finally IniFil.Free; if sb=" then sb:= ExtractFilePath(ParamStr(0))+ nmfilebd; i f Not(FileExists(sb)) then //Настройка диалога: dig. Filter:='Файл ' + nmfilebd+ ' '+nmfilebd; dig. Title : 'Найдите файл базы данных!'; dlg.initialdir:=extractfilepath(paramstr(0)); if dig. Execute then sb:=dlg.filename;changebasepath(scon,sb); 85

87 if MessageDlg('CoxpaHumb путь к БД в настройках программы?', mtconfirmation,[mb Yes.mbNo], 0)-mrYes then IniFil. = TiniFile. Create(slni); try IniFil. WriteString('Database\ PathBase, sb); except ShowMessage('Outu6Ka INI-файла!'+#l3itlO+sIni): IniFil.Free; end else ShowMessagef'He найден файл БД:'+#13#10+5Ь+#13#10+До свидания!'); sb: "; Result: =sb; if sb<>" then ChangeBasePath(ConStr,sbj; procedure TfmMain.FormCreate(Sender: TObject); var sbase.string; sbase:=findfilebd('bdmyworld.mdb','myworld.inr,constr,dlgbd); if sbase<> " then ADOQueryl.Active: False; ADOQueryl. ConnectionString :=ConStr; ADOQueryl.Active :=True; NameSortField: =DBGridl.Columns fojfieldname;desc:-false; NewQuerySQL; end else Application. Terminate; Назар аударыныз! Kejieci кадамга бармай турып, Active касиетше ADOQueryl копонентасына False мэнш 6epini3. Колданылган модельдерге inifiles модулж косыцыз жэне проект! компилировать ету керек. Менюдан CTRL1-F9 тацдап жэне далее, кате болмаса келен icri орындацыз. Багдарламаны проводник аркылы ж1берш, темендеп таямдер аркылы оныц жумысын тексерцдо: - ДК-нын файлы да INI-файлы да icke косу папкасында жок. 86

88 - Тек кана INI-файлы icke косу папкасында бар. - ДК'Нык файлы да INI-файлы да icke косу папкасында бар. - INI-файлынын шннде кате бар, мысалы, Database секциясы жок, немесе PathBase к и т, немесе ДК*на жол дурыс керсет1лмеген. Кандай да жагдайда багдарлама жогарыда жазылган алгоритмге сай жумыс icteyi кажет. «MyWorld» ДК куру: 1) жана epic куру жэне бастапкы форманы баптау; 2) калкып шыгатын менюшщ тоскауыл жэне руксат командалары; 3) калкып шыгатын меню командаларын программалау; 4) Drag&Drop технологиясы бойынша графикапык файлдарды тасымалдау. BDMyWorld.mdb жобасы бар папканы кайтарыныз.деректер корында манызды ролд! Memo- epici аткарады. Бул pic курамында елшем! аныкталмаган кепжолды мэтш болады. Жана epic куру жэне бастапкы форманы баптау. Ms-Accessте BDMyWorld.mdb файлын ашьщыз жэне содан кейш конструктор режимшде «Страны» KecTeciH ашьщыз.. Осы кестеде жана epic курып, 2.14-суретшдепдей толтырьщыз. Н и поля Типданшх ГорМуж Числовой О п к а т п ГорЖен Числовой СелМуж Числовой СелЖен Числовой flag Попе W H O Изображение флага страны Мар Поле MEMO Изображен карты страны ГОТО Поле MEMO Фотография (например, Красная Площадь, Эйфелева башня и т.п.) 2.14-сурет - Деректер тиш Ms-Access-Ti жауып, Delphi-re оральщыз. Щелкните дважды мышью по компоненту ADOQueryl компононтш eki рет шертш, содан кешн пайда болган epicii редактрлеу терезесшде тышканньщ он жагын шертвдз. Калкып шыгатын менюден «Add Fields» пунктш тавдадыз. Жана epictep т1з1мде болуы керек.редактор epicih жабьщыз. DataControls бетшен б1здщ бастапкы формамыздьщ проект! сшдеп DBImage-дЫ 3 компонентше paleft панелш ретпен жогарыдан темен орналастырыныз. Инспекторе объектте барлык жана компоненттердщ DataSource Касиетше DataSource 1 магынасын орнатьщыз. ShowHint жэне Stretch 87

89 касиеттерше True магынасын орнатыныз. Сонымен катар темендеп кестеде керсетшген касиеттерд1 де кестедепдей етш орнатыныз: 2.10-кесте - Компоненттердщ KacHerrepi Компоненттердщ Касиеттерд1н мэт атауы DataFild Align Hint DBImage 1 Flag altop ФЛАГ DBImage2 Map altop КАРТА DBImage3 FOTO alclient ФОТОГРАФИЯ 1 Калкып шыгатын квмек беруцп тез калкып шыгуы уш>н бастапкы формадагы OnCreate ецдеугшсшщ соцына теменде калын KapinneH белпленген процедураны жазыныз: procedure TfmMain.FormCreatefSender: TObject); var sbase: string; sbase: =FindFileBD('BDMy World, m d b My World. INI', ConStr, dlgbd); if sbase<>" then ADOQueryl.Active :=False; ADOQueryl. ConnectionString: ConStr; ADOQueryl.Active.-True; NameSortField: =DBGridl. Columns [0].FieldName;Desc: False; NewQuerySQL; end else Application. Terminate; Application.HintPause:=0; DBImage компонентшщ формасынын елшемш езгерткенкезде эркашан б1рдей би1кт1кте болуы ушш, OnResize формасынын теменде керсет1лген процедурасын жазьщыз: procedure TfmMain.FormResize(Sender: TObject); DBImage I. Height: -paleft. Height div 3; DBImage2. Height: -paleft.height div 3; Жана epicke cyperri графикалык файлдарды ашу жолы аркылы орналастырамыз, сонымен катар алмасу буферщщ кемеп аркылы. 9p6ip компонент ymih кнопка куру ьщгайсыз болгандыктан, керек комаадаларды орындайтын кдгщымалы меню курамыз. Win32 бет!нен ImageList компонент1н формага орналастырамыз жэне Name касиеине imclip магынасын тандаймыз, ал Width жэне Height касиеттерше 16 деген мэн 6epmi3, Содан кешн осы объектке

90 ею рет шертш, пайда болган Add кнопкасын басу аркылы../student/3ar0t0bkh/butt0ns папкасынан табуга болатын керек cyperrepai косыныз: - Selected Image ~ Tfanipsrent Color images Tie с1г4ог.е Fill Color Iflone z i ~ 3 Option* P Сщр С Stretch CeiVer :_J ок Cancel Help *1 Lil Add jdelete u э leai у 10 X Ш Export сурет - Диалогтык терезе Тандалган 12 cyperri темендеп кестедепдей (2.11-кесте) рет1мен орналастырыныз кесте - Суреттердщ орналасу peti Cyperi бар файл аты Жиындагы (индекс!) penenabled.bmp 0 OpenDisabled.bmp 1 PasteEnabIed.bmp 2 PasteDisabled.bmp 3 CopyEnabled.bmp 4 Copy Disabled. bmp 5 CutEnabled.bmp 6 CutDisabled.bmp 7 SaveEnabled. bmp 8 SaveDisabled.bmp 9 ClearEnabIed.bmp 10 ClearDisabled.bmp i Формага РорирМепи компонентш орналастырыныз жэне онын Name касиетше MenuCIip магынасын берщз. Кейш оган ек! рет шертш, дизайнер менкмнде теменде керсетшген пункттерд1 формапап оган темендеп кестеде керсетшген касиеттерд1 берщп: 89

91 2.12-кесте - Батырмалардын атаулары * Name Caption Imagelndex Shortcut cmopen Открыть 0 F3 cmpaste Вставить 2 Ctrl+V cmcopy Копировать 4 Ctrl+C cmcut Вырезать 6 Ctrl+X cmsave Сохранить как... 8 Shift+F2 cmciear Очистить 10 Ctrl+Del DBImagel, DBImage2 жэне DBlmagei компоненттержщ РорирМепи касиетше МепиСИр магынасын 6epiHi3. 1П н ллвлнмл QSr Открыть F3 В» Вставить Ctrl+V Efe) копировать Ctrl+C _ X Вырезать Ctrl+X С У Сохранить как... SNft+F2 ^ Д о ч и с т и т ь C trl+d el j I [AHI ИНЬН 2.16-сурет - Тазарту командасы \ Нас Калкып шыгатын меннлшц тоскауыл жэне руксат командалары. Мумкш болатын руксат етшген командалары: - «Открыть» командасына эркашан руксат етшедо; - «Вставить» командасына руксат етшедо, егер фафикалык сурет алмасу буфершде болган жаггдайда; - ал калган командаларга руксат етшед«, егер ДК-нын сэйкес epicihiit курамында сурет болган жагдайда; Меню пайда болатыннын алдындагы ОпРорир жагдайын колданамыз. Онда ДК-нын кай epiciaae тексершетш бершгендер бар екенш мшдегп турде аныктау керек.. Кдлданылатын модульдер курамына clipbrd модул!н косыныз. Формада СИрМепи компонентш белгшещз жэне инспектора объект кемепмен ОпРорир жагдайынын теменде керсет'шген ендеуийсш курыныз: procedure TfmMain. MenuClipPopupfSender: TObject'); var j.integer; dbim: TDBImage; //меню орналасцан компонентке ci.ime.me 90

92 nmfield: string; //колшонентпен цосылган ДК opiciuiif атауы tmf: TMemoField; //колшонентпен байпаиысцан ДК-ныц opicine chmc.ue nmfield: = "; dbim: =nil; // Запрет разрешение пунктов меню: With MenuClip do Items[1].Enabled : Clipboard.HasFormatfCF PICTURE): //Вставка if PopupComponent is TDBImage then db/m: = (PopupComponent as TDBImage): if dblmoni! then nmfield: =db!m. DataField; tmf: =dbim. DataSource. DataSet. FieldByName(nmField) as TMemoField; if tm fo n il then if tmf.blobsize>0 then Items[2].Enabled :=True else Items[2].Enabled. = False; //Копирование Items[3].Enabled :=Items[2J.Enabled; //Вырезка Items[4], Enabled: Items[2]. Enabled; //Сохранение Items[5]. Enabled :=Items[2]. Enabled; //Очистка //Присвоить номера картинок для пунктов меню: for j:=0 to Items.Count -I do if Items [/]. Enabled then Items [/JJmagelndex: 2 *j else I terns UJ. I mage Index;=2 *j+1; Программаны»ске косып, оны тексервдз. Егер алмасу буфершде графикалык сурет бар болса, онда кою командасы руксат етшген болып есептелед!, ал баска жагдайда тоскауыл койылган болып есептеледь Калкып шыгатын меню командаларын программалау. Формага Dialogs терезесшен OpenPictureDialog жэне SavePictureDialog, компоненттерш орналастырыныз, содан кейш олардьщ Name касиетше dlgopenlmage жэне dlgsavelmage магынапарын менпйктещз. Дизайнер менюшде щелкните по пункту «Открыть» пункт1 бойынша шертш, теменде керсеплген процедураны курьщыз: procedure TfmMain. mcopenclick/sender: TObject): var dbim: TDBImage, 91

93 if Not(dlgOpenlmage. Execute) then Exit; dbfm: =nil; With MenuClip do if PopupComponent is TDBlmage then dblm. ** (PopupComponent as TDBlmage): if dblm<>nil then if dblm.datasource.state <> dsedit then dblm.datasource.edit; dblm. Picture.LoadFromFilefdlgOpenlmage.FileName); dbim.datasource.dataset.post; Программаны орындауга япберщь жэне «Открыть» командасыныц жумысын кез- келген сурет аркылы тексерыз. Жогарыдагыдай менюдщ баска пункттер! уш*н теменде керсетшген процедураны курыцыз: procedure TfmMain.mcPasteClick(Sender: TObject); var dblm TDBImage; dblm:=nil; With MenuClip do if PopupComponent is TDBlmage then dblm:-(popupcomponent as TDBlmage); ifdblmonil then try dblm.pastefromclipboard; dblm.datasource.dataset.post; except ShowMessage('Ey<pepde керек сурет жоц. ); procedure TfmMain.mcPasteClickfSender: TObject); var dblm: TDBlmage; ifnot(clipboard.hasformat(cf_picture)) then Exit; dblm:=nil; With MenuClip do if PopupComponent is TDBlmage then dblm:=(popupcomponent as TDBlmage); if dblm<>nil then

94 try dblm.pastefromclipboard; dbim.datasource.dataset.post; except ShowMessagef'Ошибка сохранения рисунка. ); procedure TfmMain.mcCopyClick(Sender: TObject); var dbim: TDBImage; dblm:=nil; With MenuClip do if PopupComponent is TDBImage then dbim:=(popupcomponent as TDBImage); if dblm<>nil then dbim.copytoclipboard; procedure TfmMain.mcCutClick(Sender: TObject); var dbim:tdbimage;nmfield:string; dblm:=nil; With MenuClip do if PopupComponent is TDBImage then dbim:=(popupcomponent as TDBImage); ifdblm<>nil then dbim CutToClipboard;nmField: =dbim.datafield; if dbim.datasource. State <> dsedit then dbim.datasource.edit; dblm.datasource.dataset.fieldbyname(nmfield). Clear; dbim.datasource.dataset.post; procedure TfmMain.mcSaveClick(Sender: TObject); var dbim: TDBImage; ifnot(dlgsaveimage.execute) then Exit; dblm:=nil; With MenuClip do if PopupComponent is TDBImage then dbim:=(popupcomponent as TDBImage); try ifdblm onil then dbim.picttire.savetofile(dlgsavelmage.filename); 93

95 except :Я 1 Show Message ('Фахтга жазу барысындагы цате:'+#13#10 +dlgsaveimage.filename); procedure TfmMain.mcCIearCHck(Sender: TObject); var dbim: TDBImage;nmField:string; dblm: nil; With MenuClip do if PopupComponent is TDBImage then dbim:=(popupcomponent as TDBImage); ^ j.-;i: j if dblm<>nil then nmfield: -dbim.datafield; if dbim.datasource.state <> dsedit then dbim.datasource.edit; dbim.datasource.dataset.fieldbyname(nmfie!d).clear; dbim. DataSource. DataSet. Post; ДК-ын суреттермен толтыру ушш сонымен катар эпемдеп елдердщ туларын..\student\3arotobkh\dataworld папкасынан!здеуге болады. Drag&Drop технологиясы бойынша графикалык файлдарды тасымалдау. Егер колданушы проводниктен немесе б1здац жобага баска программадан графикалык файлдарды тышкын аркылы тасымалдауга мумюндж болса жаксы болар едь Бул тэс!л Windows технологиясы бойынша «Drag and Drop» деп аталады. Keneci алгоритмд! орындаймыз: 1) формага орналастырган файлдын атын аныктаймыз; 2) «маберу» кёзшдеп тышканнын координаттарын аныктаймыз; 3) бул сэтте тышкан курсоры кай компонентте болганын аныктаймыз; 4) бершген компонент файлды «кабылдай» алады ма дегещц тексерем1з; 5) егер иа болса, онда файлды ендеу ушш сэйкес эдгсто шакырамыз. Колданылатын модульдер Ti3iMiHe ShellAPI модул1н косьщыз. Форманын модулынщ private жэне public юлтт1к сездер1н1н арасына калын шрифтпен ерекшеленген мэтщдц орналастырыныз: private { Private declarations } 94

96 drfile: array[0..256] o f char; XYPoint.TPoint; nmcomp: string; protected procedure WMDropFiles (var Msg: TMessage); message wmdropfiles; public { Public declarations } OnCreate формасынын евдеуипсше теменде процедураны косыцыз: procedure TfmMain.FormCreate(Sender: TObject); var sbase:string; sbase: =FindFileBD('BDMy World, mdb', 'MyWorld. INI', ConStr, dlgbd); if sbase<>" then ADOQueryl. Active :=False; ADOQueryl.ConnectionString :=ConStr; ADOQueryl.Active.-True; NameSortField: DBGridl.Columns [Oj.FieldName; Desc:=False; NewQuerySQL; end else Application. Terminate; Application.HintPause :=0; DragAcceptFiles (Handle, True); WMDropFiles процеурасынын атауына мэтгндпс курсорды орналастырыныз. Мрдей уакытта CTRL+SHIFT+C-ri басьщыз. Delphi теменде керсетшген шаблонды курады.осыган калын шрифтпен ерекшеленген жолды тер!щз: procedure TfmMain. WMDropFilesfvar Msg: TMessage); DragQueryFile(THandle(Msg. WParam), 0,drFile,SizeOf(drFile)) ; DragQueryPoint(THandle(Msg. WParam),XYPoint); DragFinish(THandle(Msg. WParam)); //цапыпка Kenmipy жопы: Caption: =String(drFile)+'-'+IntToStr(XYPoint.x) + - '+IntToStr(XYPoint.y); Жобаны орындауга ж1бер1п жэне ярлыктарды жумыс столынан формага тасымалдап, форманын атауында файлдын «дурыс» аты жэне тышканнын координаты дурыс бершген же кез жетк1зу керек. 95

97 WMDropFiles процедурасына кальщ шрифтпен ерекшеленген жоддарды косыцыз жэне (отладочную) жолды темендепдей етш езгертвдз: procedure TfmMairt. WMDropFilesfvar Msg: TMessage); varj.integer; R:TRect; ctr.'tcontrol; nmcomp:="; ctr:=nil; DragQueryFile(THandle(Msg. WParam),0,drFiletSizeCf(drFile)); ' DragQueryPoint(THandle(Msg.WParam),XYPoint); DragFinish(THandle(Msg. WParam)); fo rj := 0 to ComponentCount-1 do if (Components[j] is TDBImage) then ctr:= Components[)] as TControl; R-Left: =ctr.leftjrpaleft.left;r. Top :=ctr. Top+paLeft. Top; R.Right: =&Left+ctr. ClientWidth;R.Bottom : =R. Top+ctr. ClientHeight; With R do if (XYPoint.x >Left) and(xypoint.x <Right) and (XYPoint.y >Top) and(xypoint.y <Bottom) then nmcomp: = ctr. Name; Break; ifnmcompo " then ShowMessage(nmComp); //Отладочная строка: fmmain. Caption: =IntToStr(XYPoint.x) + -'+IntToStr(XYPoint.y)+'/'+ IntToStrfR Left) + -'+IntToStr(R. Top) + -'+IntToStr(R. Right) + - +IntToStr(R.Bottom); Жобаны кайтадан орындауга ж1берщь жэне тасымапдау аякталганнан кейш программа DBImage компонентшщ атыиыц дурыстыгы туралы хабар беретшше коз жетюзвдз. Жумыс сешмд] болуы ушш колданушыга *.Ьтр кенейтшу! бар файлдарды тасымалдауга руксат берем13. Ол ушш мэтшге теменде калын шрифтпен бер1пген жолды косып, (отладочную) жолды алып тастаныз: procedure TfmMain. WMDropFilesfvar Msg: TMessage); varj.integer; RTRect; ctr-.tcontrol;

98 dbim: TDBImage; nmcomp:=";ctr: =nil;dblm: -nil; DragQueryFile(THandle(Msg.WParam),0,drFile,SizeOf(drFile)); DragQueryPoint(THandle(Msg.WParam),XYPoint); DragFinish(THandle(Msg. WParam)); for j := 0 to ComponentCount-1 do if (Components[j] is TDBImage) then ctr:= Components [j] as TControl; R.Left : ctr.leftjtpaleft.left;r.top :=ctr.top+paleft.top; R. Right :=^ \ R.Left+ctr.ClientWidth;R.Bottom : =R. Top+ctr. ClientHeight; With R do i f (XYPointx >Left) andfxypoint.x <Right) and (XYPoint.y >Top) andfxypoint.y < Bottom) then nmcomp: = ctr.name;break; if nmcomp< > " then dbim:=ctr As TDBImage; if not(dbim is TDBImage) then Exit; if dbim=nil then Exit; i f not(extractfileext(drfile)='.bmp') then Exit; try i f dbim.datasource.state < > dsedit then dbim.datasource.edit; dbim.picture.loadfromfile(drfile); dbim.datasource.dataset.post; except ShowMessage('Ouiu6Ka записи в БД изображения из файла: '+#13UI0+drFile); Эртурл1 накты суреттерд1 формага тасымалдау багдарламасыныц жумысын тексервдз: 97

99 «Г Страны мира (216) i S a J * * * ШШ1ШШ АВСТРАЛИЯ АВСТРИЯ АЗЕРБАЙДЖАН АЗОРСКИЕ О-ВА (ПС АЛБАНИЯ АЛЖ ИР АНГИЛЬЯ АНГОЛА АНДОРРА А Н ТИ ГУА И БАРБУ X АРГЕНТИНА АРМЕНИЯ [Мужчины В Е * С сурет - 1ске косканда шыгатын терезе 98

100 куру 3 «Телефон аныктамасы» деректер корын баскару жуйесш Жумыстын максаты: Database Desktop утилитасын колданып кесте куру оны Delphi-мен байланыстыру. «Телефон аныктамасы» ДКБЖ алдын ала жобалап, мецгершген теориялык деректерге суйенш жуйеш куру. Д еректер к о р ы н Э31рлеу rap ri6i: 1) «Телефон аныктамасы» деректер корын куру жэне оны индекстеу; 2) «Телефон аныктамасы» деректер базасынын кестелершдеп деректерд1 евдеу; 3) «Телефон аныктамасы» деректер базасынын People кестесшщ деректерш сурыптау (сортировка); 4) «Телефон аныктамасы» деректер базасынын мэл1мет1мен жумыс icrey ушш 1шю формасы бар форма куру; 5) «Телефон аныктамасы» деректер базасынын формасын куру кезшде epictep редакторымен жумыс; 6) есеп беруд1 жобалау. Карапайым электронды Телефон аныктамасынын деректер базасын курудьщ мысалын карастырайык. Эр адам ушш оньщ атыжеш, Teri, туган жылы, куш, жынысы, уйдщ жэне жумыс телефоны жазылады. Адамдар жайлы деректерд1 сактау ушш People атты кестеш пайдаланамыз. 3.1-кесте - People деректер базасынын кестесшщ курылымы Кшт 0pic жолы Тит блшекм, байт Косымша Сипаттау # IDPeople Санауыш М1ндетп, Жазау kifltrik идентификаторы Family жол 30 Мшдетт! Теп Name жол 15 Аты SecName жол 15 Экесшж аты Birthday Мезпл Туган мезгйй Sex Логикалык Мшдстп Жынысы Notes Memo 100 ТусЫктемелер Бул кестеге кштпк epic болатын IDPeople epici жасанды турде косылды. Егер 6ip адамньщ тек 6ip телефоны гана бар болса, онда 6i3 People кестесще Tel epicih косып, сонымен аяктаумызга болар едк BipaK 6ip адамнын б1рнеше уй жэне жумыс телефондары болуы мумкш. Егер 6ip гана кестёй! колдансак, онда кестеде адамдар жайлы 99

101 машмет жолдары телефондар санына сэйкес кайталанып отырады. Ол ете ыцгайсыз жэне кателер саныныц ecyihe экелш согады. Сондыктан телефондар жайлы деректер белек People кестеамен байланыскан Tel KecTeci колданады. 3.2-кесте-Те1 деректер базасынын кестесшщ курылымы Юлт 8pic атауы Typi Байт Дополнительно Сипаттау 0лшем1 Косымша # IDTel Санауыш Кшгпк Жазудын идентификаторы IDPeople Сан 4 MiHflerri, индексталган Адамиын идентификаторы Number Жол 9 М^ндетп Телефон HeMepi TypeTel Жол 4 Телефона Typi IDPeople - баска кестедеп санауыш (счетчик) типи epicneh байланыс орнату уиин колданылатын epic узын бутш (long integer) жэне индекстелген типто болу кажет. Сейтш, «Телефон аныктамасы» деректер базасыньщ курылымы ею байланыскан People жэне Tel кестелершен турады. People Kecreci непзп болады, ал байланыс IDPeople epictepi аркылы орнатылады. Деректер корын куруга KipicefliK: DataBase Desktop багдарламасын косайык. File\New\Table командасын орынданыз. Нэтижесшде форматтар ш ш щ е Paradox мэш бар Create Table терезес! ашылады (алдагы жумыстарка кара), pis кестеш Paradox форматында куратындыктан бул терезеде ОК батырмасын басамыз. Нэтижесшде кестенщ курылымы аныкталатын Create Paradox Table (Untitled) Tepe3eci ашылады. Б1ршппден People кестесш курыныз. Кестен1н epictepih аныктаныз. Курылымды сипаттаудын 6ipiHiui жазбасында Field Name баганында IDPeople мэнш аныктап келеы epicke ету ymih Tab батырмасын басыныз. Кешн Туре баганында пробелды басып мэндер TOiMiHeH + (Autoincrement) мэнш тандап келеа epicke ету ушш Tab батырмасын басыныз. Келеа Key баганында агымды epictih кштпк екенш аныктау ушш пробелды басыныз. Кешн бул баганда жулдызша белис! пайда болады. Тышкан Teriri аркылы Required field (м1ндетт1 epic) косыныз. Кешн Key баганын тандап Tab батырмасын басыныз. Келеа epictep сэйкес^нше типтерд1 тандап толтырылады; тек Family, Name, SecName жэне Notes epictepi уш1н Size баганында сэйкес узындыгын аныктау кажет. Ал Required field тек Family жэне Sex epic repi ушш косылады. Keneci epictep кштпк болмайтынын жэне олар ушш Key баганы толтырылмайтынын айтып кеткен жен. Birthday 100

102 n epici ушш Picture (Шаблон) параметрш кёлесщей орнату кажет. Рнпзуд1 жещлдетуге жэне тексерге арналган Assist (кемекил) нырмасын басамыз (3.1-сурет). P i c t u r e A s s is t a n c e Picture: jttltt ] / «{ «] /» [» ] Verify Syntax Restore Original Sample value: 1 j 1 ITh e picture is correct. I Sample pictures: J» [ «) «{» } : «[» } (A M P M );. Add to List Use O K C ancel Help сурет - Assist аркылы шаблонды тагайындау терезеы Мунда Picture жолында шаблонные тексп енпзтедь Онын дурыстыгын Verify Sintax батырмасы аркылы тексеруге болады. Ал Sample Value жолына енпзшген шаблонга сэйкес мысал енпзшедк TeKcepic Test Value батырмасын басу аркылы жузеге асады. Батырманы басканнан кешн тексерудщ нэтижесш хабарлама тур1нде керуге болады. #[#]:#[#]:#[#] {АМ,РМ}; шаблонын тандацыз. Муццагы #[#]:#[#]:#[#] - уакыт, дата - тусетж тшмнен Sample Picture-иы тацдап, Use батырмасын басыцыз. Енд1 Picture енпзу жолында {АМ,РМ}; бел i пн emipin тастаныз. Ce6e6i 6i3re тек дата гана керек. Кешн ОК батырмасын басыныз. Кестеш Save As батырмасы аркылы People.db атымен сактаныз (3-сурет). Кешн Options тобынан Display ТаЫе-аы белсендтеу кажет. Ол кестен! сактаган сон кесте деректермен жумыс ictey yuiih экранда корсетшу! кажет. Ашык кесте оны тек деректерд1 карауга гана руксат етсд1. Table\Edit Data командасын не F9 батырмасын басыныз. Енд! кестегс б1рнеше жазуларды енпзйуз. Енд1 Tel KecTeciH курыныз. Мундагы epictep: IDTel(+), IDPeople(N), Number(A) TypeTel(A). Ол ушш People кестесш кургандагы эрекеттерд! Tel кестесше сэйкес орынданыз. Мунда тек 6ip гана взгешел!к бар. Мунда IDPeople ерйлнде екшнл индекс куру кажет. Ол келесщей орындалады: 101

103 - Table Properties тусетш пз1мде Secondary Indexes касйетш танданыз; - пайда болган Define батырмасын басыныз; - Define Secondary Indexes терезесшде Field т1з!мшде IDPeople мэшн тандап ОК батырмасын басыныз; - пайда болган Save Index As терезесшде IDPeoptelndex жолын енпзш ОК батырмасын басьщыз; - кестеш Tel.db атымен сактаныз жэне олардын арасында байланыс орнатыныз; - File] Working Directory командасын орындап, ашылган терезеде сэйкес «Телефон аныктамасы» деректер базасынын кестелер! сакталган буманы тандандап жумыс бумасы ретшде орнатыныз; - Tel.db кестес1н ашыцыз; - Table\Restructure командасын орындап, нэтижесшде Ызд щ алдынызда кестенщ курылымын аныктайтын терезе ашылу тшс; - Table Properties тусетш ты мде Referential Integrity касйетш танданыз. Пайда болган Define батырмасын басыныз; - «Referential Integrity» терезесшде Field нз!мш де IDPeople[I] мэнш танданыз да т1з1мнщ касындагы онга багытталган керсеткшгп басыцыз; - терезенщ ортасында кестелердщ байланысы схема xypiaae керсеплу ушш Table Т13«м1ндеп People мэн1н тандап Й31мнщ касындагы солга багытталган керсеткшгп басыцыз, сонан кешн «Referential Integrity» терезеанде ОК батырмасын басыныз; - кесте курылымын аныктайтын терезенщ он жагында орналаскан т1з1мде енпзшген атау пайда болу ушш «Save Referential Integrity As» терезесшде PeoplesTel байланыс атауын жазып ОК батырмасын басыныз; - курылымды аныктау терезесшде Save батырмасын басыцыз; Table\Edit Data командасын пайдаланып кестеге (мрнеше жазулар енпзнйз (3.2-сурет); - Tel.db KecTecin жабу уш ш File\Close командасын орынданыз. tdp«op>e ( ГШШЦг N*mt SecNam» Birthday Sex NotM 1 ШШШ Mi*** Иванович Tine <8106 Memo> 2 2 Скаорсв СкдоЬ Сидорокмч TrN «BLOB Mtwe> 3 3 Ахиетое Аппт Atunw True <BL08 Men»o> 4 4 Оигарм! Орм Омпуи» Feift* <BLOB *«* * 3.2-сурет - цдеу режимшдеп кесте 102

104 «Телефон аныктамасы» деректер базасынын кестелерждеп деректерд! ендеу. People.db кужатын ашыныз. Table\Edil Data командасын орынданыз. Енд'1 кестедеп деректерд1 вндеуге болады. Кестедеп кез келген жазбаны белсендш еп ендеш з. С ейтш 6ipHeuie жазбаларды енден1з. Insert немесе Record\Imert командаларынын кемепмен жазбаны орнатыныз. Ж азба каз1рн кезде белсенд1 болганда жазбадан сон орнатылады. Кез келген жазбаны etuipin тастаныз. Ол уш'ш кез келген жазбаны белсендш еп Ctrl+Del немесе Record\Delete командаларын оранданыз. BipaK физикалык турде eiuipy уш ш 6i3re Pack Table тет1гш белсендшеу керек. Ол уш ш Table\Restructure- ге Kipin тел mi белсендшеп Save батырмасын басыныз. Record менкмнщ командаларымен кесте 1шшде орын ауыстыруды карап Kepini3. Tel.db кестеымен де сондай эрекеттерд1 орынданыз. Кестелерден деректерд'1 езгерту кезшде кателер жш пайда болады. Ол ею кестенщ байланыс нэтижесшде болады. Сондыктан деректерд1 форма туршде ендеген жен. Оньщ тшмдипгш келес1 зертханалык жумыстарда керес13. «Телефон аныктамасы» деректер базасынын People кестесшщ деректер1н сурыптау (сортировка). Tools\l/tilities\Sort командасын танданыз. Ашылган «Select Table» сухбат терезес1нде People.db кужатын танданыз. Open батырмасын басыныз. Нэтижесшде «Sort Table:...People.db» Tepe3eci ашылады. Осы терезеде Sorted Table тобында New Table TeTiri белсендоршген. Онда сурыптаудьщ нэтижес1н сактайтын кужатгын атын енг1эем13, ягни Peoples. Ш артгарды белплеген сон сол топтын Display sorted table т е т т н сурыптаудьщ нэтижесш кеипру ymih белсенд1лен!3. Ал Sort just selected fields т е т т н сол калпында калдырыныз, ce6 e6 i, 6i3 барлык кестен! сурыптаймыз. Бул деген!м13 - Sort Order Т1з1мшде гана емес, Fields Т131мшде аныкталган барлык epictep бойынша сурыптаймыз. Терезеде тагы ею Т1з1м бар, олар сол жагындагы - Fields - кестеге KipeTiH барлык epictep атауы бар, он - Sort Order сурыптау журпзшетш epictep атауы бар т1з1мдер. Сол жактагы Ti3iMHeH Family epicih тандап, Ti3iMHiH касындагы онга багытталган керсетк1шке басып оны он жактагы Т1з1мге орналастырыныз. Б13 кестен1 Family epici бойынша жэне есу ретомен сурыптайтын боламыз. Оган Sort Order Ti3iMiHin апдында + белпшес! турганы сэйкес. Керек болса, 6i3 сурыптау турш Sort Direction батырмасы аркылы езгерту5м1зге болады. Мунда тагы орютердщ petin Change order батырмасы аркылы взгертуге болады. 103

105 Барлык эрекеттердо орындап болган сон ОК батырмасын басыцыз. СЬдщ алдьщызда Фамилиялар epici алфавит бойынша сурыпталган кесте шыгады. «Телефон аныктамасы» деректер базасыныц мэл1мет!мен жумыс ictey уш ш Iiuici формасы бар форма куру. Басты менюдш File\New Application командасы аркылы жана проект! ашамыз. Caption касиетш «Информация о людях» деп езгерте\пз. Бул атау б1зд) деректер базасынын атауы болады. Форманы MyExunitDB.pas атауымен сактаймыз, ал wckti MyExampleDB.dpr деп сактаймыз. Ол ушш File\Save t/u jc ct As командасын орындаймыз. Онда кужат атауын тандайтын терезе ашылады, бунда 613 модуль ушш буманы тандаймыз. Модульге MyExUnitDB деген атау 6epeMi3 де кейш npoekti re MyExampleDB атауын берем13. Forml формасына People.db кужатында орналаскан кесеш байланыстыру уш ш компонёнттёрда орналастырамыз. DataAccess парагынан Table компонентш орналастырып TableName касиетше People, db-ны орналастырамыз. Мунда багдарлама мен People.db кестес! байланыс орнатады. Кешн Tablel компонентшщ Active касиетш True деп орнатамыз. Ол кестенщ мэндерш керсетедь Осы беттен DataSource компонентш орналастырамыз. Ол компоненттерщ деректермен байланыстырады. DataSource 1 KOMnoHeHTiHin DataSet касиетш Tablel деп белгшейм13. Будан кешн компоненттер кестедеп деректерге руксат алады. Tel.db кестесшдеп деректермен байланыс орнату j p m алдынгы пунктеп эрекеттерд! орындап, тек ТаЫе2 жэне DataSource2 компоненттер! Tel.db кестеамен байланыстарда ды, DatabaseName жэне DataSet касиеттер1 сэйкесшше ТаЫе2 жэне DataSource2 мен байланыстырылады. Деректер базасыныц деректер!н eki кестеден кврсететш 1шк1 формасы бар форма куру ушш деректер жиындар арасында байланыс орнатамыз. Ол ушш ТаЫе2 компонентш ерекшелеп, MasterSource касиепне DataSource 1 мэнш орнатамыз. Тышкан Teriri аркылы MasterFields касиетш белсенд1пейм!з. Available Index енпзу жолында IDPeoplelndex мэнш орнатамыз (9-сурет), ce6e6i байланыс индекстелген epictep аркылы жузеге асырылады. Кёшн сол жактагы т!з!мнен ldpeople мэн!н жэне он жактагы т!з!мнен IDPeople мэнш тандап Add батырмасын басыныз. Сонымен, байланыс орнатылды, ОК батырмасын басыныз. Нэтижесшде Index Name касиет! IDPeoplelndex. 104

106 ал байланыска катысатын IDPeople epic аты MsterFields касиетшде керсетоледь ; Primary ' '3 (ПЯЦгу tiut* BrtMir...J C«v«( fcfe j 3.4-сурет - TeI.db кестесшщ MasterField касиет! Формага деректер базасын керсететш компоненттерд! орналастырамыз. Ол ушш келеа эрекеттерд! орындаймыз: Stcmdart бетшен Label компоненттерш орналастырып, Caption касиет!н «Фамилия, имя, отчество» деп езгертем5з. DataControls 6eTiHeH 3 DBEdit компонентш Labell компонентшщ астына катарынан орналастырамыз. Барлык компоненттер уйин DataSource касиет1н DataSource I, ал DataField касиетш сэйкесшше Family, Name жэне SecName деп орнатамыз. Standart бетшен тагы 6ip Label компонент!н тандап оны DBEdit! компонентшщ астына орналастырып, Caption касиетш «День Рождения» деп ауыстырамыз. DataControls бетшен DBEdit компонент!н орналастырамыз. DataSource касиетше DataSourcel мэнш, ал DataField касиетше Birthday касиетш орнатамыз. Бул жолдын он жагына DataControls парагынан DBCheckBox компонент! н орналастырып, Alignment касиетш LeftJustify, ал Caption касиетш - «Пол» деп орнатамыз. Кейш онын DataSource касиетше DataSourcel мэнш, ал DataField касиетш тымнен Sex мэнш тандаймыз. Label2 компонентшщ астына Standart бетшен тагы 6ip Labe! компонентш орналастырып, Caption касиетш «Комментарий» деп езгертем1э. Бул компонентгщ астына DataControls бетшен DBMemo компонентой орналастырамыз. Онын горизонталь елшемш букш формага созып, ал вертикаль елшемш к!шкене кыскартамыз. Оныц 105

107 DataSource касйетш DataSourcel деп орнатамыз, ал DataField касйетш Notes мэшн тандаймыз. DataControls бетшен форманын жогары он жагына DBNavigator компонентш орналастырамыз. Оныц DataSource касйетш DataSourcel деп онратамыз. DataControls бетшен формага DBGrid компонентш формадагы барлык компоненттерден темен орналастырамыз. Оныц вертикаль елшемш сэл кыскартамыз. Оныц DataSource касйетш DataSourcel деп орнатамыз. Егер жогарыдагы эрекетгер дурыс орындалса, онда DBGridl компонент!нде Tel.db кестесшщ деректер1 шыгарылады. DBGrid компонентшде керсетшетш epictep т1з1мш аныктаймыз. Ол ушш келес1 эрекеттерд1 орындау кажет: - тышкан TeTiri кемепмен Columns касйетш белсендшеп, Editing DBGridl.Columns кестесшщ epicrep тшм!нщ редакторын шакырамыз; - пайда болган «0-ТСо1итп» жазбасын ерекшелей\нз бунда Add батырмасын басап, объектшер инспекторы кемепмен FieldName касиетше Number мэнш орнатып, кур дел! Title касиет1 ушш Caption параметрше Номер мэнш берем1з. Кестен1н epicrep т1з!мшщ редакторынын терезесшде Add батырмасын басамыз. Пайда болган «J-TColumn» жазбасын ерекшелейм1з. Объектшер инспекторыныц кемепмен FieldName касиетше Туре мэнш орнатамыз. PickList касйетш белсендшеп, пайда болган текст1к редакторда келеа ею жолды енпзем1з: Дом. Раб- Осы эрекеттерден кешн ОК батырмасын басамыз. Сейтш б!з телефон тишн аныктайтын мэндер Ti3iMiH аныктадык. Кешн курдел1 Title касиетт ушш Caption нараметрше Тип мэнш аныктаймыз. Кестенщ epictep редакторымен жумысты аяктау ушш терезенщ шетшдеп стандартты батырманы басу жеткийкть Standart бетшен формага Label компонентш DBGridl компонентшщ жогаргы сол жагына орналастырамыз да, оныц Caption касйетш Телефоны мэнше ауыстырамыз. DataControls бетшен формага DBNavigator компонентш орнатамыз. Оны DBGridl компонентшщ жогаргы он жагына орналастырамыз. DataSource касиетше DataSourcel мэшн орнатамыз. Басты менюдщ Run\Run командасы аркылы багдарламаны кке косамыз. IuiKi формасы бар формага деректер енпзудщ ез ерекшел1ктер1 бар. Оларды белгшеу ymih деректерда формага енпзем^з. Ол ушш келеа эрекеттерд! орындауымыз кажет. Деректер базасынын жазбаларындагы навигатордыц панелшде «Плюс» батырмасын басыныз. Будан кешн People кестесшде жана жазба пайда болады.

108 оган адам жайлы мэл1мет енпзеш з. «Фамилиясы, Аты, Экестщ аты» epictepihe сэйкес «Mvpjainoee» «Аркадий» «Какшевич» мэндерщ енпзш, «День рождения» Органе мэщи енпзем1з. «Пол» TeTiri косылган болу кажет. Навигатордын «0» батырмасын басамыз. Курылган жазба People кестесшде сакталады. Адам туралы деректерд1 телефонды енпзер алдында сактау кажет, эйтпесе олар сол адамга сэйкес болмайды, ал деректер базасында артык жазбалар саны оте коп болып кетедк Пайдаланушы ондай эрекетп орындай алмау унйн DBGridl компонентше деректерд! енпзуге жэне DBNavigator2 батырмасын баскага руксат етпеу кажет. Ол унйн багдарламанын жумысын токтатыныз. Формадагы DBNavigatorl компонентш тавдап, объектшер инспекторындагы Events калтасына отказ. BeforeAction жолында тышкан тетщнщ он жак батырмасын eki рет шертш, MyExUnitDB.pas терезесшде келес! процедураны толыктырындар: Forml.DBNavigatorl BeforeAction кепеы фрагментпен: if ((Button=nbInsert) or (Button =nbedit)) then DBNavigator2. Enabled: false; DBGridl. Enabled: =false; if Button=nbPost then DBNavigator2. Enabled: =true; DBGrid 1. Enabled: =true; 0згертулерд1 сактап багдарламаны icke косыныз. Томенri навигатор панелшдеп «+» батырмасын басыныз. Tel кестесшде жана жазба курылады. «Номер» уяшыгына телефон номерш енпзетк. «Тип» уяшыгында ашылатын т1з1мде «дом» тишн тандайык. Теменп навигаторда «+» батырмасын басамыз. «0» батырмасын сактау ушш басу кажет емес, ce6e6i енпзу кезшде деректер автоматты турде сакталады. Багдарламанын жумысын терезет жабу батырмасын басумен аякгаймыз. File\Save АН командасы аркылы барлык озгертулерд1 сактаймыз. Ескерту: егер 6ip жазбаны euiipin тастау керек болса, онда сэйкес жолды белплеп навигатордагы «-» батырмасын басыныз. Ал жазбаларга езгертулер енпзу кажет болса, сэйкес элементт! тандап теменп навигатордын «Стрелка вверх» батырмасын басу кажет. Барлык озгертулерд! енпзш болган сон «0» батырмасын басамыз.

109 People кестесшен жазбаны euiipin тастау ушш бщшйддён Tel кестесшдегз сэйкес барлык жазбаларды euiipin тастау кажет. Ондай еппрулерд! колмен жасамау ушш Form 1. DBNavigator I Before A ction процедурасын келес1 фрагментпен толыктыру кажет: if Button=nbDelete then Table 2. First; while not Table2.Eof do Table2.Delete; «Телефон аны ктамасы» деректер базасынын формасын куру кезшде epictep редакторымен жумыс. File\Open командасы аркылы MyExUnitDB.dpr кужатына енпзшген npoeicri ашамыз. Жазбалардын косымша ретток номерлерш шыгаратын боламыз (.IDPeople epicmin мэндерш). Ол ушш kerieci эрекеттерд! орындау кажет: Form1 формасында Tablel компонент1н белсендшейлёз. Пайда болган редакторда Add Fields командасы аркылы барлык epictepfli KemipeMi3. Пайда болган epictep тшмшен IDPeople epicih ерёкшелейм!з. Объект инспекторында DisplayFormat касиетше келее! жолды енпзем1з: «Порядковый номер:» ООО DataControls бетон пайдаланып Forml формасынын жогаргы сол жак бурышына навигатордын алдына DBEdit компонентш орналастырамыз. Шыгарылатын мэлймет толыгымен сиятындай комионеттщ горизонталь елшемш сэл улкейтем1з. Объект инспекторын пайдаланып DataSource касиетше DataSourcel мэнш меншйсгеп, DataField касиетшде т'шмнен IDPeople мэнш тавдаймыз. Егер бэр1 дурыс орындалатын болса, DBEdit5 жолында сэйкес жазба пайда болу керек. Алдьщгы мысалдарда 6i3 «Жыныс» epicih DBCheckBoxl компонент! аркылы шыгардык. Ол сонша ыцгайлы емес. Бул мэнд} «Ер» немесе «Эйел» мэндерш тавдау аркылы шыгарамыз. Ол ymih келеа эрекеттерд! орындау кажет: a) Forml формасында Tablel компонентой белсендшейм брктер тоз!мшде Sex epicih ерекшелейм1з. Объект инспекторындагы DisplayValues к;асиетше келеса жолды енпзем1з: Ер, Эйел; э) формадан DBCheckBoxl компонентой оны ерекшелеп Del батырмасы аркылы euiipin тастаймыз. DataControls бетш пайдаланып 108

110 онын орнына DBComboBox компонентш орналастырамыз да горизонталь елшемш сэл кыскартамыз. Объект инспекторын кемепмен DataSource касиетше DataSourcel мэнш, ал DataField касиетше Sex мэнш менппктейм1з. Егер барлык эрекеттер дурыс орындалган болса, DBComboBox1 компонентшщ жолында сэйкес жазба шыгу Tnicri (Мужской не Женский); б) DBComboBox! компонентшщ Items касйетш белсендшеп, пайда болган редакторда келеа жолдарды енпзем!з: Ер, Эйел жэне редактордьщ жумысын ОК батырмасын басумен аяктаймыз. Standart бетшен формага DBComboBox! компонентшщ сол жагынан Label компонентш койып, оньщ Caption касиетше «Жыныс» мэшн енпзем1з. Енд1 туган кунд1 шыгару ушш дата форматын тавдау керек. Ол ymih келеа эрекеттерд1 орындау керек: а.) Forml формасындагы Tablel компонентш белсендшейм1з. OpicTep ттамшде Birthday epicih тандаймыз; э) объект инспекторында DisplayFormat касиет'ш тандап, 6ip форматты енпзу керек, мысалга «dddddd», ал енпзуд! Enter батырмасын басумен аяктаймыз; б) Run\Run басты менюшщ командасы аркылы багдарламаны 1ске косамыз. Экранда 6i3 енпзген барлык езгертулер керсетшедк Жазбалар бойынша орын ауыстырганда косылган енпзу жолында ретпк номер! пайда болатынын атап кеткен жен. Ал комбинацияланган жолда адмнын жынысы жайлы мэл!мет орналасады. Бул мэнд1 кажет болса ашылатын т!зщ аркылы ендеуге болады. Багдарламаньщ жумысын терезе Hi жабумен аяктаймыз (3.5- сурет). File\Save АП командасы аркылы барлык езгерктерд1 сактаймыз. Есеп беруд! жобалау. Деректер коры акпаратты ендеу ушш колданылады. Ондеулердщ корытындылары есептерде кершедк Есеп - ол принтерден басылатын кужат, сей1н онын непз1нде шеипмдер кабылданады. Delphi-де есеп деректер корынан арнайы рес!мделген акпаратты бшдйреш жэне ерекше форма тур!нде кершуге арналган. Оны экраннан керуге болады, ал содан кешн принтерден басылады. Осындай форма деректерд1 жэне басу кезшде ecentih сырткы турщ аныктайтын арнайы компоненттерщ курайды. Деректерд! усынудын формадан есепке ауыстыруын есеп генераторы кемепмен жузеге асырылады. Delphi пакетшде QuickReport есептер генераторы бар, ол 109

111 3.5-сурет - Багдарлама терезеа ecenti басу жэне файлдан оку, файлда сактау, карау мумкшдггш тугызады. Есептер формалар сиякты эр турл1 болуы мумюн: T"i3iM - жол теру аркылы акпаратты шыгарады, оныц 3p6ipeyi 6ip жазбаны б1лд1ред1. Бланкще oip жазба 6ip паракта орналасады. Есеп есеп берушшкпен 6ip кестеден екшпп кестеге косымша рет^нде акпаратты бейнелейдь Пошталык этикеткаларды басу ece6i паракта ecenti 6ipHeuie улкен емес тйсбурышты облыстарды орналастыра апады, кешн олар пошта бойынша ж1бер!летш заттарга жабыстырылады. Есеп курастыру кезшде б^рнеше сатыларды айкындауга болады. Ecerrri дайындау сатысы. Бул сатыда есептщ компоненттер! жэне олардьщ параметрлер1 таццалады. EcenTi куру сатысы. Бул сатыда тандалган компоненттерден есеп калыптасады. Ол есеп генераторы кемепмен орындалады. EcenTi карау сатысы. Бул сатыда экраннан алынган есегп щ TypiH карастыруга болады жэне есептщ дайындык сатысына оралып мумк!нд1пнше оган езгер1стер енпзуге болады. EcenTi басу сатысы. Бул сатыда ecenti принтерден басу жузеге асырылады. EcenTi деректер корында куру. 0 p 6 ip есеп келес1 бел!мдерден куралуы мумк1н: есептщ аты, есеп бетшщ аты, топталган деректерд1н, деректер облыстарыныц, есеп 6epyuimiK ушш облыстын аты, топталган деректерд1ц аякталуы, есеп бет!н'щ аякталуы, есеп^ц аякталуы. Сонымен катар QuickReport 6ipH em e баганалары бар есепте по

112 3p6ip багананын аты жэне ap6ip бетте кайталанатын фрагментп басуга мумкшдш бередь Осынын барлыгы жогарыда айтылган компоненттердщ кемепмен курылады. Баспага тапсыруды ендеу- TQRPrinter принтер классы. TQRPrinter классы TPersistent классынын тармагы болып табылады. Бул кластын компонент! кершбейтш болып табылады. Бул объектшщ данасы косымшаны орындау кезшде автоматты турде курылады жэне QuickRep компонентшщ болуынсыз пайдаланыла алады. TQRPrinter атына ие бул объект есепт! куруды, алдын ала карауды, басуды, сонымен катар файлда есепп сактауды жэне онымен 9pi карай жумыс icteyni камтамасыз етедь Непзшен бул кызметтер мен мумюнджтер ecemi карау бойынша, TQRPrinter класымен камтамасыз етшген, пайдалануды алдын ала кару ушш QuickReport стандартты формага усынылган. Есеп бейнелеген бул форманы б1рнеше тэсшдермен шакыртуга болады. Ecemi жобалау кезшде QuickRep компонентш тандап, содан кейш тышканнын он жак кнопкасын басып, шыккан мэз1рден Preview командасын тацдаймыз. EcenTi карау стандартты терезеде кершу ушш косымшаны орындау кезшде Preview тэсшш колданган жен. Стандартты терезеде барлык кызметтер кнопкалык панельдщ кемепмен жузеге асырылады. Беттердщ санын керсететш керсетшген бет нем!ршщ индикаторы караудын стандартты терезеанщ жолында орналасады. Сол сиякты есептш кагтыптасу процесшщ индикаторы да кершедь TQRPrinter классы 6ipHeiue косымша касиеттерд!, тэалдерд1 аныктайды. 6ipaK 6i3 оларды карастырмаймыз. Ecenii тез калыптастыру. EcenTi тез калыптастыруды сарапшы ретшде емес, аныкталган турдщ дайын ешм! ретшде карастыруга болады. Бул дайын ешмде акпарат есептен шыгарылатын деректер кез1мен байланыс жок. Delphi Standart-та деректер кезш аныктау ушш, есеп формасына орналастырылган Table компонентшщ мшездемесш аныктау кажет. Келеа' операциялар есептерд! модификациялау ушш, сэйкес дайын ешмдер жасауга кемектеседк File/New/Forms/QuickReport Labels - пошталык этикеткаларды басу уиин есептщ дайын emmi жасалады. Бул есеп уш баганадан турады, оларда тжбурышты пошталык этикеткалар шыгарылады. File/New/Forms/QuickReport List - нз1м туршде акпарат шыгарылатын есептщ дайын енядо шыгарылады, онын курамына есеп атауынын б е л т, беттер атауынын бел!п, деректер корытындысынын жэне бётгщ аякталу бел]п к»редг. in

113 File/New/Forms/QuickReport Master/Detail - есеп берушшкпен j дайын енш! жасалады. Оньщ курамына есеп атауыньщ белщ, непзп есептщ деректер корытындысыньщ б ёл щ есеп берудщ деректер корытындысыньщ белпт, есеп беруде корытындыларды шыгару жэне беттщ аякталу белштер1 юредк Айтылган бел1ктер Ti3iM бойынша жасалынады жэне мумкшд1гшше оларга баскаларды косуга болады. Сонымен катар есептщ бос дайын еншшщ формасын жасау мумкщщп бар. Ол ушш File/New/New/Report операциясын колданган жен. Кррытындысында QuickReport компонент! бар форма шыгады. Report Wizard - ecenti курастыру бойынша сарапшы. Report Wizard - диалогтьщ Tepe3eci бар сарапшы, онда есепте кандай акпарат шыгарылатынын аныктау кажет. Жэне де акпарат тщм туршде шыгарылатын есеп жасалады. Бул сарапшы локальды деректер корыньщ непзш де есептерд1 жасауга мумкшдж тугызады. Кез келген кадамда Cancel кнопкасын басып есеп жасау процесш токтатуга болады, сонымен катар кез келген диалогтык терезеден (6 ip ih u iicih eh баска) < Back кнопкасын басып алдьщгысына кайтып орапуга болады. Bip сарапшы терезесшен екшапсше Next > кнопкасын басып ауысуга болады. Осы сарапшыны келес1 команда аркылы шакыртуга болады File/New/Bisuness/QuickReport Wizard. косымш аны жобалау кезшде сураныстарын пайдалану. Деректер корымен жумыс ictereh кезде оган сураныс угымы колданылады. Сураныс угымына деректер корынан акпаратпен 6ipre белгш 6ip кызмет жасау юредь Суралган шартка сэйкес деректерд1 тандауга болады жэне корытындыны - тандау суранысын шыгаруга, болады. Деректер корында сэйкес сураныстарды колданып, белгш 6ip жазбаларды коюга, жоюга, жадартуга болады. Осындай талаптар багдарламалаудьщ аранайы QBE жэне SQL тшдер1нде куралады. SQL Delphi-де кен таралган, оны деректер корыньщ жумысы ymih косымшаны жасау кез1нде колдануга болады. SQL суранысы. SQL т1л1нде б1рнеше сураныстарды жасауга болады: - деректерд1 тандау суранысы; - косымшага сураныс; - жанартуга сураныс; - жоюга сураныс. SQL сураныс, DBD кемепмен жасалган, кенейплген sql файылында орналасады. SQL тшнде ap6ip сураныс б1рнеше бел1ктен турады, олар белпл] резевтелген сезден басталады. Сураныстарды жазу кезшде бас эрштер мен 6ipre к1шкентай эрштерд1 де колдануга 112

114 болады. Акпаратты эртурл1 тэсшмен жолдарга орналастыруга болады, 6ipaK белгш! 6ip магынасы бар акпаратты жеке жолдарга орналастырган жен. Сездерд1, идентификаторларды, сандарды, жолдарды жэне т.б. операцияларды белу уцлн бос орынды колданган жен. Тандауга сураныс. Бул сураныс кестенщ 6ip немесе б1рнеше ерктершде орналаскан деректерд! алу уцнн арналган. Сураныстьщ конструкциясы кёлесщей: SELECT [DISTINCT] <шыгарылган ерктердщ Ti3iMi> FR ОМ <кол даны л аты н кестелердщ Ti3iMi> [ WHERE < тандаудын шарты>] [ORDER BY<ipiKTey тэрт б >] [GROUP В Х<топтау T3pri6i>] [НА VING < топтарды тандау шарты>] [(/А70Л'<сурыптауга араналган косынды сураныс>] Сураныстьщ жеке бел1ктерш аныктап карастырайык. DESTINCT- сураныс нэтижесшде кайталанатын мэндердщ болмауьш керсетедь <шыгарылатын ерктердщ Ti3iMi>: [<кесте>.] <epictep> [А8<жасырын ат>] {,[<кесте>.] <epictep> [AS <жасырын ат>]}, мунда «кесте» - кестенщ атауы, егер сураныста 6ip кесте болса, онда оны колданбауга болады; epic ергстщ атауы; жасырын ат epictin атауы ушш жасырын ат, сураныста локальды болып келед!; AS - накты epicke жалган ат коятын оператор. Егер кестенщ барлык ерютер'шен деректерд! алу керек болса, онда барлык ер1стердщ атау орнмна «*» керсеткен жеткшктй <пайдаланылатын кестелердщ Ti3iMi>: < кестемен файл >,[< жасырын ат >]{, кестемен файл > [<жасырын ат>]}. WHERE бул резервтелген сезден шартты беру операторы басталады. <тандаудьщ шарты >: шарт, б!рлikti беютетш шарт: [(<кестем. epici х шарт>< кестеы. epic 2>)]{ AND/ OR (<кесте1.epici ><шарт>< KecTeJ.epic2>)}, мундагы кестем, KecTeN, кесте!, KecTeJ - 6ipi KTipi л ген кестелердщ атауы; epici, epic2 - осы кестелердеп ергстердщ атауы, олардын магынасынын сэйкестшп бойынша кестелердщ аракатынасы орын алады; шарт - ер1стердеп ек1 кестенщ магынасынын сэйкестшп бойынша аныкталады, мысалы, тенс1здж, кеп, аз, тен емес жэне баска да салыстыру операциялары; шарттар б1рнеше болуы мумкш, бундай жагдайда олар децгелек жакшапар, AND жэне OR логикалык операциялар аркылы б1р1кт1р!лед1. Егер 6ipi«Tipy ушш

115 шарт болмаса, кестелердщ барлык мумкш жазбаларынын мумшнщктерт б1лд!рет1н нэтиже курылады. Opicmepdihf магынасы бойынша шарттар: [[<Кесте>. ],<epic>< шарт>< магына>] { AND/OR [<Кесте>.]< epic>< шарт>< магына>}. Математикалык салыстыру операторларынан баска, логикалык салыстыру операторлары, IN, LIKE жэне тагы баскалары колданылады. ORDER BY - бул резервтелген сезден сурыптаудьщ тэртобш беру операторы басталады. < р 1ктеудщ T3pTi6i >: [<Kecre>.]<epic> [ASC/DESC\{,[< кесте >.]<epic> [ASC/DESC]}, мундагы ASC немесе DESC - ecy немесе кему бойынша сэйкес ipiicreyflih тэртибш аныктайды. GROUP ВУ-сакталган соз, одан топтау тэртобшщ тапсырма операторы басталады. <топтаудьщ T9pri6i>: [<кесте>.], <epic >{[<Kecre>.]<epic>}. Косуга сураныс. Бул сураныс кестеге жазба косып, онын epictepihe магына бере алады. Сураныстьщ конструкциясы келесщей: INSERT INTO <файл кестемен > (<epic>{,< epic>}) VALUES (<магына >{,<магына>}). Сураныстьщ жеке бел1ктерш аныктап карастырайык: Кестемен файл- кесте файлыныц атауы, оган жазба колданылады; ол кецейтшген болу керек; 0 pic - epictin атауы, оган магына койылады. VALUES бул резервтелген сезден кестедеп ер!стердщ мэш бойынша тщмд1 беру операторы басталады; мэн - жаца жазудьщ epictepihe сэйкес бершетш мэндердщ -пз1мшдеп мэн (олардьщ саны ерктердщ санына сай болуы керек). Жацартуга сураныс. Бул сураныс тапсырылатын шарттарга сэйкес, жазбалардагы магынаны жанартуга кемектеседк Сураныстьщ конструкциясы келешдей: UPDATE <файл кестемен> SET<epic>=< магына>{,< epio=< магына>} [WHERE <тацдау шарты>] Сураныстьщ кейб1р белжтерш карастырайык: Т-сакталган сез, одан магыналар таш ш щ тапсырма операторы басталады; <ер1с>=<магына> {,<ер1с>=<магына>} - осы epicrepre колданылатын epicrep магынасыньщ TMMi; [WHERE 114

116 <тандау шарты>]- деректердщ жазбаларын жанартатын тапсырма операторы. Жоюга сураныс. Бул сураныс кестеден жазбаларды жоюга муммадпк береди Сураныстын конструкциясы кедесгдей: DELECT FROM <файл кестемен> [WHERE <тандау шарты>]. Деректер корына сураныс (Query). ТаЫе компонентшщ 6ipeyiH колдану тек 6ip кестемен жумыс icteyre мумюндш бере/ii. Сондыктан, б^рнеше байланыскан кестелермен жумыс ictereh кезде, Table компонентшщ сэйкес санын жасау керек. Бул жагдайда TDBDataSet классына жататын TQuery класынын Query компонентш алган жен. Бул компонент SQL- суранысынын кемепмен 6ipnenie кестелердщ непзшде деректерщ тандау мумкшд 1пн бередк Сол сиякты деректер корыньщ KecTeci шамадан артык болганда колдануга ьщгайлы; бундай жагдайда сураныстын кемепмен карастырылып отырган деректердщ тавдауын шектеуге болады. Бул компонентаны пайдалану SQL ты нщ бшуше байланысты. Delphi SQL операторын Query компонент} кемепмен жасауга болады: 1) формага Query, DataSource объекттерш енпзш, оларды 6ipoipiMeH байланыстыру; 2) DataBaseName касиетшщ TQuery объект1сше жал гам ат кою; 3) SQL касиет5н1н кемепмен SQL тапсырмасын белплеу; 4) True магынасында Active касиетш 6eKiTy. Егер sip6ip кадам дурыс аякталган болса, егер BDE пакты бектлген болса, тор белпленген кестеден жазбаны сактау керек. Статистикалык сиякты динамикалыкта (немесе сураныстар параметрлермен) Delphi деректер корына SQL -суранысын жасай алады, онда сураныстын мэттт езгермей калады. Динамикалык 50/.сураныстар багдарлама орындау барысында езгертше алатын жазба тандау шартынын нёпзшде аныкталган параметрлёрд! юрпзедк Бул жагдайда 6ip динамикалык сураныстын кемепмен косымшаны орындау кезшде эртурл1 нэтижелерд1 алуга болады. Динамикалык сураныстардын синтаксиспк конструкциялары статистикалыкка сай, 6ipaK оларда жазбаларды тандау шартгарын аныктайтын секциясында магынасынын орнына <параметр >, мундагы параметр - параметрдщ атауы, онын орнына косымшаны орындау кезшде магына койылатын болады. TQuery класында TDataSet, TBDEDataSet жэне TDBDataSet кластарынан алган келеадей манызды касиеттерш атап айткан жен: 115

117 Local- кестелердщ орналасуын аныктайды ( True локальды кестелер, False серверш деп кестелер); тек кана оку касиеть RequestLive- логикалык турдщ касиет1 (False магынасын 6iflflipeAi), суранысды орындау нэтижесшде алынган деректерд! езгерту мумкш дш н аныктайды. Бул мумкшдш сураныстарда да бар, егер касиет True магынасына ие болса. Ал калган сураныстарда нэтиже тек кана о куга арналган. Бундай жагдайларда сураныс сэтп екенш керу ушш CanModify касйетш карауга болады, егер кестеш SQL суранысы бойынша тузету керек болса, онда SQL Update командасын колданган жен. SQL - TStrings туршщ касиет1, Open немесе ExesSQL тэс'шдерш орындаган кезде пайдаланылатын 50 -сураньхеьщьщ мэтшш аныктайды. UniDirectional - сураныс орындаудьщ нэтйжёсшде алынган деректерд1 тандау бойынша курсордьщ козгалу багытын аныктайды. UpdateMode TUpdateMode касиетшщ Typi, аралык буферден жазбаларды жацарту тасщн аныктайды. TQuery компонентасынын келес1 Kacnerrepi динамикальщ SQL-сураныстарда пайдаланылады. Олардьщ кеейб1реуш мысалга кёйтарейда DataSource - TDataSource туршщ касиета, деректер кездерш аныктайды олардьщ ер»стершщ магынасы динамикальщ сураныс ушш параметрлер сиякты пайдаланылады. Params [Index] - TParams туршщ карнета, динамикальщ сураныста параметрлерд! аныктайды TParams туршщ элементтер Ti3iMiH курайды. Бул касиеттщ кемепмен параметрлер магынасынын редакторында бастапкы параметрлерщщ улкендап куралады. Сураныстьщ параметлер магынасынын редакторына ауысу ушш бул Касиеттщ магынасын тышканмен жандандыру керек. Exes SQL - процедурасы SQL суранысын орындайды. Prepare процедурасы синтаксист! жэне оптимизацияны тексеру ушш BDE-re сураныс ж!береда. Динамикалык сураныстар уш!н орындауга усынылады. TQuery компонентасымен енделген окигалар толыктай TDataSet класынан алынады. Params каейёйнщ кемепмен багдарлама тэсшмен динамикалык сураныска ауысу байланыстарын ауыстырган кезде эдетте келес! кадамдар орындалады: 1) Мщдетта турде кестенщ жабык екен!не кез жетюзу керек; 2) Prepare командасын беру кемепмен TQuery объектнл дайындалады; 3) Params касиетше накты магынапар иеленедц 4) Сураныс ашылады. пб

118 Ж обалык мэз1р. Элемент маз-ipi асты немесе команда, немесе айыргыш сызыгы бола алады. Break - касиет! агымдагы элементна M33ipiH багандарга беледь Caption - string, касиетшщ тиш, бершген мэз1р элементшщ мэтшщ К райды. Checked - логикалык типтщ касиет!,бершген элемент белпленгенш аныктайды ( егер True магынасы болса, элемент «канат белпмен» белгшенедг). Default - логикалык типтщ касиет!; егер ол True магынасы болса, меню элемент MdTim полужирный жазу эр гимен, ал тышканымен улкен элемента ек\ рет басса, агымдагы окигалары False болатын, OnClick ундемеуш керуге болады. Enabled - логикалык типтщ касиет! ; егер ол True магынасында болса, тышкан мен клавиатурадан тэуелд! болады. Grouplndex - бутш типт! касиет}, меню элемент! жататын топтар HGMipiH камтиды, жэне нолдш магынада болады. Items [Index] - TMenuItem типшщ массив касиет! (Index - бутш керсетюии), агымдагыга элементтен Kiuii элементке тапсырма 6epyi. Count касиет! бойынша элементтер саны аныкталады. Санау нелден басталып, тек окуга арналады. Menulndex - касиеттщ бутш rani, Items Т131мшдеп улкен компоненттерд! камтитын индекс! бар компонент. Radioitem - касиеттщ бутш тиш; Егер ол Тгие-дх кабылдаса,онда мэз1р элемент! ауыстыру коскышы (переключателя) болып, 6ip топтыц 6ip элемент! гана белпленген болады. ShortCut касиеттщ бутш тиш,шерту кезшде мэз1р элемент! белсещнршетш, жылдам баскарушы пернелерд!н кодын аныктайды. Жьшдам баскарушы пернелердщ кодын аныктау кез!нде ShortCutToKey, ShortCutToText программалары колданылады. Visible касиеттщ бут!н тип!; егер ол True магынасында болса, мэз!р элемент! экранда корсет!лед!, егер False болса - кершбейд!, TMenuItem класында OnClick окигасы аныкталган. Класс курылымдарды тузетумен байланысты эдгстер катарын камтиды. Add (Item) - процедурасы, Item (TMenuItem класынан) элементш Kiuii элементтер Ti3iMiHe косады. Delete (Index) - процедура, Kind элементтердщ тагмшен Index индекс! бар элементтерд! жояды. BipaK динамикалык жадтагы элементтер жойылмайды жэне екшшгрет колданыла беред!. Жобалау барысында кейб!р элементтерге жылдам баскару батырмаларын тагайындауга болады. Ол ушш ShortCut касиетш колданып, шыккан Т1з!мнен лайыкты батырмалардьщ уйлесуш, немесе 117

119 пернетактадан батырмаларды тавдаса болады. Бул операциями багдарламанын орындалу барысында да жасауга болады. Ол ушш арнайы стандартты imici программаларды (ShortCut, ShortCutToKey, ShortCutToText, TextToShortCut). колдануга болады. Main Menu басты M33ipi. Менюмен эдеттеп Heri3ri жобалау барысында калыптасады. Newltem, NewLine, NewSubMenu, NewMenu стандартты программалар кемепмен жузеге асыра аламыз. Ж ергшкп Popup Menu, басты M33ip сиякты ТМепи класына жатады. Standart компонент, ал Items касиет! содан сон колданылады. ТРорирМепи класында келесщегддей касиеттер! бар жаца мшездемелерд1 ецпэем13. TPopupAlignment типтес Alignment - касиеп, ж ергш кп мэз1рмен тышкан курсоры орналасуын аныктайды. AutoPopup логикапык типтш касиет». Егер ол True кабылдаса, жергш кп M33ip тышканныц он пернесш шерткенде пайда болады False болганда, мэз!р пайда болмайды ( бул жерде Popup эд1сш колданган жен ). ОпРорир окига, экранга ж ергш кп мэз1рд1 тышканныц оц пернесш шерткенде пайда пайда болады( егер AutoPopup касиет! True магынасы болса). немесе Popup эдюш шакырганда. Бул жергшкп мэз1рд1 ендейтш жалгыз окига. Popup (Х.У) - процедура, жогаргы сол бурышы X жэне Y координатасына тец меню экранына шыгады. Жобалау сатыларына ж ергш кп мэз1р дэл осылай жасалады. Деректер корымен жумыс жасайтын косымш га мэз1р куру. Менюде Файл, Поиск, Сортировка жэне келеа imki меню! болады: Печать и Выход, По фамилии и По дате рождения, По номеру и По фамилии. Ягни осы меню командалары бойынша фамилияны туган ушмен, *здеуге, жазудыц номер1мен сурыптауды тагы баскаларды жасауга болады. «Телефон аныктамасы» деректер корындагы People.db кестесшдеп IDPeople жэне Family мен Birthday epictepi бойынша ;!здеу мен сурыптацу жасау ушш оларда косымша (вторичный) индекс болуы кажет. DataBase Desktop-ты ашып Family, Birthday и IDPeople epictepihe керек косымша индекстерд! курайып оларга Familylndex, : Birthdaylndex жэне Number атын 6epin сактайык. Delphi-де менюд1 куру. Алдында дайындаган проекпш ашып кеппрмелерш жасап файл аттарына 7 санын койып сакатацыз: ' MyExampleDB7.dpr, MyExUnitDB7.pas. Формага менюд1 орналастыру ушш дайындацыз. Ол ymih келеа эрекеттерд! орындаймыз: 118

120 - менюд1 койганга компоненттерд1 аса темен Tycipin орын босатыныз; - экранда менкда ерекшелеу ушш форманын тусш Color (Цвет)- дын касйетш citeal-ra, немесе баскага езгертуге болады; - DBGridl-тын он жагына «Выход»(111ыгу) кнопкасын курьщыз; - Standart панелшен Forml формасына Main Menu; - Басты менюдщ TypiH эз^рлеу ушш МатМепи-дщ Items касиетше xipin эр менюлын командасыннын атын Caption-гг енпзт, Name epicih e сэйкес мэндерш беру керек. Ягни: 1) Файл - Caption (Файл), Name (File_pt): а) Печать (Баспа) - СарПоп(Печать), Name (PrintptJ, э) Выход (Шыгу) - Caption(Выход), Name (TExit_ 2) Поиск (1здеу) - CaptionfTlowK), Name (Search-pt). а) По фамилии (Teri бойынша) - CaptionfUo фамилии), Name (Family l_pt); 3) По дате рождения (туган Mep3iMi бойынша) - CaptionfUo дате рождения/ Name fdate_pt). 3) Сортировка (Сурыптау) - Caption (Файл), Name (Filej>t): а) по номеру (HOMepi бойынша) - Captionfпо номеру), Name (Number_pt); э) по фамилии (теп бойынша) - Captionfпо фамилии), Name (Tamily2_pt); Я Funn-i MS,5дву Баспа Шьгу 3.6-сурет - Бас мэз!рдш терезеа Печать (Баспа) мэз1рше баскан кезде ecentih алдын ала карау формасы экранга шыгу ушш, алдагы курылган MyUnitReportl pas файлды MyUnitReport.pas - деп сактап. Form 2 (есеп бар форма) модулшщ мэтппндеп Implementation бел1мшдеп модул ьдерш езгертем1з. Ондагы USES MyExUnitDB3-j\ USESMyExUnitDB7-re. Forml формасынын модулшш мэтшшде Form2 формасымен байланыстыру упин implementation бел1мше USES MyUnitReport-деп жазу керек. 119

121 Forml ф о р м а с ы н д а г ы Печать(Баспа) M33ipiH белсендшеп шыккан OnClick окиганы ецдеуипсше келеа процедураны жазамыз, ол eceim алдын ала керу режимин керсетедк Procedure TForm I. Print jptclick ( Sender: TObject); Begin Form 2. QuickRep 1. Preview; End; Шыгу мэз1р nyh icri ушш, однын OnClick окиганы ендеуонсше шыгуды уйымдастыратын процедураны терем1з: procedure TForml.Exit_ptClick (Sender: TObject): Close; Туган Mep3iMi немесе фамилиясы аркылы 1здеу ymih тагы да ею терезе керек, эрб!р терезеде 1здейтш сураныс epict epi курылады. Оларды куру ушш келеа 1рекеттерщ орындаймыз: Жобага жана форма косамыз. Форманын размерш пгшен кширейтш, жолынан улкейтш взгертем1з. Caption касиетш «Поиск по фамилии», формасына езгертем1з. Форманы Search7.pas. файылында сактаймыз. Жана формага твмендеп компонентапарды енлзем!з (3.7-сурет жэне 3.8-сурет): a) Label - Caption ("«Введите фамилию искомого человека»), Font (полужирный); э) Edit - Text (бос калдыру керек); В в а л и т е ф а м и л и ю у о к I 3.7-сурет - Teri бойынша 1здеу формасы 6)BitBtnl - Caption (OK), Kind (bkok), ModalResult (mrok), Name (OKBtn); e)bitbtn2 - Caption (Отмена), Kind (bkcancel), ModalResult (mrcancel), Name (CancelBtn).

122 . =у - - Р flute ',I ivj i& r -i Введите дату рождения человека Г дата ввопится через точг у- у ок. 3.8-сурет Туган куш бойынша 1здеу формасы Жобага тагы 6ip жана форма косайык. Оны Search 7-1.pas. файлына сактайык. Онын Caption касиетше «Поиск по дате рождения». Бул формадагы Label! жэне Label2 компоненттершщ Caption касиеттерше «Введите дату рождения человека» «дата вводится через точку» - деп жазу керек.жогарыдагы формага уксатып жасау керек (Edit компонентасын умытпаныз). Forml, Form3, Form4 арасында байланыс орнатамыз Forml формасында implementation секциясында келес! жолдарды енгтзем1з. USES MyUnitReport, Search7, Search7-1;. Фамилиялар аркылы мэз1р асты i3fley рыш OnClick окигасына келеа жолдарды енпзем1з: procedure TForml.Family 1-ptClick (Sender: TObject); IF Form3.ShowModal = mrcancel THEN Exit; Forml. Tablel.IndexName := Familylndex ; Forml. Table l.setkey; Forml. Table 1. FieldByNamef Family ).AsString; = Formi.Editl. Text; Forml. Tablel. GotoNearest; «По дате рождения» пункт1мен жумыс icrey ушш OnClick окигасынын rypi мынандай болу керек: procedure TForml.Date-ptClick (Sender: TObject); IF Form4. Show Modal = mrcancel THEN Exit; Form I.Tablel.IndexName := 'BirthdayIndex ; Forml. Table l.setkey; Form 1. Table LFieldByNamef 'Birthday ).AsString: - Form4. Edit I. Text: 121

123 Forml. Tablel.GotoNearest; HoMepi бойынша сурыптау пунктшде OnClick Ti окигасында келеа жолдарды жазу керек: procedure TForml.Number-ptClick (Sender: TObject); Forml.Tablel.IndexName := 'Number ; Forml. Table l.setkey; Forml. Tablel. GotoNearest; Фамилиясы бойынша сурыптау OnClick окигасында келеа кодтты жазу керек: procedure TForml.Family2-ptClick (Sender: TObject); Forml.Tablel.IndexName := Familylndex'; Forml. Table l.setkey; Forml. Tablel.FieldByName(Family).AsString := 'A ; Form 1. Tablel. GotoNearest; Run\Run командасы аркылы багдарламаны icne косамыз. Косымшаны шыгу батырмасын басып,немесе файл\шыгу аркылы жабамыз. Жобадагы барлык езгертулерд! сактаймыз. 122

124 4 «Кггапхана жуйес!» деректер корын баскару жуйесш куру Ж умыстыц максаты: «Клтапхана жуйесь> ДКБЖ алдын ала жобалап, мецгершген теориялык деректерге суйенш жуйеш куру. Деректер корына Kipicne. "Ютапхана"ДК демонстраииясы. Барлык теменде келт1ршген мысалдар "Клтапхана " ДК-на жатады, оныц баскару жуйеы ютаптарды опт туршде экелушшщ жумысын автоматизациалау ушш бершген. Информациондык агымдарды корыту. Ютаптарды кетерме туршде экелуып баспасездер (ютапты экелетшдер) мен дукендер (ютапты сатып алушылар) арасында дэнекер болып келедк Бул дэнекердщ болуы 6ipHiuici мен екшипсше де ыцгайлы болып келедк баспасез ютапты шыгарысымен тираждыц барлыгын немесе 6ip белшш кетерме экелуипге тасымалдайды, осы аркылы ол кептеген дукендермен байланысты 1здеуден кутылады; дукендер осы аркылы кетерме экелушще езше тек Ресейде гана емес, Таяу шет елдердщ баспасездермен шыгарылган кггаптарды табады. I суретте кетерме экелуцл мен cepiktectepi арасындагы байланыс бейнеленген. Сонымен, кетерме экелуип мен онын эрштестер1 алмасатын кужаттыц eici Typi бар: беру, сатып алу немесе кайтару Аркеме кагаз жэне телемдер туралы кужат. Лркеме кагазы юмге, неше, кандай ютаптар сатылды (сатып алынды) туралы деректер бершедй Телемдер туралы кужатта - телемдер сомасы мен эрштестердщ аты бершедк Деректер корын орындаудын тэрт бк 1) ДК-нын жобасын жасау. Б1здщ ДК бойынша кем дегенде 5 кесте болу кажет. Firms кестеде эрштестер туралы барлык керект1 деректер болады. Осы кестеде эрштеспктердш байланысушыларыдыц зацды мекен-жайы, телефоны жэне эрштестш толык атауы керсетшедк Осы кестеде сонымен катар, 9p6ip сернстердщ жиналган карызы сакталады, ол кебшесе сальдо деп аталады. Books кестесшде кез келген тасымалдап-жетюзушие (баспасезде) немесе айырбастау аркылы 6ip рет болса да сатып алынган ap6ip ютап туралы мэл1мет болады. Nakls KecTeci т1ркеме кагаздар туралы деректер] орналасады, ягни осы кестеде Аркеме кагаздын тиш, ж1бер1 MepaiMi, тауарларды кабылдау туралы деректер сакталады. Осы кестеде ер!стердщ аралык саны бола алмайтыны анык, сондыктан ттркеме кагазбен байланысты кггап туралы деректерд1 Movebook кетесщде сактаймыз. Онын ерютершде сэкес т!ркеме кагазга, тасымалданган ютаптардьщ саны мен атаулары 123

125 женшде арнайы сштемеш белг1лейм13. Payments кестеде телемдер туралы мэл1мет болады. Ягни им жэне К1м г е канша акша телейтнн. Теменде "Ютапхана" ДК-ныц непзп кестелер» бершген кесте Nakls кестеа 6 pic аты Кызмет! NakllD Салымньщ уникоды идентификаторы. Осы epic бойынша алгашкы Kijrrri жасау керек. NDate TipKey кагазыньщ курастыру Mep3iMi. Осы epic бойынша салымдарды, олардын келу! бойынша сурыптау ушш индексп жасау керек. NRetDate Сатылмаган ютаптардьщ кайтару Mep3iMi. Уакыты еткен сайын кггаптар кабылданбайды немесе кайтарылган ютаптардын багасы темендейдь Айырбастау xipkey кагаздарында колданбайды. NType TipKey кагазыньщ rani: 0 жабдыктаушыдан сатьш алу; 1 сатып алушыга сату; 2 жабдыктаушыга кайтару; 3 сатып алушыдан кайтарым; 4 кггаптар айырбас аркылы алынады; 5 кггаптар айырбас аркылы тасымалданады; 6 алгытелем аркылы кбайты сатып алу; 7 алгытелеммен к!тапты сату NFirm Эрттестщ уникалды идентификаторы (FIRMS кестесшщ FirmID epici) NCoeff Жёцйдж\устеменщ елшемь FIRMS кестесшщ FCoeff epiciiieti KeiuipLnezu, ce6e6i бул epic уакыт еткен сайын earepruiefli NSum NCoeff epicihih мэнш ескергендеп соммасы. Салымнын сомасы NPayedSum Теленген сома. Айырбастау TipKey кагаздарында колданылмайды. NRetSura Кайтару сомасы. Айрбастау тфкеу кагаздарында колданылмайды 4.2-кесте - Books кестес1 6 pic аты Кызмет! Bookld Итаптын уникалд! коды (алгашкы к!лт) BName К1таптьщ аты (индекспк epic) BAuthor Автор(лар) В Publish Баспасез BYear Шыгарылган жылы В Pages Беттер саны BISBN Код ISBN BStand Каптаманьщ стандарты (орамадагы штаптар саны) BQuan Коймада калган ютаптар саны В Price Кгсапхы сатып алу багасы BOpt Кетерме сатып алу багасы BRozn Белшекпк багасы 124

126 4.3-кесте - Firms кестеа 9pic аты Кызмеп Firmld Эрштестщ уникалы идентификаторы (алгашкы юлт) FName Эрштестщ аты (индекса epic) F Address Адрес FCity кала 'FPhone Телефон(дар) FEMaii Электронлы почтанын адресi FPerson Байланыс адамы (аламдар) FFinDelta Каржылык сальдо FCngDelta Айырбастау сальдосы FCoeff Жещдд1Ктер/уётемёлер коэффициент! FRetDays Кайтару кундершщ саны 4.4-кесте Movebook KecTeci epic аты Кызмеп Moveld Уникалды идентификатор (алгашкы кiлт) MNakt NAKLS кестесшщ Naklld epiciheh салым коды (индекст1) MBook BOOKS кестесшщ Bookld epiciheh KiTan коды epici (индекса) MQuan Кпаптын экземплярынын саны M Price Женишктер/устемелер мелшерш ескеру!мен 6ip экземилярын багасы 4.5-кесте - PAYMENTS KecTeci Opic аты Кызмегп PayLD Телем кужатыныц идентификаторы (алгашкы кьчт) PFinn FIRMS кестесшщ Firmld еркйнш apiirrec коды Pout Телем багыты: True cepiirrecke; False cepiktectch Pdate Телем мерз!м! PSum Телем MepsiMi Кестелер мен epict epain аттары. Файл-сервердпс ДК-да кестенщ аты файл атымен сэйкес келедк Windows - тын 32-разрядты версияларында орысплдес атгарына ган руксат берет' щйктен, кестелерщ ютаптар, mipxey парацтары, т.б. деп атау ынгайлы болушы еда. Буны жасауга болмайды, ce6e6i кирнллицаны SQL-де пайдалануга болмайды. GpicrepiH атында кесте атынын 6ip-eKi эрнгген курылган префиксп коюга пайдалы (Nakls кестесшде барлык аттар «N» эрпшен басталалы. Firms кестесшде «F» эрпшен т.с.с.). Бул cis opicri SQL тш н щ резерва сез!мен атауынан кутка рады. Qpicrep атын мумюншшпщ з бойынша ыкшамды ету1шзге тырысыныз - бул багдарламанын кодын жэне оны куру уакытын кыскарады. 125

127 Кестелерд! курастыру. ДК-ны курастырудан бурын, онын каталогын курастырамыз - CXB1BLDATA. Файл-серверл1 ДК кестелерш жасау Delphi курамына юретан, Database Desktop (DBD) утилита аркылы жасалады. DBD утилита аркылы кестеш жасауга езгертуге, жазуларды жасау, езгерту, оларды карауга болады. Оюшшке орай ол кириллицаны кабаламайы, соныктан 6i3 орыс талшдеп жазулармен жумыс ютей алмаймыз. Баска онын сондай улкен кемш ш п клиентсерверлис ДК-Да колдана алмайтынымызда. Database Desktop-ты косыцыз. Bipifflni ictefltihimi3, утилитанын жумыс каталогын женге келтсру керек, ол ушш File > Working Directory командасын тандап, шыккан терезеде каталогына сьтемеш танданыз. Nakls кестес1н жасау ушш File\New\Table команасын тандаймыз. DBD Create Table терезесш ашады, онда кесте тиши тандауга болады. KecTeHin rani оныц кептеген касиеттерш аныктайды. Paradox7 т и т файл-серверлж кестелер! ушш ец жаксысы деп есептеуге болады: ОК батырмасын шертш Paradox7 нукасына косыламыз. Экранда кесте структурасын курасытыру жэне езгертуге арналган терезе ашылады. Бул терезенщ Field roster кестесшде курастырьшатын кестенщ эр 6ip epicihe 6ip жазу сэйкес келедк Field Name баганына epic атын енпзу керек, Туре баганаына - ерктерде саталынатын деректердщ ranih аныктайтын тиип енпзу керек, Size баганына - epicrin узындыгын аныктайтын санды енпзуге керек (ёргстхц барлык типше MiHflerri емес), Key баганасына - жулдызша (*) символын, егер бул epicrin мэн1 бойынша алгашы юлтта курастыру керек болса. Bipifflni ер!етщ Naklld атын енпз1щз жэне Keneci баганага ету ymih табуляция пернес1н басыцыз, онда epicrih Tnni енпзшедь DBD утилит} бола алатын типтерщ керсету ушш бос орын пернесш басыцыз жэне онда Autoincrement тишн тандцыз. Автоинкриментт1 типи epictep б1рмэнде жазуды аныктайтын уникальд! саны жасау ушш колданылады: 6ipiHiui ажзу ушш - 1 саны, ekhiuiici ушш - 2, т.с.с. белгип 6ip жазуды алып тастаганда ол уш1н белпленген сан жанадан колданылмайды. Key баганасына басыныз. Пробел пернесше басыцыз, epic бойынша алгашкы кштта жасау yniih, Nakls кестен1 толтыруды жалгастырыцыз. Алгашкы 4 epici бойынша Required Field жалаушаны койыцыз. 4 баска epic келеа жазуды енпзген кезде аныкталмауы да MyMKiH, олар ушш Default value жолында мэшн енпзуге болады: NCoeff epici ушш мундай мэн 1 болады, калганы ушш 0. NDate epici бойынша индекса аныктау

128 керек (кестелершш терминологиясыеда ол екш ш шк деп аталады). Бул ущш терезенщ он жак бурышында Table properties T!3iMiH ашыныз, Secondary Indexes nyhkti танданыз жэне пайда болган Define пернесше басыныз. Тересшде Define Secondary Index кестенщ opictcp т1з1м!нде NDate epicti танданыз содан кешн он жакка багдаршамсн пернесше басыныз, ол Indexed fields т1з1мше epicti ауыстыру ушш. Index options топты флажоктар аркылы келеа индекс езгешел1ктерш аныктауга болады: Unique - индекс уникалый мэндерш сактайды; Maintained индекса epicrep мэндершщ артуы бойынша сортталады.; Case sensitive индекс мэтйдок ергстерде эрнтгер региспрше сез1мтал; Descending индексп epictep кему бойынша топталады. Б1здщ жагдайда бул фажоктар калпын езгершаз кадырамыз. DBD индекс атын сурайды(дк серверщщ кебшдегшдей кестелер!нде индекстер ес1мделед1 ) Nakls date - жолын енгыщз, ОК пернесше басыныз. Кайтадан пайда болган кестенщ структурасын аныктау терезесшде Save as пернесше басыныз жэне содан кейш файл атын енпзвдз - N akls. Жана гана Щз Nakls кестенщ структурасын жасадык. epictep сипаттауын колданнып сендер езгщз керсетшмд1 ДК-ньщ баска калган кестелердщ сруктурасын жасай аламыз. Алмастыру кестесь Кестенщ кайсыб1р epiche баска таблицанын epicimeh бггмэнда байланысты орнату керек. Бул жагдайда BDE 6ipiHnii кестенщ epicihe жанадан енпзшетш жазудын мэш баска,бул кезде алмастыру KecTeci еп аталатын, кестешя белпленген жазудын мэн! болатындай етш бакылауы жузеге асырады. Мысалы, б1здщ ДК-да DBD аркылы Movebook кестенщ MNakl epici мен Nakls кестенщ Nakls epicimeh байланысты орнатсак, Movebook BDE кестеш енпзген немесе редактшген кезде Nakls алмастыру кестенщ NakllD еркпнщ мэншщ 6ipeyiMeH сэйкес келмейтш мэндерш кабылдамай кояды. Байланысты орнату ушш Table properties Т131мйгде Table Lookup nyhkti тандау керек жэне Define кнопкага басу керек. Пайда болган Fields пзбегшде мэнш багынатын epic тандалады, онга деген багдаршалы кнопкага басып сол epictih аты Field name жолына кеяшршедь Lookup table Т1збепнде керекп кесте тандалады жэне солга багаршалы кнопкага басып, осы кестенщ алгашкы k u i t epicmih аты Lookup table жолына кеипрмедь Ауыстыру батырмалардын кызмет!: 127

129 - Just current field тек байланыскан ер1стердщ сэйкес кел тексер1лед1; All corresponding fields - ею кестенщ барлык ерпердщ сэйкес келу! текскршедц Fill по help - Тексершетан epicti редакталеген кезде алмастыру KecTeci керсетшмейдц Help and fill - Тексершетан epicti редактшеген кезде алмастыру KecTeci керсетшед!. H erijri форманы курастыру. Жана проект! бастап, келес! касиеттерш езгертащз: Caption = 'Накладные на книги' Name = fm Nakls' Одан кешн моульд! арнайы fmnaklsu атындагы бумада сактаныз, ал проекта - Nakls атына. Формага eki TPanel панельд! койыцыз, оладын Align касиеттерше albottom мэндерш:оныц ец астындагы навигатор батырмалары мен багдарламаны жабу батырмасы ymih курастырылады, ал оныц устанде орналаскан - DBGrid сеткасы ушш, ютаптар тазбеп ораналасады. Колданушы панельдщ бшкмпн езгерту! ушш, форманыц бос орнына TSplitter белу компонентшщ орналастырыныз, оньщ Align каситеше albottom мэнш ал Beveled касиетше True мэнш жэне Height касиетше - 5. Формага тагы б!р панельд! орналастырыныз, оныц Align касиетше alclient мэнш - бул панельде салымдар туралы магйметермен DBGrid сеткасы орналастырылады. Устацп жэне ортацгы паненльдерге TDBGrid компоненттерш орналастырыныз жэне олардьщ Align касиеттер!не alclient мэндер!н койыцыз. Ец астындагы панельде Caption касйетш тазартып, оган ДК TDBNavigator навигаторыныц батырмаларын орналастырыныз жэне TBitBtn батырмасын. Навигаторы сол, ал батырманы - оц жагына орналастырыцыз. Anchors батырманьщ касиеттер тымш ашыцыз жэне навигаторды он жак шет бойынша тузшещз: False-Hi akleft касиетше, True-ui akright касиетше. Батырманьщ касиетше мэнш койыцыз. Барлык жасаган езегртулерызд! дискте сактаныз. ДК псевдонимж курастыру. Псевдоним немесе алиас файпсервердш ДК-лары ушш ДК файлдарына жолын ашады. Database\Explorer командасы аркылы SQL Explorer утилитасын косыцыз, ашылга терезенщ Databases калтасында узелде тышканнын оц жак батырмамен шертш контекст! мэз1рден New командасын танданыз. Standard Нускасын тацдацыз. Ол типи псевонимер файлсервердщ ДК-лары ymih жасалган.

130 Одан кешн Standard 1 псевдоним аты пайда болады, Definition калтасында нын касиеттер! бершген болады. Standard! атты Bibldata атына 03repTini3. Енд1 Definition вклакасына етм з PATH касиетшщ он жагындагы бос epicihe ДК файларына жолын жазьщыз: C:\Bibldata. Databases калтасында жанадан курастырылган псевдонимде тышаннын он жак батырмамен шертвдз, Apply командасын танданыз. Жанадан курастырылган псевдонимд1 сактау туралы командасын растаныз. Енд! ci3 егер Databases класындагы шиырылган тушге бассаныз, ал содан кейш - Tables шиырылган туш белпсше бассацыз, ci3 ДКнын барлык кестелерш кере аласыз. Деректер модуль Программада 6i3re Ttable-jxm 5 компонент! кажет болады жэне TdataSource-maH 2 компонента Оларды болек деректер модул5нде орналастырамыз. File\New\Others командасын тандацыз, ол обьектшер сактаушысын ашу ушш, ашылган терезенщ New калтасында Data Module беллде eki рет шертщ13. Деректер моулшщ касиетше мэнш койып, файлда сактацыз. Модульщ проектгмен байланыстыру ушш, панель инструментшщ батырмасына басып, жана гана курастырылган dmnaklsuфайлын танданыз. ДК-мен кестелерд1 байланыстыру ушш Delphi компонент палитрасында BDE калтасына TDatabase компоненттп колданыныз, оган шещгвдз, одан кешн обьектшер агашынын терезес5ндеп DM моульдщ атында. Обьектшер инспекторы терезесше A lias Name касиеттер Ti3iMiH ашыныз, Bibldata псевдонимш танданыз. DatabaseName касиеттщ жолына локалы псевонимнщ кайсы 6ip атын жазыныз(мысалы ААА), ол TDatabase компонент!н курастыраы. Енд1 обьектшер терезесше ТТаЫе компонетп орнатыныз(калтасы), оны «ААА» псевдонимше апарыныз. Обьектшер инспекторшщ тересшде жана DatabaseName компонент!н касиетшде автоматты турде локальд1 псевдоним аты пайда болады, 6ipaK KOMnoHeHiriH он жагынан кызыл белп болады, ол ТТаЫе компонентой жумыска даяр emectirihih белпск ТТаЫе компонент МТ болып есептеледь Ол кебшесе файлсервердж жуйелершде кез келген 6ip кестеден деректерге шыгу ушш колданылады. Компонетп жумыска даярлату унйн, ол кестенщ атын аныктау тшс: TableName касиеттершщ Ti36eriH ашыныз жэне онда Nakls кестесш танданыз. KefiiH 6i3re осы компонетке 6ipneuie рет кeлyiмiз мумкш, сондыктан онын Tablel атын онымен байланысан кестенщ атына ауыстырыныз: Name касиеттщ жолаиы Nakls енгышз. 129

131 Компонент палитрасынын Data Access каласындагы TDataSource компонентой ерешелешз, одан кешн обьектолер агашында NAKLS компонетке шартвдз, ол оны ДК-мен байланыстыру ушш. Енд» непзп терезенщ екншй сеткасында MOVEBOOK кестенщ деректерш корсету ущщ екшиш кос компонентер! ТТаЫе мен TdataSource-ты даярлаймыз: ААА псевдонимше мэл1метттер наборын «салыныз» ал оган - деректер источнипн; MT-Hi MOVEBOOK кестес1мен байланыстырып, оган атты 6epini3. алпметттер модулшщ калпы осы аукыттагы 15 сур.керсетшген. NAKLS жэне Move деректер наборы 6ip 6ipeyre деген реляционды байланыскан: 6ipiHini МТ-де жалгыз(салым) жазуына екшяпсшдеп б1рнеше жазулары (кггаптар ) сэйкес келу! мумкш. МТ оларды бшу ушш оларды даярлау керек. Деректер модулшщ кодынын терёсщдё калтасына этощз(батарманы басыныз ол шыгу ушш), тышкан аркылы NAKLS жэне Move компоненттерш обьектолер агашынын терезесшен Diagram калтасына аударыцыз. Ауысу Drag&Drop классикалык эдос бойынша жузеге асады: обьектолер агашы терезесшде компонентке тышканнын сол жак батырмамен басып турып Diagram вклакасына ауысады, одан кейш босатылады. Кестелерд1 Diagram калтасында 6ip6ipHin астынан орналастырыныз. Кестелер арасындгы байланысты орнату ушш панель инструментшде батырмага басыныз тышкан курсорны сызылган курсор калпында етш устщп кестенщ астынгы шегше апарыцыз(сол аукытга белп крестикке ауысады), тышканныц сол жак батырманы басыцыз, оныц басатын калпында астынга кестенщ уатщп щебшё Деш сызыкты сызыцыз. Экранда байланысконструкторыныц терезес! пайа болады. Байланысты орнату ушщ, аталык (родительская) жэне туынды (дочерняя) кестелершде байланыстыратын вргстерд! беплеу кажет. 0picTi ауыстыру ymih Available Indexes тоз1мш ашу кажет, MovebookNakl индексто тандау кажет. Одан кешн Detail Fields ерюнде MNakl аты пайда болады - оган жэне Master Fields тозмшде NakllD еркке шертощз, одан кейш Add батырмага басыцыз. ОК басыцыз. Movebook.DB кестесше басып Move MT-Hi ашыцыз: обьекплер инспекторында онын Active касиетше True мэн1н койьщыз. Солай Nakls кестесщ ашыцыз. File\Use Unit Командасы аркылы Heri3ri Tepe3eciHiH модулih деректер м утм ен байланыстырыныз. DBGridl устщп сеткасы ушщ DataSource касиеттер Ti3iMiH ашыцыз жэне онда DataSourcel пункто танданыз - сетка б1рден Nakls МТ-ден деректермен толтырылады.

132 Солай астьщгы сеткасын DataSourcel деректер нег'тмен байланыстырыныз. DBNavigator 1 ДК DataSourcel навигаторымен источнипмен байланыстырыныз. Обьект epictepih жасау. Сеткаларында парнерлардыц жэне ютаптар аттарын керсету удин баска кестелерден косымша epictepih МТ-ra косып, МТ-Д1 кенейту керек. Ол ymih багдарламарын прогонын аяктап, деректер модулще оральщыз. Деректер модулi терезесш бейнелеуну! ушщ F 12 пернесш басыныз, жэне терезенш ортасында 6ip орынга жиналган компоненттер 6ipiH-6ipi басып орналастырмауы ушш оларды терезенщ жан жагына таратыныз. Nakls компонентже ек1 рет шертш, epictepih редактшейтш TepeciH ашыныз, контекспк мэз1рщде Add all fields командасын танданыз - редактор терезеы Nakls кестен1н барлык epicrep рз!м1мен толтырылады. Бул Щшм Nakls МТдщ эр 6ip epici ymih арнайы езшщ касиеттер1мен, эд!стер1мен,жэне окигаларымен обьект жасалгандактын белпсь Егер с з epicrepfli редактшеу терезесшде кез келген epicihe шертсешз, онда обьектшер HHcneKTpi терезесшде epictep-o6beicricihih KacHerrepi мен окигалары шыгады. YHci3 кел1с1м бойынша Delphi epic-o6bekticine атын береди ол МТ аты мен epic атынын косындысынан турады, енд1 багдарламада NaklsNakllD, NaklsNFirm, NaklsNDate жэне т.б. аттары бар компонентт1р пайда болады. Move МТ ymih ерктер-обьектюш жасаныз. MT-piHe баска кестелердщ epictepih косу ушш осы Kecmepi ущщ сэйкесшше МТ-д1 ictevimi3 кажет: обьект агаштарынын терезесшде DB компонентше шгы 3 ТТаЫе компонетп «сальщыз» ; онын 6ipiHiniciH FIRMS кестемен байланыстырыныз, екшил BOOKS атын 6epin МТ-Hi BOOKS кестеымен, уппнипсш TYPENAKL атын 6epin TYPENAKL KecTeci мен байланыстырыныз(бул кесте салым тшгп кодынын разшифрофкасы бар). Тагы да Nakls компонетшде eki рет шерту аркылы epictepi редактшеу терезесш ашыныз, Контекст M93ipi шакырып, онда New Field командасын танданыз, ол жана epicti жасаушысын шакытту ушш кггелшедь Жаца epicmepi щрастырушы аркылы МТ-де жана opictep;ii 3 типтщб1реуше жасапуы мумкш (тип Field type Тгатмшдеп ауыстырыл ы м д ар да аныкталады). Data epictep арнайы деректерд! сактайды ; Calculated есептелеиетщ деректерд1 сактайды; Lookup epictep подстановка KecTeciHiH дерертерщ сактайды; Sipimni тщгп epic бул epictih OnGetText окиганы корытушыда толтырылатын бос багананын сеткасында бейнеленедк Есёптелёнетш epic OnCalcFields MT-iH окига корытушыда толтырылады. 131

133 Подстанвка epicih толтыру, ппн мэл1мттер баска МТ-нщ Керекп epiciheh алнады. epicri курастырушы терёзесшп* Name жолында жана Firm Name epicrih атын енпзы з, Туре т1з1мш ашып, epic ушш String Tiurri тан дацыз, онын Size елшемш 40 тен етш койып, Lookup переключатель орнатыцыз, Key Fields epictep Ti3iMiH ашып, МТ-де NFirm epicih танданыз, Dataset й зш в д е Firms MT-Hi танданыз, Lookup Fields т1з1мшде - FirmID ш т о к epicri танданыз, Result Field тымщдё - FName epicri танданыз. OK басыныз. Nakls МТ-не мэтщдок т ш т атты epicri курастырыцыз, 23 символды узындыгымен, ол ушш NType к1лтж epicri тандап, оны TypeNakl деректер TepyimH TypelD epicneh байланыстырыныз жэне корытынды epic реттне осы МТ-ныц TName epicri танданыз. Move МТ ушш 3 атты ауыстыру Name, Author жэне Publish epicrepih курастырьщыз, оларды МВоок epici аркылы ВооЬ МТ-мен байланыстырып, BName, В Author, BPublish корытынды epictep ретше сэйкесшше альщыз. Бул epictep ютаптар зйэтмщдё курамды epicri форматтау уппн керек болады. ерктердщ елшемдер1 сэйкесшше - 75, 30,40. Кестелер. Су раны ста р. Деректерд! визуациялау. SQL - сураныстарын курастыру. SQL -сураныстарын жасау ушш Delphi ортасынан Database Explore командасын немесе непзп мэзщден Пуск Программы Borland Delphi 7 SQL Explorer командасын орындацыз. Одан кейш брандмаузер терезесшде BIBLDATA псевдоним1н тауып, онын сол жактагы байланыс батырмасына басыныз, ол «ютапхана» ДК-га шыгу ушш жасалады. Бул Ж файлсерверж болгандыктан онда тек кестелер сакталады. BIBLDATA байланысты ашып, кез-келген кестенщ атыа басыныз, одан кешн Enter SQL вклакасына ет^щз. Yhci3 келгам бойынша бершген сураныстын шрйфтш езгертвдз, оны Courier New моноширный шрифтке ауыстырьщыз (View Text Font командасы аркылы тандалады). Дайын оган суранысты орныдау сураныс панельщ он жагынагы ^ батырмасы аркылы icteyre болады. Байланы скан кестелер арасынан сурыптау. Келеа суранысты карастырайык: SELECT * FROM Nakls, Firms Егер осы суранысты орындасак, онда ешюмге керек емес эр 6ip салымы кёсгёсшдф неше epicrep бар болса, сонша рет кайталанатындай МТ аламыз. epictepi ушш реляционды байланысты ескеру ушш тандау критершн орналастыру керек: 132

134 SELECT * FROM Nakls, Firms WHERE FirmID=Nftrm Кестелердщ мундай байанысын кейде олардын деккартык кебейтумен атайды. WHERE арнайы сезшен басталатын секциясына танау критерш жасалынады. eki кестеш байланыстыру ушш, NAKLS кестесшщ op6ip жазуы уцнн NFirm epicinae онымен байланыскан FIRMS кестесшдеп жазудын шифр1 бар екенш бегшед1к. Корытыны МТ-де сонша жазу NAKLS кестес'шде нешеу! бар болса сонша болады, эрб ф жазуына он жагынан FIRMS кестесшщ барлык epicrep жазулары косылады. Kejieci сураныс 1 сабактын багдарламанын DBGridl сеткасында бершген NAKLS MT-Hi кайталайтын MT-Hi ку расты рады: SELECT NakllD, NDate, FName, TName, NSum, NPayedSum, NRetSum, NCoeff, NRetDate FROM Nakls, Firms, TypeNakl WHERE FirmID NFirm AND TypeID=Ntype Жазуларды сурыптау. Жанагы мысал накты турде NAKLS MT-Hi кайталанатындай болуы ymih, NakllD opici бойынша жазуларды TepyiMi3 керек. ORDER BY арнайы сезден басталатын секциясы колданылады: SELECT NakllD, NDate, FName, TName, NSum, NPayedSum, NRetSum, NCoeff, NRetDate FROM Nakls, Firms, TypeNakl WHERE FirmID=NFirm AND TypeID=NType ORDER BY NakllD Кестелер арасынан байланысты орнаткандай сурыптауды кезкелген epicrepiheh курастыруга болды. Киын тандау критерийлерь WHERE секциясы аркылы кестелер! байланыстырумен 6ipre, киын тандау критерийлерд! курастыруымызга болаы. Бул ymih секцияда NOT, AND, OR турдеп логикалык операцияларымен байланыскан, оперыторлар саны белпленед1, мундагы тильда(-) 6erici катынастын белпс1: SELECT NakllD, NDate, FName. TName, NSum, NPayedSum, NRetSum, NCoeff, NRetDate FROM Nakls, Firms, TypeNakl WHERE FirmID=NFirm AND TypeID=NType AND (NSum> OR NRetSum>0) ORDER BY NakllD Катынас опеациясынын он жагынан мэш белпленед!. Егер ол - мэтшщ немесе аукыт-дата титч болса, сл апострофка немесе еюл1к 133

135 ковычкага алынуы Twic. С)дан баска LIKE операциясын колдана аламыз, ол LIKE операциясынан он жагындагы мэн буюл epicti емес, тек 6ip б ел тн курастырса болады. SELECTBName FROM Books WHERE BName LIKE "Я%" ORDER BY BName Бул сураныс кестеден ютаптщ тек «я» эрпшен басталатын мэндерш алады. (%) Benrici оныц орнында кезектелген символдар бола алтыны кереетеда. Келес1 сураныс атында 6ip рет болса да «Я» эрги кезесетш ютаптарды тандайды: SELECT BName FROM Books WHERE BName LIKE "%я%" ORDER BY BName IN арнайы co3i аркылы opicrrih бола алатын мэндерш тере аламыз. Келеа сураныс кестенщ 1,3,7-mi ютантаптардьщ аттарын тередк SELECT BName FROM Boob WHERE BookID IN (I, 3, 7) IN Операциясынан кешни жай жакшада бола алатын мшдерш жазудын орнына, SELECT операторын орналастыра аламыз. Егер оларга экелшген ютаптарды теленбеген барлык сатып алушыларьщ Ti3iMiH керу керек болса, келеа суранысты курастыра аламыз. SELECT FName FROM Firms WHERE FirmID IN (SELECT NFirm FROM Nakls WHERE NPayedSum=О AND NType IN (1, 7)) ORDER BY Fname Кестелердщ псевдонимер1 жэне коментарийлер. Б1здщ кестелерде ерктердщ сэйкес келет1н аттары жок, бул кестенщ кез келген epictin аты кесте аттарыныц бас эр1птер1нен басталатындыктан. Ал eki не одан да коп кестелердщ opictep аттары сэйкес келгенде йена Гсхеушю керек? Егер б!з бйдщ ережет колданбасак, ягни префикстарды коймасак, онда ею аты пайда болушы ед1жэне келес1 фрагмент Шркезцсшшеместжке ээкелуш1 едк SELECTNakllD, Date, Name, Name, Sum, PayedSum,... Б1ркелкш1кёмест1кт1 жою уш'н epictep аттары, олардын кестелер аттарымен толтырылады. SELECT NakllD, Date, Firms. Name, TypeNakl. Name, Sum, PayedSum,... Кайталанатын кестелер аттары сураныстьщ баска да секцияларыда кездесетщдактен оларды атауды кыскарту уш н SQL -де кестелерщ аттарыньщ орнына онын цсевдонишн колдануга: SELECT NakllD, Date, F. Name, T. Name, Sum, PayedSum,... FROM Nakls, Firms F, TypeNakl Т.. 134

136 Псевдоним секциясында кестенщ атынан кейш белпленедк Сураныстьщ кез-келген комментарий болуы мумкш: SELECT /*ёр\стер1нщ цайталанатын аттары кестенщ псевдонимдершен толтырылады */ NakllD, Date, F. Name, T. Name, Sum, PayedSum,... /* псевдонимдер кестенщ атынан кейш символдарымен бермед!*/ FROM Nakls, Firms F, TypeNakl T... Агрегатты функциялар жэне жазуларды топтау. рютердщ аттарыньщ орнына жэне/немесе олармен 6ipre SELECT секциясында келеа агрегатты функцияларынын 6ipiH кол дану га болады: - A VG, аргум ен ттщ ортан гы м эн ш кайтарады ; - COUNT, МТ, барлык жазуларына аргументтердщ Kipy санын есептейдц - МАХ, аргументтщ максимальд1 мэнш кайтарады; I MIN, aprymehtrih минимаьд1 мэшн кайтарады ; - SUM, аргуметгш мэнерш косады. Агригатты функцияга келгенде аргуметтщ орнына МТ epicrepiheh курастырылган KepeKTi мэн болуы ммкш. Мысалы, келеа сураныс сатып алушылардын карыздарыныц орташа мэнш шыгарады: - SELECT A VG(NSum-NPayedSum-NretSum; -FRO M Nakls; - WHERE NType in (1, 7). Экелшген барлык кггаптардыц багасымен барлык экелушшердщ Ti3iMiH келеа сураныс бередк SELECT SUMfNSum), FName FROM Nakls, Firms WHERE FirmlD=NFirm AND NType in (0, 6) * GROUP BY FName Толыктай турдеп афегатты функцияларымен 6ipre кестелердщ epicrepi де бар сураныстар уппн топты секциялар кажет етед!, онда мшдетп турде барлык секциясында бершген epictep жазылады. Афегатты функцияларды колданганда трш нен кайталанатын epictep аттарын алып тасталынуы тшс. Бул ушш DISTINCT арнайы croi колданылады. Мысалы, темендеп сураныс кггаптарды экелумен байланыскан салымар Т1з1мш кайтарады: SELECT COUNT(NFirm) FROM Nakls WHERE NType IN (0, 6) Keneci сураныс экелуийлер санын цайтарады: SELECT COUNT(DISTINCT NFirm) FROM Nakls WHERE NType IN (0,6) 135

137 5 «Мешн досым» деректер корын куру. Жумыстыц максаты: «Менш досым» деректер корын Database Desktop аркылы куру. 1здеуд1, фильтрды уйымдастыру. Деректер корыньщ эз1рлеу тэрпбь Деректер корына юруге арналган жасырын атты (алиас) куру (жогарыдагы зертханалык ж у м ы с т а р д а н кара). Database Desktop кемепмен 6ipiHiui ДК жобалау. Енд) курамында 6ip гана кестеа бар, шдердщ топ студенттершщ т1з1м1мен карапайым деректер корын курайык- Кестеде op6ip студент туралы акпарат болады. Алдымен, б1здщ кестем1здщ курылымын жобалау кажет болады, оган кандай баганадар Kipefli жэне олардын курамында кандай акпарат болатынын аныктайык- Кестёш 5.1-сурет бойынша толтырыныз. Create Paiadox 7 Т able: ( Untitled ) field rotter Field N вша IZ E i Sru 1In kod щ * 2 h o A 30 3 PIRTHDATE ' D 4 TEL Щ A 5 FOTO V: -, 0 Щ 6 COMMENT M 240 ЯШКЖ:. Table fiiopet lies Vafc*j> Check* fiefinft. P 1. Requved Field 2 Minimum value: "3 * сурет - Кестенщ багандары 5.1 -кесте - кесте багандарына сипаттама: pic аты epic елш ТИШ ем1 Туспшстеме NKOD + Бул Autoincrement тиггп epic, кыскаша + 1 белпамен белпленедй. Осындай ерйггердщ мэн! 1 калам мен автоматты турде артады, 6ipaK б5з бул epicke мэндерд1 езимз енпзе ал май мыз. NKOD epicih Kipicripy аркылы кестеден ap6ip жазу взшщ ерекше HeMipiHe (сандык код) ие болады. FIO A 30 Бул epicte 30 символга дейт мэтшдйс акпаратты сактауга болады. Ол аты-жеш, теп, экесшщ атын енпзуге жеткушсп. Бул вргске "Required Field ' белпшесш орнату кажет, ол аркылы кестеш толтырган кезшде оган м тдегп турде акпаратты енпзуге мумтндж бередь 136

138 5.1-кесте -Жалгасы BIRTHD- ATE D Бул Date ти гт epic, онда б1з туган кундерд1 с актам тын болады. Осындай ерктердщ 4 байт узмндыгы бар жэне онда б!здщ дэу1р1м1зден 9999 ж. 1 кантардан - Шздщ дэу1р1м13деп 31 желтоксан 9999 ж. дейшп мерз1м курала алады. Ki6ice жылдарды тиянакты ендейд* жэне мерз1мд1 тексерудщ кi picxiрiлreii механизм*! бар. TEL A 20 ' 20 символга дей ш телефон нем1рлер1. Бул epic ymih Required Field белпленбеген/лктен (FIOдан баскалары), онда егер бершген адамнмц телефон жок болса, бул epicke акпаратты енпзу мшдетп емес. FOTO G Бул Graphic тйггп epic. Ол 6i3re б1здщ достарымыздьщ суреттерш сактауга кызмет етедк COMME NT... F Memo типтт epic. Онда косымша акпаратты сактайтын боламыз. Осындай epictep кез-келген узындыкты бола алады. Кестети курган кезде белгшенетш елшем кестеде (1-240) сакталган символдар санын бшд1ред1, ал калгандар символдар.mb кенейтшу! бар жеке файлда сакталынады. FIO epici ушш екшшшк индекс курастырайык - бул алфавигпк тэртштеп аты-жендер1мен жумыс icteyre мумюндж болады. Ол ушщ Table Properties ергсшде, калкып шыгатын тхзгмшке дашен Secondary Indexes тандап алу керек жэне Define батырмасын басу кажет. Экранда Define Secondary Index Tepe3eci пайда болады. ы Indexed H»ldi ТЯШЯШШ J i Jil Change ex det, Г Ugiqui 7 MaifHerted Г Case *erv*<ive Г" Dgtcendng 5.2-сурет - Define Secondary Index терезеа 137

139 Суретте керсет лгендей он жак бума кураушыга FIO-ны он багытшасы бар батырмасы аркылы орналастырамыз. Одан кейш Ок пернесш басамыз. Кейш экранда Save Index As атты юшкентай терезе шыгады. Оган б1здщ индекс! бар келеа атты енпзщ!з: indflo жэне Ок басыцыз. Save As... пернесш басып, кестеш STUDENTS атымен [ ' сактацыз. Одан кейш Database Desktop багдарламасымен жумысты аяктацыз. «Менщ досьш» багдарламасын курастыру. Жана жобаны курып, MeHin досым атымен сактацыз. Басты форманы fmmain деп, ал модулын - unmain деп атацыз. Форманын Caption касиетше «Менщ достарым (Мои друзья)» мэшн енпзадер. Суретте керсетщ генд ёй сплиттер жэне п ан ел ьд ер д 1 формага орналастырьщыздар. ; ратор 1 raj paleft pamid pabot 5.3-сурет - Форманын алгашкы б ел Кешн формага 2 компонента - TdataSource (Data Access бетшен) жэне ТТаЫе (BDE бетшен) орналастырыныз. Бул компоненттер 6i3 курган деректер корымен байланыс куру ушш керек болады. Формада DataSourcel компонентой басып, оган калкып шыгатын тоз!мнен Tablel мэшне DataSet касиетш тандацыздар. Tablel компоненто ушш келеа касиетто тандацыздар: 5.2-кесте - Tablel компонентшщ касиеттер! Касиеп Касиет мэш DatabaseName (лздермен куралган жасырын атты тацданызлар. TableName STUDENTS.db Active True 138

140 Сонымен катар, IndexName касиеп ушш indfio мэшн орнатыцыз. Tablel компонент! бойынша ею рет шертщ1з. Экранда fmmain.tablel атты юшкентай терезе пайда болады. Осы терезенщ iuiinae тышканнын он батырмасын басып, мэз1рден Add АН Fields пунктш танданыз. Суретте керсетшгендей терезеде 6i3 курган KecTeHin epic Ti3iMi пайда болады. Осыдан кейш терезеш жабуга болады. IfmMainJabtem - x i г 1 I г М [nkod по BIRTHOATE TEL F0T0 COMMENT 5.4-сурет- Кестедеп ерютердщ Ti3iMi pabot щанелше DBNavigator (Data Controls 6 e T i ) компонентш орналастырыныз. Оньщ Align касиетш alright етш орнатыныз. pamid панелше DBGrid компонентш орналастырыныз жэне оньщ Align касиетш alclient етш орнатыныз. Ею компонент ушш де DataSource касиетш DataSourcel етш орнатыныз. DBGridl компонентш ею рет шертыз жэне бул компонент ymih жол редакторы шыккан терезеде тышканнын он батырмасын басып, шыккан мэз1рден Add All Fields пунктш танданыз. Кейш Тшмшёй NKOD, FOTO жэне COMMENT epictepih тышканнын он батырмасымен жойып тастаныз жэне epic редакторы терезесш жабыныз. 1ске косу ушш багдарламаны косып, Ti3iMre Фамилия Теродз (5.5-сурет). ' /' - Ю! x j н FIO I b i r t h d a t e I t e l 7 3 Новиков Крвлев 1 «1 * Ы м М - Ы 1!< 5.5-сурет - Кестеш толтыру 139

141 Эрине, егер DBGrid баганалардыц аты орысша болган жагдайда жещл болады. Ол ушгн DBGrid тузету ершшде Title касйетш орналастырыныз. ФИО (день рождения! телефон - - Бабкина Воронова Кралев Кротов Крылова Новиков Сорокина Ясенева г _ Н» М * Ч - М 1 IH 5.6-сурет - врютердщ атын ауыстыру Озшщ достарыньщ телефондарын жэне туган кундерш толтырыныз (темендеп суретте керсетшген деректерд! енпзген жен болар). [М о й п ц м ш и й д р ц г. *1! (Х ар актер н о р д и ч е с к и й. 1 в т Бабкина Ольга вороново Дарья Краме Петр Кротов Андрей Крылова Анна Новжов Павел Сорокина Мария т ДЕНЬ р о ж д е н и я! т е л е ф о н г1' г-ы -ы -ы j 1У 5.7-сурет - Фото орналастыру DBNavigator: касиет'1 DataSource-DataSet. Б1здщ багдарламамызды FOTO жэне COMMENT epictepih езгертуге, карауга жэне жазуга мумкщшк болу ушш жетшд1решк. Ол ушш paleft панелше DBImage жэне DBMemo компоненттерш кою керек. Олардьщ DataSource касиет1 DataSourcel етш орналастырыныз, ал 140

142 D-у to Field касиеттерше сэйкесшше FOTO жэне COMMENT мэндерш беру керек. Сонымен катар дэл солай Align касиетш орнатыныз. Егер С п суреттерд1 таба алмасаныз,.. J STUDENT!Дайындаулар бумасында таба аласыз. DBlmage компонент) ушш ReadOnly касиетш True etin орналастырыныз. ратор панелше BtnHelp жэне BtnPict батырмаларды орналастырыныз. Формага OpenPictureDialog компонент! н жайгастырыныз. BtnPict батырмасы ушш келеа OnClick окигасынын ецдеуилсш курыныз: procedure TfmMain.BtnPictClick(Sender: TObject): if OpenPictureDialog!.Execute then if DataSource I.State<>dsEdit then DataSource 1.Edit; BImage I. Picture. LoadFromFile(OpenPictureDialog/. File Name); Tablel. Post; Жобаны icke косып, BtnPict батырмасынын жумысын тексерииз. Жогарыда бершген процедурен 9p6ip жолына тусшктеме курастырыныз. Ол уппн TDataSource, DBlmage жэне Ttable компоненттершш туышктеме жуйесшде сипатталуын окыныз. Б1здш багдарламада кемшшктер эл\ де бар. Онын 6ipeyi егер ci3 Метц досым багдарламасын баска компьютерге тасымалдагыныз келсе, онда багдарлама деректер корымен (ДК бумасымен 6ipre Kemipce де) байланыса алмайды. Екшшщен, жана компьютерде BDE орналаскан болуы керек. Кажет жагдайда BDE багдарламамен 6ipre автоматгы турде орналастыру - ол баска энпме. Щрак BDE орналастырдык деп болжайык (мысалы, Delphi бар дисктен) немесе ол компьютерде орналаскан болатын. Багдарлама 6api6ip жумыс!стемейд1. Неге екеш TyciHiKTi. Сонымен катар BDE Administrator багдарламасын орналастыру керек жэне ездичмен жасырын атты дурыс орнату кажет. Эрине, бул бэр{ ынгайсыз. Сонымен катар 613 орналаскан алиасты 6ipey Жок>1 мумкш. Бйдан багдарламанын сешмдшп, егер жасырын ат жумыс барысында курастырган болса артгады. Келеа экспериментт1 жасайык: BDE Administrator багдарламасын косып, 6i3 курастырган алиасты жойындар. Багдарламаны косып, ДК-на байланысты кателер туралы хаттаманы карандар. Бтздкн багдарламаны архивациялау уш1н деректер коры бумасын багдарлама бар бумага тасымалдандар. 141

143 Темендеп окига ецдйуацш OnCreate 61ЗДВД косымшанын бас формасы ретшде курастырындар: procedure TfmMain.FormCreate(Sender: TObject); var pathbase: string; // К,осымша директориясына локальд! жасырын атца //Жасырын am автоматты турде жойылады, цосьшша вз // жумысын аяцтаган соц. pathbase: =ExtractFilePath(ParamStr(0))+'ИВАНОВ_БД\'; //ShowMessage(pathbase); with Session do ConfigMode: cmsession; try AddStandardAlias('IVANOVBD',pathbase,'PARADOX'); finally ConfigMode:- cmall; Tablel. Active:=True; Эрине, егер Ыз жасырын атты жэне ДК бар бумасын баскаша атасаныздар, Ыздерге бершген мэтшде кейбхр жерлерде мэтшге езгертулер енпзу керек. Багдарламаны косып, ол жумыс гстёйтшще кез жетюзвдз. Кестедеп 1здёшс ушш SetKey-ды колдану. Design Time-мен ьщгайлы жумыс ictey упйн, алдында BDE Administrator-da жойылган жасырын атты кайтадан калпына келт1ру керек (бул б!зщщ багдарламанын жумысына ыкпал етпейщ). Мысалга, б1здщ ДК жазбалардьщ саны 6ipa3 уакыт еткеннен кейш улкен болады - сонда т1з1мд1 етизу аркылы кажетт! адамды 1здеу киынга согады. pabot панелще eki компонента - TBitBtn типп батырманы жэне TEdit орналастырайык. Батырмага BtnFind атын бёрщз. Оларды суретте керсетшгендей етш орналастырыныз. BtnFind батырмасын басу аркылы келеа окига ендеушт! курастырьщыз: procedure TfmMain.BtnFindClick(Sender: TObject); var sf; string; sf: Trim(Editl. Text); if sf " then ShowMessagef'Введите текст для поиска!') else 142

144 1 Tablel. SetKey; Table 1.FieldByName('FIO).AsString: sf; if Not(Tablel. GotoKey) then ShowMessage('3anucb не найдена!') else ShowMessage('3anucb найдена!'); Багдарламаны icxe косып, 1здеу батырмасынын жумысын тексерж^з. Эрине, б1збен курастырылган!здеу алгоритмнщ 6ip кемшшп бар - ол егер 1здеу жолынын кура мы ДК акпаратымен сэйкес келсе гана сэтп аякталады. Сонымен коса, агымдагы жазба 1зденетшнен ары карай турса, онда 1зден>с сэтп аякталады. Кестедеп агымдагы жазбалар Edit! imihfleri символдарды баскан сайын сэйкес келетш мэн 6ipiHiui орынга орын ауыстыратындай етш жасауга болады. Бул компонент ymih OnChange-Tin келеа окига ендеушж курастырайык: procedure TfmMain.Edit 1 Change (Sender: TObject); var sf:string; sf:=trim(editl. Text); Tablel.SetKey; Tablel. FieldByName('FIO').AsString := sf; Tablel. GoToNearest; BipaK, i3flehictih осындай алгоритм! де кептеген акпараттармен жумыс кезшде ынгайсыз болуы мумкш орындарын ауыстыруы тез журмейд1, 3cipece суреттердщ ауыстыруына байланысты. Сондыктан б зге Edit! ymih OnChange окига ендеу1шш тазалау дурыс болады, ал OnClick окига ендеуimiн келесшей езгерту керек: procedure TfmMain.BtnFindClick(Sender: TObject): var sf: string: SavePlace: TBookmark; With Tablel do sf:=trim(editl. Text); if sf-" then ShowMessagef гздеуге мзтт енг/з/н/з!') else //DataSourcel.Enabled:=False; SavePlace:-GetBookmark; First;First;SetKey; FieldByName('FIO).AsString := sf; ifnot(gotokey) then 143

145 if MessageDlg(}fCa36a табылмады. Осыган аяфавштт ретте жацынына эту керек'\нг?1 mtconfirmation, [mbyes. mbnoj, 0)=mrYes then GoToNearest else GotoBookmark(SavePlace); //DataSourcel. Enabled:= True; FreeBookmark(SavePlace); Енд! «1здеу» («Поиск») батырмасын баскан сон кестедеп деректер багытшасы табылган жазбага немесе колданушынын жауабына байланысты - алфавигпк тэртште «жакындагына» тасымалданатын болады. Егер кек туей жолдарды сипаттаутасак, онда 1здеу кезшде акпараттар формада кайтадан керщбейщ - ол кеп акпаратты енпзуде пайдалы. EipaK жазуларды йдфу алгоритмде тагы 6ip катеш байкау киынга сокпайды. Егер бас жэне юшкентай эрштердщ ецпзу катарын сактамаса, онда 1здеу еэтп аякталмайды, ал багытша кестедеп акыргы жазбага орын ауыстырады да, бул колданушы уцпн ыцгайсыз болады. Муны 6i3 жумыстыц Keneci кадамында озгертем1з. TQuery компонент1мен ж^мыс. Heri3i деректер корымен жумыс 1стейтш багдарламаларда, ДК кестелершен акпарат т1келей шыгарылмай, 6ip эдюпен ецдедшедк Мысалы, эртурш кестелерден кажетт! акпаратты тацдауы жэне ipiicreyi журпзшу! мумкш. Ka3ipri ДК акпаратты тавдау жэне баска операция тацдау ушш курылымданган сураныс тш - Structural Query Language колданылады, кыскаша SQL. SQL тшшдеп ДК кажетп сураныстарын авгоматты турде жинактауга мумкшдж беретш Delphi-де кажегп компоненттер! бар. Енд» TQuery компоненимен жумыс icteflik, ол Ttable-го карганда, SQL-Ын жумыс icteyi ymih акпарат жиынын еркш турде тацдауга мумющцк бередь Кебшесе TQuery объекпмен жумыс ictey эдютемеа Ttable-мен жумыс ictey эд1стемес!мен уксас, б>рак оз ерекшел1ктер! бар. TQuery компонентш кестедеп кажетп жазбаларды 1здеу ушш колданайык. Алдымен pabot панелщен Editl компонентш жоямыз, оныц орнына TcomboBox компонентш ецпзем1з де, cbfind атын коямыз. Одан кешн багдарламанын барлык мэтшшде Editl мэтшш cbfind' ауыстыру керек. Кодты тузушще былай ictey ыцгайлы: CTRL+Q басып, одан сон А" пёрнёсш басу. Экранда мэпцщ

146 ауыстыру терезеа пайда болады, онда кажетп параметрлер/ii енпзу керек. Кейш жобаны косып, бэр} бурынгыдай жумыс ютейтшше кез жеткшщз. BipaK cbfind компонентднде шыгатын тоздш бар - б1здщ максатымыз оган ДК жендерд'1 енпзу болып табылады. DataAccess беттершен DataSource компонентов тагы 6ip форманы енгыщз. Онын Name касиетше DataQueiy мэшн берпда. Кешн дэл сол бетте TQuery компонентш табыныз жэне оны формага орналастырыныз - ол Queryl атын алады. DatabaseName касиеп уинн Queryl компонентен шыккан т1з1мнен ДК юретш езгщздщ жасырын атты танданыз. Ka3ip 6i3 ушщ ен маныздысы - Queryl компонент ушш SQL касиетш дурыс толтыру болып табылады. ДК-нан акпаратты тандау ymih бул касиетте SQL тшшдеп кажетп сейлем болуы тшс. Алдымен оны колмен толтырайык (5.8-сурет) бул касйетп толтыру ерюшде тертбурышты батырманы басыцдар, жэне ашылган тузету терезесшде келеа мэтшда SELECT FIO FROM STUDENTS ORDER BY FIO Tepin, OK пернесш басьщдар. - i n i x i CrMrta j selection Grouping Group Criteria J Sorting Joins criteria «re met I jflold or Value 5.8-сурет - SQL терезеа Бул мэйщ! SQL тшнен аудармасы былай болады: STUDENTS кесгеганщ FIO epiciheh барлык мэн дер д1, ал ф а в и тп к тэртште тандау. Queryl компоненттег1 Active касиетш True деп бел плен дер. Егер ci3 б1рденен! дурыс емес жасасандар, онда кате туралы хаттама келедь BipaK ДК тандау дурыс еткенщ калай б1луге болады? Ол ушш Queryl компонентше тышканнын он жак батырмасын басындар ж эне шыккан 145

147 мэз!рде "SQL Builder пунктш таддандар. Экранда келеа турде терезе пайда болады: Бул SQL тшшдеп сураныстарды графикалык курастыру терез1 болып табылады. Онын кемепмен кажетп сураныстарды тез орындап. оларды тексеруге болады. Execute SQL (онда найзагай суреттелген) батырмасын басып. Query Results терезеонде 6i3re кажетп акпарат пайда болганына кез жетюзвдз. Query Results терезесш жэне сураныстарды курастырушыны жауып олармен соцыра эл1 жумыс 1стейтш боламыз. Темендеп процедураны жазып, онын атауын модульдщ интерфейс бел1пне кояйык: procedure TfmXlain.FullcbFind; cbfind. Items. Clear; With Query 1 do Open; First; First; while not(eof) do cbfind. Items. A dd(fieldbyname(fio ). AsString); Next; Бул эдгстеме 6i3re кажетп деректерд1 cbfind пункттердщ т1з1м1н толтырады. Б!рак онын шакыруын кайда орналастыру? вйткеш багдарламанын жумыс ictey барысында аты-жендер1 TiaiMi esrepyi мумкш. Мэпнд1 баскан кезде немесе cbfind компонент ш!ндеп тацдауларды журпзген кезде Т131мд1 жанаркан жен болар. Ол ушш бас кару элемент! фокус енпзуш алган кезде, OnEnter окигасы бар болады. Теменде керсеплген cbfind компонент уцин бул ендеу окигасын курас гырайык: procedure TfmMain.cbFindEnter(Sender: TObject); FullcbFind; Багдарламаны косып, шыккан т1з1мде cbfind ушш 6i3re кажетт) тшм пайда болатынына кез жепйз1н13. BipaK б1здщ 1здеу ypaicih ары карай жетшмру ушш б!здщ багдарламанын мэтшше б1рнеше езгерту л ер енпзей!к. Алдымен, FullcbFind эдютемесш теменде керсетшгендей езгертейш: procedure TfmMain. FullcbFind; 146

148 cbfind.items. Clear; With Queryl do Active: =False;SQL. Clear; SQL. A ddf'selec T FIO FROM STUDENTS ORDER BY FIO); Active :=True; First;First; while not(eof) do cbfind.items. Add(FieldByName('FIO).AsString); Next; Енд1 кажетп.^/.-суранысы багдарламанын жумыс ictey кезшде динамикалык турде калыптасады, ал ол Queryl болашакта баска максаттар ушш колдануга жол ашады. Тексеру ушш DesignTinte-н'щ Active касйетш бул компонент ушш False мэшнде орнатып, жобаны icke косыцыз. Ti3iM бэр! 6ip дурыс курылымдау THic. Теменде керсетшген процедураны курастырып, онын атауын модульдщ интерфейс белшше саламыз: procedure TfmMa\n.FindByF10(sf.string); var SavePlace: TBookmark; With Tablel do if sf=" then ShowMessage('Beedume текст для поиска!) else //DataSourcel. Enabled: =False; SavePlace; GetBookmark; First; First ;SetKey; FieldByName('FIO').AsString := sf; if Not(GotoKey) then if MessageDlg('3anucb не найдена. Перейти на ближайшую в алфавитном порядке?', mtconfirmation. [mbyes, mbno], 0)=mrYes then GoToNearest else GotoBookmark(SavePlace); //DataSourcel. Enabled:=True; FreeBookmark(SavePlace); 147

149 OnClick евдеу окигасын «1здешс (Поиск)» батырмасы ушш былай езгертем1з: procedure TfmMain.BtnFindClick(Sender: TObject); FindByFIO(Trim(cbFind.Text)); Жобаны косып, жазбаларды 1здеу ыцгайлы болганына кез жетюзыз. BipaK «1здешс (Поиск)» батырмасы бойынша артык шертпе жасаудын кажет! бар ма? cbfind компонент ушш OnClick окига евдеу1шт1 теменде керсетшгендей курастырындар: procedure TfmMain.cbFindClick(Sender: TObject); FindByF10(Trim(cbFind.Text)); Есептеулер орындайтын жолдармен жумыс. Б1здщ багдарламаны достарымыздын туган кундер! туралы еске салуды уйретешк - мысалы, мына айда. Алдымен, темендеп суретге керсетшгендей осы айдын б1рнеше туган кундерш бхздщ ДК, толтырындар: - I P I XI М о й л у ч ш и й д р у г. Х а р а к т е р н о р д и ч е с к и й. И«Рг Т Т онск:1 I АкбаевИван Бабкина Ольга Воронова Дарья Крал ев Петр Кротов Андрей Крылова Анна Новиков Павел Сорокина Мария Ясенева Инна LiU Ж I ден ь рож дения!:) : rJ а 5.9-сурет - Форманын жалпы Typi Формага TDataSource тагы 6ip компонентш енпзш, онын Name KacneTiHe DataQB мэн in койындар. Кейш формага TQuery компонентш енпзш, оган QB мэш бар Name касиетш бершдер. DataSource касиетше QB компонентшщ DataQB мэнш 6epin, ал DatabaseName касиетше - 6i3 курастырган жасырын атты беру керек. 148

150 QB компонент! бойынша тышканнын он батырмасын басып, SQL Builder мэз1р пунктш тандандар. Шыккан сураныстарда жасау терезеде параметрлерд! теменде керсетшгендей етш койындар: В SQL BuiMei Re Edt Quety Help Dc»В JsTUDeNTSdb Tj database & Student» * I T NKOO (*) I S^BIRTHDATE(D) Г TEL(A20) Г FOTO(О) _ 5.10-сурет - SQL Builder мэз1р пунктш тандау Execute SQL пернесш шертш, суранысты жасау нэтижесше карацдар - ол баздац ДК аты-жендер1 мен туган кундер1 рймгн шыгару керек. Одан кейш кураушыныц терезесш жауып, True iminaeri QB компонент) Active касиетпн белплендер. К РастыРУШЬ сураныстьщ мэтшш QB компонентшщ SQL касиетшде куралганын тексер1вдер. BipaK 6i3re, кундер емес, туган кундер1 мен айлары кажет. Ол ушш QB компонент! нде есептелетш (calculated) epictepfli курастырамыз. QB компонент; бойынша ек1 рет шертшдер жэне шыккан epicti тузету терезесшде тышканнын он батырмасын шертш, Add all fields" nyhkti н тандандар. Одан кешн QB компонентшщ epicti тузету терезесшде тышканнын он батырмасын шертш, New Field пунктш тандандар. Экранда темендеп терезе пайда болады:

151 Field properties " Name: Day Component jqbdey Type. pb I JlJ Si» гкяа typo С Data ( Calculated С lookup 1 I**4* Key Fields; 1 j j j Dataset: I Lookup Keys., j "^1 Hesuft Field: ~ d ОК Cancel Help 5.11-сурет - Opicri тузету терезес! Бул терезенщ Day" мэнщ Name" epicihe ецпз1щз, ал Type" epici ушш "'Word" мэнщ орнату керек. Сонымен катар суретте керсетшгендей Calculated жалаушысын белгшендер. Одан сон Ок басыцдар. Тагы да Month жэне Age" атты ек! есептелетш epicti курастырындар. QB KOMnoHeHTiHiH тузету epicihih терезеа суретте керсетшгендей TypiH калыптастыру керек. ЩЩОЗНЙйй,. I BIRTHDATE FIO Day Month 5.12-сурет - Month" жэне Age" epictiepi Енд1 epicti тузётушш жабындар. Объект ннспекторында QB компонент! ушш Events" косымша паракка etin кету керек. OnCalcFields" окига enaeyiuii ущн epicre eki рет шертщ1з. Шыккан дайындамада окига ецдеуип ушш темендеи кодты ецпзщдер: procedure TfmMain. QBCalcFieldsfDataSet: TDataSet); var Year, YearB, Month,MonthB, Day.DayB: Word; //Агьмдагы куннщ шифрт ашу: 150

152 DecodeDate(Date, Year, Month, Day); //ДК, к\инщ шифрш auiy: DecodeDate(QBBlRTHDATE. Value, YearB,MonthB,DayB); //Есептеупер жургылетш epicmep уип н мэндi беру: QBDay. Value: =DayB; QBMonth. Value:=MonthB; QBAge. Value :-.Year-YearB; end: Жогаргы панельге тагы 2 компонента TstaticText орнатындар, оны суретте жэне ТСотЪоВох керсетшгендей дайындап, онын Name касиетше cbdate мэнш беру кажет. Сонымен коса, cbdate компонент! ушш объектер инспекторында Anchors касиет! н ашындар, ол ушш осы касиеттщ касында + белпсш басып, True мэнш деп akright параметрш орнату кажет, ал калган параметрлерд! o3repicci3 калдыру керек. Одан кейш жобаны ж!бершдер, форма елшемшщ езгеру кез!нде, cbdate компонент! жогаргы панельде калган бос орынды алатынына кез жетюзвдер. М о й ЛУЧШ ИЙ д о и г Характер нордический. О П оиск: [ - II Ч>ИО (д е н ь р о ж д е н и я ^ Акбаев Иван Бабкина Ольга Воронова Дарья Кралев Петр 3Q Кротов Андреи Крылова Анна Новиков Павел Сорокина Мария Ясенева Инна сурет -cbf ind компонентшщ орналасуы Сонымен 6ipre, cbfind компонент! астынгы панельде дэл солай болганнын жасандар. Енд1 cbdate компонент уш!н жолдар ты м н курастырумен айналысайык. Алдымен бул компонент ушш OnEnter окига ендеуншн курастырайык: procedure TfmMain.cbDateEnter (Sender: TObject): 151

153 4 var s.string; с b Date. Items. Clear; With QB do Active: =False;SQL. Clear; SQL.Add('SELECT BIRTHDATE, FIO FROM "STUDENTS.db" Students'); Active:=True; First;First; while not(eof) do s:=fieldbyname('day).asstring; s:=s+'/'+fieldbyname('month ).AsString; s: =j+ V'+FieldByName('Age ).AsString; s: =$+ '/'+FieldByName('FIO').AsString; cbdate.items.add(s); Next; Куттыктаулардыц тымш куру. Жобаны ж1берш, орындалуына кез жетюзгадер, cbdate компонент ушщ калыптастырган жолдар т1з!мдерщ капай акпараттандыргандыгын тексеру керек. Ецщ б1зд1н максатымыз - агымдагы айга туган кундер туралы акпаратты гана енпзу керек, 6ipaK fm sii кундер! бойынша реттелу! тшс. csdropdownlist мэнш деп cbdate Компонентшщ Style касиетш орнату керек, содан кешн бул компонент ymih OnEnter окига ецдеушнн езгертандер: procedure TfmMain.cbDateEnter(Sender: TObject); var s:string;newdate: TDateTime; Year,Month,Day, Age: Word; cbdate. Items. Clear; DecodeDate(Date, Year, Month, Day); With QB do Active: =False;SQL. Clear; SQL.Add('SELECTBIRTHDATE, FIO FROM "STUDENTS.db" Students'); Active:=True; First;First; while not(eof) do 152

154 Age: =FieldByName('Age). Value; if (Month= 12)and(FieldByName(Month'). Value-1) then New Date: =EncodeDate(Year+1, FieldByNamefMonth'). Value, Field ByName('Day). Value); Inc(Age); end else NewDate: =EncodeDate(Year, FieldBvName('Month'). Value, FieldByNamef' Day'). Value); if (NewDate>=Date) and (NewDate<=(Date+30)) then s: =DateToStr(NewDate)+' '+FieldByName( FIO').AsString+' C+IntToStr(Age) i ')'; cbdate. Items.Add(s); Next; Жобаны M<i6epin, туган кун Ti3iMi алдынгы айлар ушш дурыс калыптастырганын тексершдер. EipaK, оны кундер бойынша реттеу кажет. Бул ушш келес! алгоритмд1колдануга болады: procedure AddByDatefs.string;List: TStrings); var i: integer; function Less (si, si: string): boolean; var Datel,Date2: TDateTime;s2: string; s l: Copy(sl,l, 10);s2:=Copy(sl, 1,10); Datel: =StrToDatefs l);date2: =StrToDate(s2); Less: =(Datel<Date2); iflist.count>0 then for i:=0 to List. Count-1 do if Less(s,List[iJ) then break; List. Insertfi, s); end else List.Addfs); Жана жолды raimre кояр алдында, онын Т1згмдёп болашак позиниясын аныктайык, ол ушш жолдарды б1ршйп 10 символдар бойынша салыстырамыз. Коюды Insert эд1с1 кемепмен жузеге асырамыз, ал егер жол танмнщ сонына койылатын болса - Add эдм кемепмен жасаймыз. 153

155 Багдарлам аны н KipirripMe пара* ын куру. Алдымен fmabout формасын курастырайык, онын модулш unabout деп атайык. Бул форманы ашу ушш окига ондеушш, BtnHelp батырмасына темендеп процедураны жазу керек: procedure TfmMain.BtnHelpClick(Sender: TObject); fma bout. Show Modal; Ендо fmabout формасы багдарламаны коскан кезде, fmmain формасынын шыгу алдында экранда пайда болуын жасайык. Ол ушш Delphi мэз!р1нде Project, View Source шакыру керек. Б1зге жобаныц (файлы Менщ досым. dpr) мэтип шыгады, оны 6i3 теменде керсетшгендей езгертем^з (косылган жол жуан шрифтпен белгшенген): program Менщ досым; uses Forms, unmain in 'unmain.pas' {fmmain}, unabout in 'unabout.pas {fmabout}; {$R *RES} Application.Initialize; Application. CreateForm(TfmMain, fmmain); Application. CreateForm(TfmAbout, fmabout); fma bout. Show Modal; Application. Run; end. Жобаны ж1берш, fmabout формасы багдарламанын жумысы басталганнан сон шыгатыньща кез жетк1з1ндер. Б1здщ жобаньщ мэтшщ талдайык. Багдарламанын icke асуын Delphi TApplication объект! жауап бередк Алдымен, осы объектен Initialize sflici шакырылады. Содан кейш жоба формалары курастырылады. Кейш fmabout формасын экранга шакыру жолын енпзд!к. Будан сон косымша ез жумысын бастайды (Run эд!с1). Эдетте, деректер корымен жумыс ктейтш жобалар, курамында кеп формалар бар болады, олардьщ куруына кеп уакыт кетедо. Ол ушш колданушы б!здщ багдарлама жумыс ктейтше сешмд1 болу улпн, беттщ басы-формасы куруга болады, ол баска формаларды курганга дешн экранга шыгады. Менщ досым жобасын уакытша жауып, MastAppApr оку жобасын жуктендер.ол.../ Program Files/ Borland/ Delpi.../ Demos/Db 154

156 /MastApp бумасынын щ шде бар. Оны Ж1ктеген сон 6eirin басыформасын кере аласындар. MastApp.dpr алгашкы мэпнщ карап, оны талдавдар. Бершген жобада формалар кеп, 6ipaK оларды кзд?у алдында SplashForm атты формасы экранга шыгады. Баска формаларды курганнан кейш, SplashForm Hide aflici кемепмен жасырылады, кешн Free эд!с кемепмен жойылады. Осыдан кешн косымша ж^мысын бастайды. Оган коса, Delphi мэз'фшде Project, Options пунктш тандап, Forms косымшасына кешшдер. Суретте керсетшгендей терезеш кереандер. Осы терезеде 2 терезе кураушы бар- Auto-create forms" жэне Available forms. Сол жак терезе кураушыда орналаскан формалар ymih, Create эд!с5 кемепмен оларды куруда Delphi жоба мэпн1не жолдарды косады. Он жак терезе кураушыда орналаскан формаларды куруды б!з в31м13 акпаратгандыруымыз керек. D(rectories/Ccrxftiooate j Version info Packages Forms Appficalion Compiler J Linker *1 Main fomt MainFonn Auto-creata forms: MastOata MainForm BiPartsForm QueryCustDIg EdPartsForm BfCustOrdForm EdCuslForm EdOiderFoim SearehOlg BrDateFoim About Вox PickRpI CustomeiByfnvoiceRepoa. Orde**0v a»efleoort Л Г 5erfatJ 5.14-сурет - Терезе курушы Менщ досым" жобасы бар бумага MastApp жобасы бар бумасынан fmsplash.pas жэне fmsplash.dfm файлдарды кеипршдер. MastApp жобасын жабындар(езгер!ст1 сактамандар!). Кайтадан Менщ досым жобасын ашындар. Project, Add to Project кемепмен б1здш жобага Splash модулщ косындар. Содан кейш Project, Options тандап, оны SplashForm он жак терезе кураушыга тасымалдандар. Осыдан сон, теменде керсеплгендей жобанын мэтшщ езгертщдер: program Менщ досым; uses 155

157 Forms, unmain in 'unmain.pas' {fmmain}, unabout in unabout.pas' {fmabout}, Splash in 'splash.pas' {SplashForm}; {$R *.RES} Application.Initialize; SplashForm TSplashForm.CreatefApplication); SplashForm. Show; SplashForm. Update; Application. CreateForm(TfmMain, fmmain); Application. CreateForm(TfmAbout, fmabout); SplashForm. Hide; SplashForm. Free; Application.Run; end. Жлбергеннен кешн форма бетшщ басымен экранга шыгады, 6ipaK б1здщ жоба юшкентай болганмен, бул ете тез eryi мумкш. View, Forms кемепмен экранга SplashForm формасын шыгарып, онын езгертумен айналысындар. Форма экраннан тез кетпес ушш, OnHide окиганыц еццеухшсш уакытша куры нд ар: procedure TSplashForm.FormHide(Sender: TObject); ShowMessagefPress any key...'); Форманын сырт келбетш калау бойынша езгертшдер, кешн бул форманын OnHide окигасында хаттамалар келгенде оны баяндандар. RxLib кггапхананы косу. Егер сендердщ компьютерлершде RxLib ютапханасы орнатылган болса, онда бул кадамды etki3in, келеыге кешшдер. Delphi жэне ВС++ Builder компоненттер ютапханасы RxLib аталатын Мэскеулщ багдарламалаушылар тобымен курылымдалады, Ka3ipri кезде олар АКД1-та жумыс ютейд1 жэне тепн таралады. RxLib Delphi 7 пакетше юредц ал егер Ci3 Delphi-дщ Kimi нускаларында жумыс icteceni3, онда онын орнатылуымен айналысу керек. Delph-ге арналган орнату урдюш сипаттайык: 1) ютапхана диетрибутивщщ орналасуын (.../STUDENTS/ ByDelphi/RxAlls бумасы болуы мумкш) тексерш корпйз; 2) бул бумадан RxLib нускасына арналган дистрибутива табьщыз; 3) Rxlnst.exe косымшасын icke косыцыз; 156

158 4) орнатылу урдфцщё «ездтнен» жауап бервдз, бейнел1к мысалдар мен мэтшдерш мшдетп турде косыцыз, орнатылудын аягында нусцаульщты мщият оцып шыгыцыз\ 5) орнатылганнан кейш СМзге тагы б1ркатар эрекеттерд1 орындау керек: "File/Open... мэз1р белiпн танданыз жэне RXCTL5.DPK пакет'ш (package) ашыныз; 7) пайда болган "Package -..." терезесшен "Compile" батырмасын басыныз. 8) RXCTL5 пакетшщ компиляциясынан кейш дэл осы эдкпен калган run-time RXDB5.DPK жэне RXBDE5.DPK пакеттерш компиляциялау керек; 9) компиляцияланган В/^-файлдарды PATH ортасына KipeTiH каталогка орналастырыныз (мысалы, WINDOWS/SYSTEM). 10) run-time пакеттершщ компиляциясынан кешн "File/Open..." M33ipi кемепмен DCLRX5JDPK файлын ашыныз. Пайда болган "Package -..." терезесшде "Compile" батырмасын басыныз жэне компиляциядан кешн "Install" батырмасын шертыз; 11) DCLRX5JDPK пакетш орнатып болган сон (IDE-де 6ipiHiui болып орнатылуы керек болды) дэл сондай эрекеттерд1 DCLRXDB5.DPK жэне DCLRXBD5JDPK пакеттер1мен орынданыз; 12) егер С1зде RX гатапханасыньщ алдьщгы нускасы орнатылган болса, есю компиляцияланган packages -файлдарын RXCTL5.BPL, RXDB5JBPL, RXBDE5JDPK, DCLRX5.BPL, DCLRXDB5.BPL, DCLRXBD5JDPK жойып тастацыз; 13) дурыс орнатылудан кейш Delphi палитрасында RxLib компоненттер! пайда болуы тшс; компьютерщьге RxLib ютапханасы бойынша аныктамалык жуйеш кеилрвдз жэне оны icke косуга арналган жарлыкты курыныз (RxLib туралы аныктаманы...students!bydelphilrxalls -та табуга болады). RxLib мтапханасынан к у н т о б е. DBGridl компонентшен экранда ернггерд! тузетуцпс1 пайда болатындай etin, eki рет шертвдз. BIRTDATE epici уинн ButtonStyle касиетшcbsellipsis etin орнатыныз. GpicTep тузетуцпсш жабьщыз. DBGridl компонентш шертодз жэне осы компонентгш OnEditButtonClick окигасы ушш эз1рше келеа ehfleyiurri орнатыныз: procedure TfmMain.DBGridlEditButtonClickfSender: TObject); var nmf s. string; nmf: DBGridl. SelectedField. FieldName. if nmf- 'B1RTHDA ТЕ' then 157

159 s: =DateToStr (Table LFieldByName(nmf). Value); ShowMessage(nmf+ +s); Жобаны орындалу уш1н icke косьщыз. «TYFAH KYH» epici 1ш1ндеп кез-келген жолын шертщз. Opic 1шшде тертбурыш батырма пайда болуы керек. Тертбурыш батырманы шерпщз. Осыдан кейш Ci3 б1збен багдарланган хабарламаны алуьщыз керек. Сонымен, OnEdilButtonClick окига ендеушшде 6i3 тертбурыш батырмада жэне оньщ мэшнде батырманы басканнан кейш экранда кутчзбе пайда болады, онда кажетп мерз1мд1 тандауга болатын epic атына дешн жегпк. Ен алдымен, unmain модулшщ басында uses сейлемднге PickDate модулый хабарландыруын косьщыз. Бул модуль RxLib ютапханасына Kipefli жэне оньщ курамында б1зге кажетп кунпзбе бар. Осыдан кешн OnEditButtonClick окигалар ендеушш теменде келпршген турде езгерпщз: procedure TfmMain.DBGridlEditButtonClick(Sender: TObject); var D: TDateTime; if DBGridl.SelectedField.FieldName='BlRTHDATE' then if Table l.fieldbyname('blrthda ТЕ). Value<>null then D:~Table 1.FieldByName('BlRTHDATE). Value else D:=Date; if PopUpDate(D,DbGridl.Controls[0] as TWinControl) then if DataSourcel.State<>dsEdit then DataSourcel. Edit; Table l.fieldbyname('birthdate). Value: =D; Жобаны icxe косып, кунтозбемен жумыс жасап керщз. TRxTraylcon компонент!. Косымшанын жалгыз экземпляршщ icke косылуы. fmmain басты формасына RxTools бет1ндеп TRxTraylcon компонент орналастырыныз. Осы компоненттщ Icon касиетше келетш белпшеш табьщыз. Жобаны icke косьщыз, Ci3 Windows жуйелж сагатыньщ жанында - экранным теменп сол жагында белпше бейнесш Kepeci3. Аныктама бойынша RxLib К1тапханасы ym ih TrxTraylcon компонент касиетш окып шыгьщыз. Белпше бейнесш аннмадияланган етш жасацыз.

160 Delphi-асн шыгыныз, жолсер1кте Менщ досым жобасыныц жумыс бумасын тауып альщыз. Косымшыньщ ехе-файлын 6ip рет icke косыныз, содан сон eirimiii рет icxe косыныз. Жуйелж сагаттын жанында Ci3 бйдщ жобамыздын белпшенщ ек1 мэрте бейнесш кереаз. Бул 6ip компьютерде 6ip уакытта б1зд'щ багдарламамыздын eki KemipMeci жумыс жасап отырганын бишредь Эдетте, ДК-мен жумыс жасайтын шынайы жобаларда бундайга жол бершмейдь Б здщ косымшамызды icke косканнан кеищ eicihiui KemipMeni icxe косу мумкш емес етуш калай жасауга болады? Жумыс icten турган ек1 косымшаны да жауып тастаныз, Delphi-re кайтыныз жэне б1здщ жобамызды жуктешз. Содан кешн Delphi мэзфшде Project, View Source танданыз. Ci3 жобанын бастапкы мэтшш кереаз. Шан теменде керсетшген (калын KapinneH кёрсётщгея) езгертулерд1 енпзодз: program Метц досым; uses Forms, VclUtils, unmain in 'unmain.pas' {fmmain}, unabout in 'unabout.pas' {fmabout}, Splash in 'splash.pas' {SplashForm}; {SR *.RES} Application. Initialize; if A ctivateprevlnstance(tfmmain. ClassName, ") then Exit; SplashForm: TSplashForm.Create(Application); SplashForm.Show; SplashForm. Update; Application. CreateFormfTfmMain, fmmain); Application. CreateForm(TfmA bout, fma bout); SplashForm. Hide: SplashForm. Free; Application.Run; end. Енд1 2-iui кеипрмеш icke косу кезжде алдынгы кеинрме белсешйршетшш тексерпйз. 159

161 Сонгы эрекеттер. Ёндо 013Д1Н косымшамыздын басты форманын сырткы тур1мен айналысайык. Bi3 б1здщ формамызды косымшы жумыс ictereh кезде езшщ елшемдерш взгерте алатындай етш жобаладык. Б1рак, форма елшемш тым кшпрейтуге болатыны анык - кейб1р компоненттер кершбей калуы мумкш. Обьектшер ннспекторында fmmain формасы ушш Constraints касиетш тауып аланыз. Осы касиеттщ касиет кураушысы Tiзiмiн ашу ушш, жанындагы + (плюс) б елп а бар белпше бойынша шертвдз. MinHeight жэне Min Width ушш кажетп мэндерш орнатыныз. Сгздщ ДК-дагы бейнесуреттер б1рдей елшемд1 болса, онда олар экранда табиги кершетшдей, ягни DBImagel жэне paleft компоненттершщ касиетш дурыс орнатылгандай etin жасаныз. RunTime-де пайдаланушы DBGridl компонентшщ багандар еш мен реттш тн езгерту мумкадичне не. ДК-мен жумыс жасайтын шынайы багдарламадарда экранга шыгатын кестелердщ багандар саны кеп болу мумкш жэне жумыс кезшде пайдалнушынын оган кажетп баганды «онай» жогалтып алуына болады. Б здщ багдарламада кез-келген баганнын такырыпшасына шерткен кезде барлык баганалардын еш калпына келетшдей etin жасайык- Ен алдымен, ерктерд1 тузету1ште DBGridl Yшiн баганалардын «калыпты» ehih орнатайык. Егер Ci3 осы жумыска келт!ршген суреттердеп деректерд! ehri3cehi3, онда барлык баганалар ушш 120 мэнш тандауга болады. Содан сон обьектшер ннспекторында DBGridl компонент Yшiн OnTitleClick окигасын тауып алыцыз жэне оган келей евдеуш т 1 курыныз: procedure TfmMain.DBGridlTitleClick(Column: TColumn); var i: integer; With DBGridl do fo r i:=0 to Columns.Count-1 do Columns[iJ. Width:=120; Багандардын perriniri калпына келт'фшетшдей etin жасауга болады. Ол ушш ен карапайымы DBGridl компонент! ушш калкып шыгатын мэз1рд1 орнату. Осы мэз!рге 2 пунктп енгазпуз: Багандардыц ешн цалпына келгтру Багандардыц pemminizin жэне енш цалпына кел/nipy BipiHuii пункт ушш окигалар ендеу!шш вздерш курастырыныз, ал ekihiuici Yшiн ол теменде кврсетшгендей болуы мумкш: procedure TfmMain.N2Click(Sender: TObject); 160

162 var i: integer; With DBGridl do for i:~0 to Columns Count-1, do case i of 0: Columns f ij. FieldName:= 'FIO'; Columns [i]. Title. Caption:='ФИО'; 1: Columns [ij. FieldName:= 'BIRTHDA ТЕ'; Columns[ij. Title. Caption:= 'ДЕНЬ РОЖДЕНИЯ'; 2: Columns[ij. FieldName:='TEL '; Columns [i]. Title. Caption:='ТЕЛЕФОН'; Columns [i]. Width:-120; Багдарламаны юке косып тексерыз. 161

163 6 DBGRID компонентшщ мумкшд!ктерь Ж умыстын максаты: DBGRID компонентшщ мумюшиктерш колданып кестедеп мэтшд1 эр турл1 туске ерекшелеу, графикалык объект! косып деректер корын эз1рлеу. Деректер корын Э31рлеу raptioi: 1) TDBGrid жолдарыныц тусш езгерту. 2) TDBGrid компонентшщ баганындагы деректерд! алмастыру эдкз. 3) Стандартты TDBGrid компонентой кемепмен кеп жолды такырыптардын суретш салу. 4) TDBGrid компонентшщ баганындагы деректерд1 алмастыру эд с1 TDBGrid жолдарыныц тусж езгерту. Мысалга, 6i3re TDBGrid компонентонде жолдыц мэтшд1к жэне тустж атрибуттадын езгерту кажет, егер кез-келген жолдыц мэш алдын-ала белгшенген шартка сай болса. Бул максат ушш осы компоненттеп OnDrawColumnCell окигасын ецдеуд! колданган жен. йткеш оны колданган кезшдеп мумкшд1ктер1 ете зор. EvenlNo VenueNo Event_Name levenldate EvW- > 1 5 Men's Track and Field :0 _< и meter Men's Speed Skating Meter Individual Medley K Women's Basketball Finals :0 5 7 Women's Cycling 20mi : Men's Gymnastics Finals Women's Hockey Finals :0 8 3 Women's High Dive Finals EventPhoto сурет - TDBGrid компонентой колдану Ttable компоненттен, TdataSource компонент жэне TDBGrid компонентшен куралган TDBGrid карапайым косымшасын карастырайык. Олардыц касиеттершщ мэнщ келтормген кестеге сай белплешк. Непзшде уяшыктардагы cypeni кайта салу ymih OnDrawColumnCell aflici колданылады. 162

164 6.1-кесте - Формадагы компоненттердщ касиеп epi Компонент Касиет1 Мэш Tablel DatabaseName DBDEMOS (нсмесс BCDEMOS) TableName events.db DataSourcel Active true DataSet Tablel Онын Rect параметр! - бос емес уяшыкпен t'iктертбурышты сипатгайтын курылым; Column параметр! - суреттщ суреттеу тэсшн езгертуге кажет ететш DBGrid баганасы. Мэтшд! шыгару ушш TDBGrid компонентшщ Canvas касиет1 бар TextOut aflici колданылады. Егер б!зге кез келген ерктщ мэнше карай жолдык мэтш туе in жэне фонын езгертуге кажет болса (мысалы, VenueNo). DBGridl компонентшщ OnDrawColumnCell окига eitaeyiuiih курайык: procedure TForml.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); if (Table 1.FieldByName('VenueNo'). Value = 1) then with DBGridl. Canvas do Brush.Color := clgreen; Font. Color: cl White; FillRect(Rect); TextOut(Rect.Left + 2, Rect.Top + 2, Column.Field.Text); Нэтижесшде жолдарды белплеу кезшдеп кезещнде VenueNo epicihih мэн1 1-ге тен болып, уяшыктьщ Tyci жасылга боялады, ал мэтш ак TycTi болады (6.2-сурет). Белгшенген жолдарды шыгару кезшде уяшыктардагы барлык деректер сол жак шетамен тузетшген болып шыкты. Егер 6i3 мэтшд! баганада дэлд!рек тузеущ шыгаргымыз келсе, агымдагы (дэл осы сэтте салынатын) багананы Alignment касиеттщ мэжн ескере отырып, б1здш кодты модификаииялау кажет: procedure TForml.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;

165 Foiml ИЗО EyertNolVenueNo levtnlmame leyaitdats lewm.tm» L±J Evw^hoto S 100 Meter Individual Medley 2 Women's Basketball Finals 7 Women's Cycling 20mi Men's Gymnastics Finals omen's Hockey Finals 8 Kayak Level IV Finals 6.2-сурет - Жолдардын жасылга балуы DataCol: Integer; Column: TColumn; State: TGridDrawState); if (Table 1.FieldByName('VenueNo). Value = 1) then with DBGridl.Canvas do Brush.Color: clgreen; Font.Color := clwhite; FillRect(Rect); if Column. Alignment - tarightjustify then 7extOut(Reel.Right TextWidth(Column. Field. Text), Rect. Top+2, Column.Field. Text) else TextOut(Rect.Left + 2, Rect. Top + 2, Column.Field. Text); Бул жагдайда мэтшд! баганага тузеу катарга тузеумен сэйкес келедь Орыннан ауытку шамасы (бул жагдайда ею пиксел), негашен белгш баганада колданылатын карпгон влшем1 мен гарнитурасына байланысты болады да, жеке дара тандалуы кажет. 164

166 И 0 П EvenINo V eruen o Event N one Evenl_Dal8 Evenl_Tm a 1*1 100 Meter Individual Medley 2 Women's Basketball Finals 7 Women's Cycling 20mi 1 Men's Gymnastics Finals 1Women's Hockey Finals 3 Women's High Dive Finals 10 8 Kayak Level IV Finals :00: :00: :00:00 г с ш ш ш в :00 Д^ДНЗПТШТИ :00: сурет - KefiGip ^яшыктарды талдау Егер калыпсыз жагдайда жолдын тугел белшн емес, тек кейб р уяшыктарды шыгаруга керек болса, теменде керсетшген окиганы евдеудщ, белгш баганада шыгарылатын кейб1*р уяшыктарды гана талдау керек: procedure TForml.DBGridDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); if (Table. FieldByName( VanueNo).Value = I) and (CoIumn.FieldName = 'VenueNo) then with DBGridl. Canvas do BrushColor := clgreen; Font. Color := cl White; FillRect(Rect); TextOut(Rect.Right-2- TextWidth(Column.Field. Text), Rect.Top+2, Column.FieldText); Нэтижесшде, тек б«з тандап алынган шартка сай келетш уяшыктар гана белпленген болып шыгады: 165

167 !/Р и д1 EventNo I VenueNo Evenl_Name Invent Date levent Time 1*1 4 2 Women's Basketball Finals :00:00 f 7 Women's Cycling 20mi :00 Л Ш Q Men's Gymnastics Finals Q Women's Hockey Finals :00: Women's High Dive Finals : J 9 H I D Karate Finals : Kayak Level IV Finals :00:00 е в 5 Lacrosse Semi-finals :00: сурет - Шарттын орындалуы: уяшыкгардьщ ерекшелену1 TDBGrid компонентшщ баганындагы деректерд! алмастыру ЭД1С1 Кеп жагдайда DBGrid баганасында кестеге сэйкес болатын шынайы мэндерд1 емес, бар болганга сэйкес баска деректерд1 шыгару керек болады (мысалы, сандык кодынын орнына танбалык жолды). Бул жагдайда да TDBGrid компонентшщ Canvas касиетшщ TextOut ЭД1С1колданылады: procedure TForml.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); if (Col umn. FieldName 'VenueNo') then with DBGridl. Canvas do Brush.Color: - cl White; FillRect(Rect); if (Table.FieldByName('VanueNo'). Value 1) then Font.Color := clred; TextOut (Rect.Right DBGridl.Canvas. TextWidth('our venue'), Rect. Top + 2, 'our venue'); end else TextOut (Rect.Right DBGridl.Canvas.TextWidthf'other venue'), Rect.Top + 2, 'other venue'); End; End; End; End; Нэтижесшде бгз экранда келесщ! керетш боламыз: 166

168 / Foiml B S D [EvenMo leventnolvenuewo Evant_Name 3 other venue 100 Meter Individual Medley I other venue Women's Basketball Finals LlU 5 other venue Women's Cycling 20mi 6 our venue Men's Gymnastics Finals 7 out venue Women's Hockey Finals 8 other venue Women's High Dive Finals 9 our venue Karate Finals 10 other venue Kayak Level IV Finals сурет - Баганындагы деректердш алмасуы Тагы 6ip мысал - орынын басатын жол ретгаде Windings немесе Webdings карштершен белплерш колдану: procedure TForml.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); if (Column. FieldName = 'VenueNo) then with DBGridl.Canvas do Brush. Color := cl White; FillRect(Rect); Font.Name:= 'Wingdings ; Font.Size: =^14; if (Table.FieldByName('VanueNo). Value = I) then Font. Color : clred; TextOut (Rect.Right DBGridl.Canvas.TextWidth('J'), Rect. Top + 2, 'J'); end else TextOut (Rect.Right DBGridl.Canvas. TextWidth(F'), Rect. Top + 2, 'F); End; End; End; End; Онда 61ЗДВД niiuih 6.6-суретше сэйкес болады. 167

169 EvantNo jvenueno jevtnlname I Evenl_Daie IEvgnt Tme * Meter Individual Medley o '* W omen's Basketball Finals 5 ' в " Women's Cycling 20mi 6 Men's Gymnastics Finals 7 Women's Hockey Finals 8 <ar Women's High Dive Finals 9 Karate Finals 10 e Kayak Level IV Finals Ш Ш Ш 16:00: :00:00 A 6.6-сурет - Белплерд! колдану TDBGrid-ке графикалык суретп калай енпзуге болады. OnDrawColumnCell эдющдеп TDBGrid компонентшщ Canvas касиетш колдану, TextOut эдклмен уяшыктагы мэтнад шыгарудан баска уяшыктарда графикалык cyperrepfli енпзуге де болады. Бул жагдайда Canvas касиетшщ Draw эдю! колданылады. Формага TImageList компонентш косып жэне оган б1рнеше суреттерд1 орналастырып, б^здщ мысалымызды турленд!решк: F orm l -> I т а gel is t l I т а g е L is I 6.7-сурет - Белошерд! тандау Б зд1ц косымшамыздьщ кодын турленд1решк:

170 procedure TForm 1 DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Iml: TBitmap; Im l; TBitmap.Create; if (Column. FieldName = 'VenueNo') then with DBGrid].Canvas do Brush. Color ;= cl White; FillRect(Rect); if (Table.FieldByName('VanueNo'). Value = I then ImageListl. GetBitmap(0, Iml) end else ImageListl. GetBitmap(2, Iml); Draw(round((Rect.Left + Rect.Right - Iml. Width) / 2), Rect.Top, Iml); Енд! TDBGrid-те VenueNo катарында графикалык суреттер орналаскан: Ever»No VenUeNo EvenLName I Event Date levent Time l* 4 Women's Basketball Finals :00:00 5 ё Women's Cyding 20mi :00:00 6 V Men's Gymnastics Finals :00:00 7 * Women's Hockey Finals :00:00 8 Women s High Dive Finals :00:00 9 У' Karate Finals :00:00 h 10 9> Kayak Level IV Finals :00:00 11 Lacrosse Semi-finals :00:00 Photo 6.8-сурет - Белплерд? керсету Ерекше TDBGrid. Бул баска б1реудщ компоненттерш колданумен катар, ез ецбекткрш жазуга талпынатын жас багдарламалаушыларга арналган материал болып табылады. Авторлар баска б1реудщ компоненттерш колданудын жагымды жактары бар екенгае кел1сед1, сонымен катар оларды оздер1 де колданады. BipaK, 169

171 егер де жагдайды бакылагыныз келсе - «калай онда 6api жумыс ютейтшщ» бшу керек деген п ш р д 1 м1нс1з колданады. К^арапайым TDBGrid-ri б елгш 6ip тапсырмага бешмдеу аркылы ез колымен мыкты куралга айналдыруга болады. БЬдщ макаламыз дэл осы мэселеге катысты арналган. Сонымен, стандартты компонентен ерекше G rid-rri курастырамыз. К епж олды такы р ы п тар. С тандартты TDBGrid компоненттщ кем епм ен кеп ж олды такы ры п тарды суреттеу. Стандартты TDBGrid компонентш суреттеуге колданган кезшде бершген баганалардын аймагы гана колданылады, ол компонент ез1мен суреттелетш алдын ала TDBGrid белпленген аймагы юрмейдь Буны бше тура, суреттеу окигасы кезшде терезенщ барлык аймагы Колжет1мд1 болады, сонымен катар суреттеу урд1с!не тасымалдайтынга Караганда, компонент! коя турып баска аймакта суреттеуге болады. йткеш OnDrawCell окигасы 3p6ip Grid уяшыгы ушш шакырылады, ал такырыптарды 6ip рет кана суреттеу жен, такырыптары суреттелген белплер1 бар массив енпзем!з: GridTitles : array o f Boolean; OnDrawColumnCell окиганы ендеушйл карапайым кершедк procedure TForml. DBGridl DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); if not GridTitles[Column.Index] then DrawGridTitle(Column.Index); Егер катар такырыпы суреттелмеген болса, онда оны салу керек. Суреттеу урдю1 такырып аймагынын координаттарын жэне онын елшемш аныктап, осы аймакты кайтадан cyperreyi кажет. Осы урдю ендеу окигасына тасымалданган параметрлерд! бермес ушш локальд! ретанде курастырылган. Карапайымдылык болу ушш, такырып ею жолды ретшде жасалады, 6ipaK еш кедерпаз тагы косымша жолдарды да салуга болады. RowCount константа ретшде жарияланады да, 2-тен болады. procedure DrawGridTitle(ColIndex: Integer); var Titles : array[ I..RowCount] o f String; A R ect: TRect; {Такырып аймагы } R H : Integer; {Такырып аймагынын узындыгы} BlankPos : Integer; {Такырып бел1ктеу позициясы} 170

172 B/ankPos := Pos(' I Column. Title. Caption); ifblankpos <> 0 then { Атында бос орын бар катарларга гана кеп жолды такырыпды суреттейм1з. Калган такырыптарды DBGrid 631 салады} Titles[l] Copy(Column.Title.Caption, I, BlankPos-l): Titles[2] := CopyfColumn.Title.Caption, BlankPos+1, Length (Column. Title. Caption) - BlankPos); RH := RectHeight(Rect); {Rect ri ктертбурышында агымдагы уяшык координатапары Ж1бер1лед1, такырыпды суреттеуге арналган аймакты ттннен координатасы ретшде O-fli бел1плеп алуга болады. Суреттеу аймагынын 6mKTiri каз1р DBGrid стандартты уяшыгынын бжкппне тен, ол дэл 6ip жолга жеткшкп} SetRect(ARect, Rect.Left, 0, Rect.Right, RH); InflateRectfA Rect, -2, -2); { Titles жиектерт тузету } Dec(RH, 2); {Мэтшд1 шетшен вертикаль бойынша шепну ушш орынан кету } with DBGrid 1.Canvas do Brush.Color := DBGridl.FixedColor; FillRect(ARect); { DBGrid'neH салынганды жойып, такырып аймагын толтыру } { Такырыптын 6ipiHmi жолын салу } ARect. Bottom ;= RH; DrawText(Handle, PChar(Titles[1]), -1, ARect, DT CENTER or DTSINGLELINE) ; { Алдын ала суреттеу аймагын жолдын елшемше карай теменге шегерту аркылы такырыптын eicimin жолды сапу} OffsetRectfA Rect, О, RH-2); DrawText(Handle, PChar (Titles[2]), -1, ARect,DTCENTER or DTJSINGLEUNE); GridTitlesfColIndex] := true; { Осы катар ушш такырып суретш сапдык} TCustomGrid-тщ кез-келген MyparepiHin жолдын би)кт1п RowHeights [жолдын HOMepi] касиетомен аныкталады. Бул касиет protected деп жариялангандыктан, DBGrid-am аймагынын би'нст1п стандарттыга Караганда улкен болуы ушш талап етет.1н касиетшщ кору аймагын жогарлату жэне талап ететш класстан орын басушыны суретгеумен, компонент! н коргалган касиетше карпайым Kipyi колданылады: 171

173 type THackGrid = class (TCustomGrid) public property Row Heights; Аймактын бткппн 6ip рет белплеу керек, б^л FormShow окнганы евдеугнде жасалады. procedure TForml. FormShow (Sender; TObject); var H ; Integer; {Ken жолды тацырыптар yutm цажеттг жолдыц бшкттн аныктау } Н := DbGridl.Canvas. TextHeight('gW'); THackGrid(DBGridl).RowHeights[OJ := (H + 2) * RowCount; { RowCount ерйсыз 2 деп жарияланган} М Н И Н Ш М j x j Название Столица страны Континент Площадь страны Население J llaigentina Buenos Aires South Ameiica 2777B 'Bolivia LaPaz South Ameiica MBiaal Brasilia South Ameiica (Canada Ottawa North Ameiica П Chile Santiago South Ameiica ' {Colombia Bagota...Ill'll 1 П Й 0 П ПСиЬа Havana Teiia Incognita I lecuadoi Quito T eua Incognita leisalvadoi SanSalvadoi South Ameiica 'Guyana Georgetown Euiopa 'Jamaica Kingston Europe I 6.9-сурет - Компоненттердщ коргалган касиеттерше ену Багдарламаны 6ipmmi рет icke коскан кезде кызык нэтиже байкалды баска терезеге ауыстыру жэне кайтадан Grid-i бар терезеге кешкен кезде такырыпдын коп жолдары жойылады. Оган коса ол т т н н ен жэне келдецнен ScrollBar кемепмен Grid- бойынша орын ауыстырлуы кезшде де жойылады. Терезеш ауыстыру окигасы уш*н орнын езгертуге, FormActivate окигасында такырыптарды кайта салу кажетт1л1пн белгшеу аркылы болады, 6 ipak ScrollBar'лармен DBGrid YPAici ауыстыру тереземен куресуге тура келёда. Барлык 172

174 такырыптарда сурет салу белплерш жоятын, форманын ЭД1сш жасаймыз: procedure TForm 1.InvalidateGridTitles; var I : Integer; for I: =0 to Pred(DBGridI. Columns. Count) do GridTitles [I] : false; Такырыптардын толык кайта салуы кажет болган жагдайда оны эрдайым шакырамыз. procedure TForml. Form A ctivate (Sender: TObject); InvalidateGridTitles 0; Жэне DBGrid'TiH ауыстырылган терезе процедурасында: procedure TForml. GridWndProcfvar Message: TMessage); case Message. Msg of WMERASEBKGND, WMVSCROLL: InvalidateGridTitles 0; WMJfSCROLL: InvalidateGridTitlesO; {еюшшке орай, келденнен скроллинг кез!нде барлык DBGrid TiH кайта салу кажетгшпмен кел1суге тура келед1, эйтпесе кеп жолды такырыптарды суреттеу бойынша барлык жумыс бекер кетед i} InvalidateRectfGridWnd, nil, true); with Message do Result := CallWindowProc(OldWndProc, GridWnd, Msg, wparam, IParam); BipiHUii нускада WM HSCROLL хабарламасын ендеу кез!нде DBGrid-Tin барлык терезесшщ кайта салуга арналган код жазылмаган. Калай тырысканмен, кеп жолды такырыптардын жогалу себеб1н болдырмауга мумшидак болган жок, сондыктан DBGrid-т'щ барлык терезелерш кайта салу коды ерюаз косылган. TDBGrid компонент!н1к MyparepiH коллпнып кепжолды такырыптарды салу. TDBGrid стандарты компонент!н колдану 173

175 кезшдеп стандартты ем^с. такырыптарды салуына Караганда, мурагерде элдекайда женьвдеу жасалады, ойткеш компонентте DrawCell виртуальд1 aflici бар, ол Gridt-т'щ барлык уяшыктарына, сонымен катар деректер1 бар дошыктарына да келедь Бул жагдайдагы стандарты емес такырыптарды суреттеу мурагердеп DrawCell жабык эдкшде колданылады. Оган коса, DrawCell эд1а Grid-пен келетш болса, оны кез келген кайта салу кезшде, терезенщ клиентпк аймагын коскан кезде, скроллинг кез1нде барлык терезелерд1 жанарту немесе кандай такырыптар суреттелгенщ бакылаудын кажет! жок. Егер DBGrid-тын такырып аймагын кайта салу кажеттшп туындаган кезде гана, б1здщ cyperreyimi3 шакырылады. procedure THSDB Grid. DrawCell (A Col, ARow: Integer; ARect: TRect; State: TGridDrawState); Var TitleText: String; {Тольщ тацырыпы} Titles : array of String; {Тацырыпдыц бвлттер} {Шыццан бвлттертщ сандардыц цайтарылуьшен тольщ тацырыпды бвлтке белу} function SplitTitle: Integer; const TitleSeparator = ''; { Бул тацбаны келеыге шыгаруга болады published property } CurPos, J: Integer; CurStr: string; Set Length (Titles, FTitleLines); {Тацырыпта цанша жолдар бар екенш аныктаймыз. Тек тацбалар саны ecenmenedi TitleSeparator } Просто считается количество символов TitleSeparator } J 0; CurStr: TitleText; repeat CurPos: = Pos(TitleSeparator, CurStr); if (CurPos > 0) and (J < Pred(FTitleLines)) then Titles[J] : Copy(CurStr, 1, Pred(CurPos)); CurStr: = Copy(CurStr, CurPos+Length(TitleSeparator), Length(CurStr)-CurPos-Length(TitleSeparator)+1); Inc(J); end else Titles [J] := CurStr; 174

176 if J > - Pred(FTitleLines) then {Тацырып цанша mine Kipicmipe алатындыгынан кеп коийрудщ цажат жок;} Break; until CurPos=0; Result := J+l; var DataCol, I, TitleParts : Integer; TextRect: TRect; LineHeight: Integer; if (dgtitles in Options) AND (gdfixed in State) AND (ARow = 0) AND (A Col <> 0) then { Тацырыпдыц уяшыгы салынуы цажет } { DBGrid стандартты эрекетг} if сsloading in ComponentState then Canvas. Brush. C o lo rc o lo r; Canvas. FillRect(ARect); Exit; DataCol := ACol; if dglndicator in Options then Dec(DataCol); {Тацырып аймагыныц влшемш жиектеуге Kenmipy, егер жазъщ такырыптарды icmeyze келсе, онда InflateRect ж!беру керек.} if [dgrowlines, dgcollines] * Options = [dgrowlines, dgcollines] then InflateRectfARect, -I, -I); TitleTextColum ns [DataCol].Title.Caption; Canvas. Brush. Color := FixedColor; { Егер тацырыпды mycci3 жасагысы келсе, онда Fill Rect -mi втюзу керек} { Егер тацырып аймагында туе mi cypemmi салгын келсе, онда оны мында салуга болады } Canvas. Fill Rect (A Rect); { Endi Mamindi салуга болады } Canvas. Font: - Font; if FTitleLines = I then WriteText (Canvas, ARect, 1, I, TitleText, 175

177 Columns[DataQol]. Title. Alignment); end else TitlePartsSplitTitleQ; TextRect := ARect; LineHeight RectHeight(ARect) DIV TitleParts; TextRect.Bottom TextRect.Top + LineHeight; for I: =0 to Pred(TitleParts) do WriteText (Canvas, TextRect, I, 0, Titles[IJ, Columns[DataCol]. Title. Alignment); OffsetRect(TextRect, 0, LineHeight); {Тацырыптардыц уягиыгыныц шеттерт жалпацтау ушш DrawEdge-di жазбау керек} if [dgrowlines, dgcollines] * Options = [dgrowlines, dgcollines] then InflateRect(ARect, 1, 1); DrawEdgefCanvas. Handle, ARect, BDRRAISEDINNER, BFJBOTTOMRIGHT); DrawEdge(Canvas.Handle, ARect, BDR RAISEDINNER, BF_TOPLEFT); DoDrawTitleCell (DataCol, Columns [DataCol], ARect); end else inherited; {Тацырып уяшыгын жиектеу, егер жазьщ жиектеуы жасагын келсе, онда DrawEdge цолданбауга болады} Оган коса, такырып аймагын суреттеу кезшдё колданушынын окиганы шакыруга мумюндгп пайда болады, онын усйнен, осыдан кешн компонентой езшен такырыпы салынганнан сон болады. Аталык компонентшщ коргалган касиетше Kipy кукыгы бар болгандыктан мурагердеп такырыптын бщздм аныктау жещл орындалады. procedure THSDBGrid. CalcTitleHeight; if dgtitles in Options then RowHeights[0] := (Canvas.TextHeight('gW') + 2) *FTitleLines; Такырып аймагынын бшкпгш 6ip рет белплеу керек, Grid-тщ терезесш курган кезде жэне эрдайым оньщ сырткы турше ыкпал 176

178 ететш Grid-тщ касиетшщ езгерген кезде тамсыру кажет. Терезеш куру жэне Grid- касиеттщ езгеру кезшде CreateWnd жэне LayoutChanged виртуалды эдастер? колданылады, олардьщ жабык нускаларына шакыру Y P flici CalcTitleHeight косылган. Тузету уяшыгындагы компонент. TDBGrid такырыптарынан 6ip мезплге назарымызды бурып, деректерд1 тузетуге назарымызды аударайык. Grid- ( TInplaceEditor) уяшыгыньщ стандартты i i i i K i редакторы аса колайлы нуска емес. Мэндерд! тандау жэне оларды тузету ушш жеке диалогтык терезелерд1 колдануга болады, сонымен Grid-тщ рзще керек компонента енпзуге де болады. Дэл осымен 6i3 Kasip жумыс ктейм1з. DBGrid-Teri стандартты Inplace-Editor'dbi жеке компонент1мен TDBComboBox мысалында алмастыру. DBGrid катарында стандарты редактордьщ орнына баска компонент пайда болу ушш, 6ipHeuie кадамдарды жасайык: Редактор болатын жеке компонента курастырайык (мысалда TDBComboBox колданылады). Оны куру кезшде ол Grid-тан тыс кершбес ymih False iiuiiiaeri Visible касйетш орнату керек. Grid айкындапатын DataSet деректер1мен автоматты турде байланысты камтамассыздандыру ymih DBComboBox компонент! та нд алады. Компонент! куру кезшде Grid сиякты деректер жнынтыгымен байланыстырайык, кай редакторды Grid-те ауыстыргымыз келсе, DataField ретшде жолдык атын беютем1з. Компонента колмен курудьщ орнына design-time формасына салуга болады. FEditor := TDBComboBox. Create(Self); FEditor.Parent.= Self; FEditor. Visible false; FEditor.Style csdropdownlist; FEditor. DataSource ;= DBGrid. DataSource; FEditor. DataField; 'STATE'; Берйгген мысалда ComboBox mismi Grid-тщ цажетт1 баганасы Picklist-тщ мэндершен толтырылады. for I; =0 to PredfDBGrid. Columns. Count) do ifdbgrid.columns [I].Field.FieldName = FEditor.DataField then { ComboBox жолдыц т1з!м'т PickList mi3i\idi иемдену} FEditor.Items.Assign(DBGrid.Columns[IJ.PickList); Break; 177

179 j Керек катар фокусты >ал^ан кезде, бул компонента 613 OnDrawColumnCell окига ендеушгге корсетет1н боламыз. т т»» г,.» г г ',и - п - H B n K i t l i M ^ i i r n f i l f 1 Г " Сложная шапка гриаа Синхронизация гридоа Группировка и метки колонок Страна I Столица География Континент Площадь Параметры Численность Argentina Buenos Aires South America Bolivia LaPaz South America Brazil Brasilia South America Canada Ottawa North Ателсг w Chile Santiago T erra Incognita Azia Colombia Bagota Africa 11Э Cuba Havana Europa Ecuador Quito South America El Salvador San Salvador Guyana Georgetown Euiopa Jamaica Kingston Europa Mexico Mexico City North America Nicaragua Managua Azia сурет - Design-time формасын колдану procedure TForml.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); if (gdfocused in State) then if (Column.Field.FieldName ЩFEditor.DataField) then { Стандартты InplaceEditor'dbiy орнына ComboBox-mi Kepceme\ti3 } FEditor.Left := Rect.Left + DBGrid.Left; FEditor. Top: = Rect. Top + DBGrid.top; FEditor. Width := Rect.Right - Rect.Left + 2; FEditor. Visible := True; Суретгтелген компонент кезге керерлж калмас ушш, кажет уяшык фокусын жогалткан кезде, оны ColExit окиганы оццеушгге жасырамыз procedure TForml.DBGridColExit(Sender: TObject); 178

180 { ComboBox жолынан шыгар кез!нде жасыру керек } ifdbgrid.selectedfield.fieldname = FEditor. DataField then FEditor. Visible : = false; Жолдын мэнш ауыстыру ymih, Т131мд! тышканмен тандау аркылы гана емес, сонымен катар пернатакта кемепмен де ауыстыру ушш, жолды тузету барысында, CornboBox-ты DBGrid пернесш басу аркылы тасымалдау кажет. Оны DBGrid-т'щ OnKeyPress окига ehaeyiurre жузеге асыруга болады, сонымен 6ipre OnKeyDown евдеупшнде де болады. Мен OnKeyPress ецдеу1шш мысалга кел'прейш. procedure TForm I DBGridKeyPress(Sender: TObject; var Key: Char); { Барлыц перне басуларды ComboBox -me цурастырылган InplaceEditor тасымалдаймыз } if (Key <> с hr(9)) then if (DBGrid.SelectedField.FieldName = FEditor. Data Fie Id) then FEditor. SetFocus; SendMessage(FEditor. Handle, WMCHAR, word(key), 0); Мысалда TDBComboBox колданган, онын аналоп бойынша тузету ymih баска да компоненттерд1 колдануга болады. Теменде суретте мысал келт1ршген, онда Grid-ке «куш» ти гт жолдарды тузету TDBDateEdit енпзшген: Evenl_Neme Event_Date Event_Time Men s Тrack and Field :00: meter Men's Speed Skating :00: Meter Individual Medley Women's Basketball Finals 2000:00 Women's Cyc Июнь >1» 09:00:00 Men's Gymna Пн Вт Cp Чт Пт Св 8с Women's Hoc 1 11:00:00 Women's Higl * :00 00 Karate Finals И :00:00 Kayak Level Б :00:00 Lacrosse Sen 14:00:00 Pofo Finals :00: сурет - Кунт1збект1 косу 179

181 G n d -терд! уйлеспру.ьек! Grid-Ti катарларды н елшем! мен орнын уйлеспру. Тапсырма. ею TDBGrid 6ipiH ih астында 6ipi орналаскан катарлармен жумысты толык уйлесторуде жатыр: катарлардын елшемш щ e3repyi жэне олардыц орын ауыстырылуы ею Grid-та катар журу1 керек. Бул тапсырманьщ ен квп колданыска ие болган Grid-TiH деректермен жэне нэтиже Grid-'нлен белг1пену1. Жогаргы Grid-те барлык мемлекеттердщ Ti3iMi мен олардын халыктын тыгыздыгы мен жер ауданы керсетшген (MainGrid), теменп - т!зшу мунда сол акпарат континент бойынша топтастырылган ( Total Grid). Сложная шапка гриаа Синхронизация гринов Груплировка и метки колонок 1 Ш т Р ) х 1 [Страна Площадь Население й Colombia , Cuba Ecuador 4S El Salvador ш ш щ Guyana Меню для данных DO 0D0 Jamaica X00 11Итого по континентам Площаоь Населете [Africa 176, Azia Europa North America 21,306, South America , ,200,003 Tetia Incognita сурет Grid-Tepfli уйлеспру Эрекеттерд1' уйлеспру кезшде Grid-те осы эрекетп ынталандыратын репнде санайык жетекип, ал ekihmici бул жагдайда жетектелетш. Уйлест1руд1 ijiifcripin алмас ушш, косымша ауыспалыны Kipicripefik: SynchProccesed: Boolean; Уйлеспру ymih уш окиганы евдеу керек: 1) катар позициясын езгерту; 2) келдецнен скроллинг {Grid-те 6ipiHLui болып кершетш катарды езгерту); 3) катар ешн езгерту. Катарлардын орын ауыстыруын бакылау ушш OnColumnMoved окигасын пайдалану. Уйлеспруд1 карапайым етк1зе\пз: жетектелетш 1 t i 180

182 Grid-тщ катарын тугел жазып аламыз, ал непз ретшде жсгскин катарды аламыз: procedure TfExDBG.mainGridColumnMovedfSender: TObject; Fromlndex, Tolndex: Integer); Var Grid: TDBGrid; {TDBGrid(Sender)3icemeKiui Grid- кртарлардъщ орын ауыстыруын ынталандырады } // "жетектелетт " Grid-mi аныцташыз IF TDBGrid(Sender).Name = 'TotalGrid' Then Grid: =MainGrid Else Grid:=TotalGrid; {Kfii3ip жетектелетт Grid- цатарыныц взгеруше мэн бермеу керек, басца Grid-пен yiuiecmipydi ынталандыру цажет} SynchProccesed:=Тгие; Grid. Columns. Assign(TDBGrid(Sender). Columns); // Ywecmipy ащталды SynchProccesed: =False; Келденнен скролингп бакылау ушш TCustomDBGrid.TopLe/iChanged эдю ете жаксы келедь Оюшшке орай, стандарты TDBGrid бул эдгс кол жгпмаз болып табылады. Сондыктан, стандартты Grid-ii колданбай, KepiciHuie жеке мурагерд1 курастырган дурыс болады. Бул эдгстщ жагымды жактары макаланын басында сипаттаган болатын. TexDBGrid = class(tdbgrid) private FOnTopLeftChanged: TNotijyEvent; public Procedure TopLeftChanged: override: published Property OnTopLeftChanged : TNotijyEvent FOnTopLeftChanged write FOnTopLeftChanged; read End; Procedure TexDBGrid. TopLeftChanged; Begin Inherited; 181

183 IF Assigned(FOnTopLefiChanged) then FOn TopLeftChanged(Selj): End; Енд1 6i3re OnTopLeftChanged окигасына Kipyre болады. YiLnecTipy жетектелетш Grid-тщ 6ipiHiui Kepi нет! н катарды боп, жетеюш Grid-тщ сол катарын жасауда непзделген. Ол ушш бьге TCustomGrid.LeftCol касиет1 керек болады (help кара). Бул касиет protected 6ipax 6i3 жеке мурагерд1 курастырг анд ыктан, онын KepiHyiH ещбгр киындыксыз жасау мумкш. procedure TfExDBG.GridTopLeftChangedfSender: TObject); Var G rid: TexDBGrid; IF NOT SynchProccesed Then Begin // TDBGrid(Sender) скролингт'1ынталандырады, ол ofcemekiui Grid-i // "жетектелетш"grid-mi аныктаймыз IF TDBGrid(Sender).Name = 'TotalGrid' Then Grid: =MainGrid Else Grid: TotalGrid; SynchProccesed:=True; Grid.LeftCol: TexDBGrid(Sender).LeftCol; SynchProccesed: =False; End; Y n iih H ii пункт: катар еншщ езгеруш бакылаймыз. Уйлеспру бул жагдайда тек жетектелетш Grid-тщ катар ешн, жетекип Gridкатарынын енше тец етш шыгаруда непзделген. Procedure TjExDBG. SynchronizeGrids( MasterGrid, SlaveGrid: TDBGrid); Var i : Integer; Begin IF NOT SynchProccesed Then Begin SynchProccesed:= True; For i: =0 To MasterGrid.Columns.Count - 1 Do SlaveGrid. Columns[ij. Width: -MasterGrid. Columnsfij. Width ; SynchProccesed: = False; End; End; Кай жагдайда осы ЭД1СТ1 колданган дурыс? Ce6e6i Grid-те OnResizeColumn окигасы жок... Help- пен мукият танысып, SetColumnAttributes эд1сше наэар аударайык: 182

184 Sets the column widths and disables tabbing to cells that can Vbe edited. procedure SetColumnAttributes; virtual; Description Applications cannot call this protected method. It is called automatically when the Columns property is recomputed, to adjust the column widths and ensure that the user can only tab to fields that can be edited. Бул эдк баганалар, сонымен катар олардын еш де бапталуы езгерген кезде автоматты турде шакырылады. 1здегешм1зд1 таптык! OnTopLeftChanged аналоп бойынша б!здщ Grid-те OnSetColumnAttr окигасын курастырамыз: TexDBGrid = class (TDBGrid) private FOnTopLeftChanged, FOnSetColumnAttr: TNotifyEvent; protected Procedure SetColumnAttributes; override; public Procedure TopLeftChanged; override; published Property OnTopLeftChanged : TNotifyEvent read FOnTopLeftChanged write FOnTopLeftChanged; Property OnSetColumnAttr : TNotifyEvent read FOnSetColumnAttr write FOnSetColumnAttr; End; procedure TexDBGrid. SetColumnAttributes; inherited: IF Assigned(FOnSetColumnAttr) Then FOnSetColumnAttr (Self); Бул окиганы eki Grid- ушш ендешк: // вйткеж жетектелетш Grid-Ti 613 6ipHeuie рет аныктаймыз, сондыктан оны жеке ашске белгшеу дурыс болады Function TfExDBG GetSlaveGridf MasterGrid: TexDBGrid): TexDBGrid: 183

185 Begin // M astergnd j'imecrnigydi ынталандыру, ол жетекш1 Grid- // "жетектелетт" Grid-mi аныцттшыз IF MasterGnd.Name = 'TotalGrid' Then Result: -MainGrid Else Result:=TotalGrid; End; Procedure TfExDBG.OnSetColumnAttr(Sender: TObject); Begin IF NOT SynchProccesed Then SynchronizeGrids(TexDBGrid(Sender),GetSlaveGrid(TexDBGrid(Sender)) ); End; Ал, ещц керу керек! Б1здщ Grid-ке б1рнеше карапайым, 6ipaK жагымды бангп кояйык Такырыптар жэне деректер аймагы уш*н эргур.н мэзйрд! шакырамыз. Тышканньщ он жак батырмасын баскан кезде Grid-TiH ез1не катысты координаттары кол жет1мд1 болады (клиент коордннаттар деп аталады). Б13 кай аймакта жургешм1зд1 аныктау ушн (такырып немесе деректер облысында), 6i3 KipreH уяшык жолынын жэне багананын HOMipiH аныктау керек. Ол ушш б1здщ мурагерге сэйкес эд1ст1курастырамыз: procedure TexDBGrid.MouseToCell(X, Y: Integer; var ACol, ARow: Integer); Var Coord: TGridCoord; Begin Coord := MouseCoord(X, Y); A C olc oord.x ; ARow = Coord. Y; End; Ал ещй OnMouseUp окиганы ецдешк: procedure TfExDBG.GridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var Row, C ol: Integer; APoint : TPoint; Grid : TexDBGrid; Grid:= TexDBGrid(Sender); // Тышцанмен басылгандардыц, Grid- жолы мен багананыц нвмерш аламыз Grid.MouseToCell(X,Y,Col,Row); IF Button = mbright 184

186 Then//Егер тышцан толтырылмаган Grid- аймагына туспесе IF (Col >= О) AND (Row >=0) Then Begin // Тышканныц оц батырмасын басып турып, придай M33ipdi шацыруын тексеремь IF Row = 0 Then Grid.PopUpMenu: =рт Title Else Grid.PopUpMenu:=pmData; // Тышцанныц координатынан аламыз ( Grid-ке цатысты клиенттж координаттар) //Шыгатын мэз1р ушш экрандьщ координаттар APoint := Grid.ClientToScreen(Point(X,Y)); Grid.PopUpMenu.Popup(APoint.X,APoint.Y); End; Агымдагы жолды туспен белплеу. Grid- тандауында dgrowselect касйетш беюткен кезде, агымдагы жол эрдайым тугел белг1ленед1, 6ipaK epicri тузетуге болмайды. Кез келген epicti тузетуге болган жагдайда, жолды туспен калай белплеуге болады? Мундагы непзп мэселе боп, суреттелетш жол агымдагы болып табылатыныц калай TyciHyre болады. TDataLink.ActiveRecord касйетш караймыз: Specifies the index of the current record within the internal set of records buffer maintained by the dataset for the Owner of the TDataLink object. property ActiveRecord; Integer; Description Use ActiveRecord to discover or set the current record in the set of one or more records managed by the dataset. The set o f records managed by the dataset corresponds to the number of records from the dataset visible at one time. For example, when the TDataLink object is owned by a data-aware grid, the set o f records managed by the dataset corresponds to the number of rows shown by the grid, and the ActiveRecord represents the current row. 0те кажетп касиет. Property ActiveRecord; Integer read GetActiveRecord; function TexDBGrid.GetActiveRecord: Integer; Result;=DataLink.ActiveRecord; Grid- жолын суретгеу ендеуше кажетп езгерктер юрпзешк: 185

187 procedure TfExDBG.mainGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol:, Integer; Column: TColumn; State: TGridDrawState);' //Агымдагы жолды бегшейма IF TexDBGrid(Sender).ActiveRecord = TexDBGrid(Sender).Row- I Then TDBGrid(Sender).Canvas.Brush.Color: =RGB($CC,$CC,$99); IF (gdselected IN State) Then Begin TDBGrid(Sender). Canvas. Brush. Color: = clhighlight; TDBGrid(Sender). Canvas.Font. Color clhighlighttext; End; //An ettdi e3i cypemmecm! TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); RowSelect me Mine тагы 6ip жолды белгтеу adici: procedure TFormI.DBGridlDrayvColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid: THSDBGrid; Grid := THSDBGrid(Sender); if (Rect.Top = Grid.CellRect(Grid.Col, Grid.Row).Top) and //Бершген жагдайда агымдагы жолды суреттейтшш1зд1 тексеред!. (not (gdfocused in State) or not Grid.Focused) then //Жэне фокус агымдагы баганада немесе фокус Grid-те емес орналаскан Grid.Canvas.Brush.Color := TColor($D86A10); Grid.DefaultDrawColumnCell(Rect,DataCol, Column, State); Ол уийн бвдщ м^рагеришдё public секциясында CellRect урдасш жариялап, ал оныц жузеге асырылуын журпзу: function CellRect(ACol, ARow: Longint): TRect; function TexDBGrid.CellRect(ACol, ARow: Integer): TRect; Result ;= inherited CellRect (ACol, ARow); 186

188 Курдел! такы ры птар. А енд1 кайтадан жолдарга Keiuin, макаланьщ басында басталган жолды ары карай жалгастырамыз. Егер 6i3 такырыптарда суречтей алсак, онда 6i3 коп!стей аламыз, барлыгын айтсак та артык болмас суретте курдел! такырыптары бар Grid- бейнеленген. Бун дай нэтижеш жетудщ 6ip эдкш талкылайык- Алдын ала б!зд1н Gridбылай кершед1: Argentina Buenos Aires South America Bofivia LaPaz South America сурет - Алгаш кi KepiHic Колданылатындар ymih 6ipiicrip^reH такырыптарды косу ушш, Grid- такырыпынын аймагын 6HiicTiri бойынша улкейту керек. Страна Столша Континент Площадь Числа иостъ Aigenfaa B uenos Are* South America ЭООООЭ Bofvia LaPaz South America сурет - Такырыптарды 6ipiicripy Жэне де керек жерщ де такырыптардын 6ipiicripeTiH б е л т н езд^пмен кайта суреттеуге болады. География Параметры ±. Страна I Стоп*! a Коип*внг Плошааь Числвжость Aigertna Buenos Aies i Soiih America Boivta LaPaz South America сурет - Такырыптарды косу Бул сипатталган эдктщ жузеге асырылуы б!здщ TexDBGrid мурагерде керсетшген: Курдел! такырыптардын режим! н косу/сенд!руд1 жузеге асыратын, касиет JcipicTipefiiK. TexDBGrid = class(tdbgrid) private FSubHeader : Boolean; // тацырыпша published 187

189 Property SubHeader : Boolean read FSubHeader write SetSubHeader; Дэл осы касиет1 тшодэып аймактарыньщ бшктшн реттейтж болады. Const TITLE_SUBHEADER = 2; TITLEJDEFAULT = /; RowHeights[0] := 19 * FTitleLines ; procedure TexDBGrid.SetSubHeader(const Value: Boolean); FSubHeader: Value; IF FSubHeader Then FTitleLines:=TITLE ^SUBHEADER Else FTitleLines:=TITLE_DEFA ULT; CalcTitle; 2) TexDBGrid.DrawCell эдтне вцдеуд'1цосамыз IF FSubHeader Then Begin II Такырыптарды 6ipiicripeTiH Header -Ti Title у сак атуларга суретгейшз DrawSubHeader(DataCol, Canvas); II Title такырыптарын суреттейм1з FRect: =ARect; FRect. Top: RectHeight(ARect) div FTitleLines; DrawTitleCell(FRect,Columns [DataCol]); End Else DrawTitleCellfFRect, Columns [DataCol]); Мунда такырыптарды суреттеу ею тэрт1пке беледк DrawSubHeader жэне DrawTitleCell. Мундагы DrawTitleCell пкбурышта ЗО-жиепн суретгейд1, FixedCols туймен бояйды да, мэтшд1 жазады. Ол деген1м1з катардын карапайым такырыпын ел1ктеп керсетедь Ал ещц DrawSubHeader тэр"пбшде дэдвдрек токталайык. BipHeme катар ушш 6ipiicripeTiH такырыпды суреттеу ушш, {TRect) тжбурышын алу кажет, ол оз тарапынан осы катарды жэне мэтшд1 6ipiKTipefli, жэне де оны 6ipiKTipeTiH такырыпда жазу керек. Кенет!н perreyiiirri камтамассыз ету ушш ею касиегп курастырайык: published 188

190 Property OnGetHeaderText : TOnGetHeaderText read FOnGetHeaderText write FOnGetHeaderText; Property OnGetHeaderRect : TOnGetHeaderRect read FOnGetHeaderRect write FOnGetHeaderRect; Бул касиеттер кемепмен сэйкес келетш окнгалардын ендеу1штерш реттеуге болады. Procedure DrawSubHeader(ACol: Integer; Canvas : TCanvas); Var HRect: TRect; Begin //BipHeiue катарды 6ipiKTipeTiH, тертбурышты аламыз, //олар ymih курдёл! такырыптарды суреттейм1з HRect: =GetHeaderRect(A Col); /УБшкпп бойынша тертбурыштын белiпн гана аламыз //ейткеш екшпй б ел т карапайым такырып HRect. Bottom: =RectHeight(HRect) div TITLESUBHEADER; Canvas. FillRect(HRect); //мэтнад жазамыз, //GetHeaderText эдгс^мен алатын боламыз InflateRect(HRect,-1,-I); WriteText(Canvas, HRect, GetHeaderText(ACol), tacenter); //ЗЕ)-жиегш суреттеймв Paint3dRect(Canvas.Handle,HRect); End; GetHeaderRect жэне GetHeaderText dflicrepi шшде, FOnGetHeaderRect жэне FOnGetHeaderText окиганы ендеу iurrepi шакыралатын болады. Будан есте келеспп сактаган жен: блокка бхр1кт1ршгендерден барлык катарлар ap6ip мезпл кершбейтш болуы мумкш. Белгш катар жэне жол ушш тйебурышты кайтаратын TCustomDBGrid.CalcTitleRec функциясын пайдаланайык- Егер дэл осы уакытта бул катар кершбейтш болса, онда нелдш тертбурыш кайтырылатын болады. Function TexDBGrid.GetHeaderRect(ACol: Integer) : TRect; Var MasterCol : TColumn; Index,Shift, Count, i : Integer; Begin II Егер опцияларда тордын керсетшу! cehflipyni болса, онда оны есептеу кезшде ескерум1з кажет // жалпы тертбурыш IF [dgcollines] * Options = [dgcollines] Then Shift:-I Else Shift:=0; 189

191 Index:=ACol; Count: =1; V // Grid-тщ агымдагы цаыары ушш ацпаратты аламыз: // цай oipikmipuiemm блокца ол Kipedi // Index цай цатардан oipikmipemm блок басталады // Count цанша цатар оган Kipedi IF Assigned(FOnGetHeaderRect) Then FOnGetHeaderRect(ACol, Index, Count); IF Index+Count-1 > Columns.Count-1 Then Begin Index:=ACol; Count. 1; End; // Нэтижестде твртбурышты алу керек // цатардыц 6ipiK mipimeu блогына барлык, кгретшдерден туруы керек Result :=CalcTitleRect(Columns [Index], O.MasterCol); For i:=index+1 To Index + Count-I Do Result.Right:=Result.Right + RectWidth(CalcTitleRect(Columns[i],0,MasterCol)) + Shift; End; Жэне мысал рпн, окига ehaeyiiiijiepi 6ipiicripeTiH тертбурышты жэне курдел i такырыптарды колданган кезщдеп мэтшдерд1 калай пайдаланатынын керсетейж: Const GeoColumns 3; ParamColumns = 2; II Акпаратты агымдагы катарга алу ymih, ол кандай Sipucripy катарына тусетстн туралы айтады procedure TfExDBG.GetHeaderRect(ACol: Integer; var IndexStart, Count: Integer); IF ACol < GeoColumns Then Begin IndexStart: =0; Count: =GeoColumns; End Else Begin IndexStart:=GeoColumns; Count: =ParamColumns; 190

192 End //Агымдагы катар ушш такырыпды 6ipiicripeTiH мэтшд> any procedure TfExDBG. GetHeaderText(A Col: Integer; var Text: String); IF ACol < GeoColumns Then Text: - 'География' Else Text:= 'Параметрлер'; Керсетшген aaic тек мумкш болатындардын 6ipeyi, ол designtime-де 6ipiKripeTiH такырыптардын параметрлерш курастыруга мумкщдпс бермейд1, сонымен катар еюденгейл! такырыптарды колдану ушш жэне Grid-тш барлык курдел1 такырыптардын бар болуын жорамалдайды. Мысалы, темендеп суретте керсетшгендей жасау ушш, SubHeader касиетш тугел Grid-ке емес, тек 3p6ip онын катарына гана байланыстыру керек. Спина IСтолица География (Континент П лошадь Численность I Buenos Ares South Amettca Bofvia La Раг, South America сурет - SubHeader касиетш колдану Курдел! такырыптардын барлык нускаларынын жузеге асырылуы туралы айту мумкш емес. Б13ДЩ мысалдармен танысып, езд1пмен жана Grid-ir i ез карауларынызша жет1лд1руге болады. Катарлардын орын ауыстыруына тыйым салу жэне олардыц енш езгертуге руксат беру Курдел! такырыптарды колданган кезшде Grid-TiH катарлармен стандартты жумысы бакылау каж етплт туралы умытпау керек. Мысалы, 6ipiKTipeTiH блокка юретш катарлар онын шепнек орын ауыстыруга болмайды. Grid опцняларында катарлардын орын ауыстыруына тыйым салу/руксат беру жэне олардьщ еншщ (dbcolumnresize) e3repyi 6ipiicripuireH. Егер катарлардын орын ауыстыруына тыйым салса, онда олардьщ ешн езгертуге болмайды. БЬдэд жагдайда бул уйлест?ру колданушынын тарапынан ете ьщгайсыз. Тагы 6ip жолды KipicripefliK, ол катарлардьщ мурагерлерше жеке тыйым сапатын болады: TexDBGrid = classftdbgrid) private 191

193 FAllowColumnMoved; Boolean; 1.4 M public Property AllowColumnMoved : Boolean read FAllowColumnMoved write SetAllowColumnMoved; BGrids.pas алгашкы кодтарымен танысып, BeginColumnDrag эд1сшв квцш аударайык (Help кара). Бул эдес тек катарларды орын ауыстыруы басталган кезде шакырьшады. Б1здщ орын басушыда оны кайта аныктаймыз: function TexDBGrid.BeginColumnDragfvar Origin, Destination: Integer; const MousePt: TPoint): Boolean; Begin Result: =FAllowColumnMoved; II Катарларды орын ауыстыруга руксат ету тек, егер AllowColumnMoved езгертулерде руксат етшсе гана болады. IF Result Then Result: = Inherited BeginColumnDrag(Origin,Destination,MousePt); End; Орын ауыстыру урщсш 6i3 бакылайтындыктан, катарлардын енш езгерту мумкшдоп колданушыда калады. 1шк1 топтамалардыц жэне катар белгшерш уксастыру. Такырыптармен жумыс icrereh кезшде, ол мэтшд1 жазып жэне 3D жнегш косып, 6i3 оларды б1рнеше рет кайта суреттедж. Буны 6i3 такырыптарда гана емес, сонымен катар Grid- торыньщ кез келген жершде колдану га болады. TDBGrid кез-келген жершде такырып стшйнде уяшыкты суреттейм1з. Б1здщ Grid-ке 3D - жиеп кез келген уяшыкта суреттейтш болатын жэне такырыпдын уксастыруын жасайтын DrawCellButton - эдюш косайык. Оган (State) Grid- калпынан шыккан мэтшда, бул уяшыктын тертбурышын, мэтш, мэтшд! тузету, Kapiirri тасымалдаймыз. Бул калпы пркелген катарлармен калыпты жумыс icrey ymih кажет болады. procedure TexDBGrid.DrawCellButton(Rect: TRect; Text: String; Style: TFontStyles; State: TGridDrawState; Alignment: TAlignment); Var Shift: Integer; //Уяшыкты тазартамыз Canvas.Brush. Color: clbtnface; Canvas.Font. Color: =clbtntext; 192

194 Canvas. Font. Style: =Style; Canvas.FillRect(Rect); // Егер уяшык пркелген болса, онда 6i3 Kiiuipex елшемд1 TRect аламыз, // карапайым уяшыкка Караганда. Буны ескерту кажет Shift:=-2 + ORDfgdFixed In State); II мэтшд! жазамыз InflateRectfRect, Shift, 0); WriteText(Canvas, Rect, Text, Alignment); InflateRect(Rect, (-1) *Shift, 0); : // button яшыгы елшем1 бойынша суреттейм^з // егер бул яшык Т1ркелген емес, ейткеш ол ушш жиеп суреттелген болатын IF NOT (gdfixed in State) Then Begin И Grid-тщ Пркелген сызыктары аркылы белетш тузулерд1 саламыз // (уяшык арасындагы сур тузулерге Караганда, олар кара туспен суреттелетш, // акпарат (grids.pas)) InflateRectfRect, 1, I); Rect.Top:=Rect.Top + I; FrameRectfCanvas.Handle, Rect, GetStockObjectfBLA CKJBR USH)); Rect. Top: =Rect. Top - I; II Пркелген уяшыктар арасындагы тузулерд1 уксастыруды аяктадьщ InflateRectfRect, -2, -2); Paint3dRect(Canvas. Handle, Rect); End; Осындай, уяшыктын экзотнкалык нускасы Grid-те iuiki топтамалардьщ KepyiH курастыруга кемектеседь Innd топтамаларды курастырган кезде TDBGrid- пен катар деректер жиынын дайындау кажет, вйткеш TDBGrid онын (TDataSource) деректер кезшде жок жолдарды керсете алмайды. Бул сураныс бойынша деректерд1 дайындайык: мемлекеттер бойынша барлык акпаратты тандаймыз жэне курлык Ti3iMiH «аудан» жэне «халык тыгыздыгы» жолдарынын суммасын косамыз. Карапайым LW/CW-суранысы: Select I as TypeRecord, Continent, Name, Area, Population From country 193

195 Union Select 0 as TypeRecord, Continent,Continent as Name, Sum(Area) as Area, Sum(Population) as Population From country Group By Continent Order by 2,1 Г г Не(?)обычный TDBGiid Ш Г Л п Т х! Сложная шапке грим Синхронизация гриооо Грдгемроека и метки колонок Тип отметки ICheckfiох Р С подсчетом сумм j Отмечет: p ttouuot-. Стропа P " Площадь рн Н аселение A frica 176, , Uiuguay , Azia , Nicaiajpua Pent , * Europe 226.3S3.00l Guyana Jamaica N o itti A m eiica l Canada 9, Mexico сурет - Iuixi топтамаларды курастыру Сонымен, sp6ip курлык унин мемлекеттер тхнмш жэне тага 6ip жазбаны аламыз, оны топтама ушш кызметтйс жазба ретшде колданамыз, бул жолда курлык бойынша суммасы жок. К,ызмегпк жазбаны TypeRecord (ол ушш KipicripuireH) кызметпк жол бойынша идентификаттауга болады. вцдеуге OnDrawColumnCell топтамалык жолды суреттеу окигасын косайык/ procedure TjExDBG. GridFixDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var Alignment: TAlignment; II Нэтижелер жолында Grid- такырыпыньщ уксастыруын суреттейм1з IF Column.Field.DataSet.FieldByName(TypeRecord').AsInteger = 0 194

196 Then TexDBGrid(Sender).DrawCellButton(Rect,Column. Field. DisplayText.ffs Bo Id],State,Alignment); Mitie топтамалардыч тагы 6ip нускасы - sp6ip катар бойынша нэтижеаз, тек топ деректершщ 6ip-6ip'meH болшу1 к1редг l. f H e '(обычима IO B U in J Н Г Г В Т к! Сломим шапка грйаа) Синхронизация гринов Гряппцивкай метки колонок ' '... : ] Тип ОГМИГТКМ [RadioBulton ] Отмечена: Г* С подсчетом сумм Africa Стране Г Площадь (» Несеаенме 3 Uiuguay Э Alia I Nicaragua Peru ; Eutopa _I Guyana a Jamaica Nm America 1 Canada Mexico сурет Io ik i топтамаларды курастыру Оны курастыру уипн DrawCell Button эдю н е аналог болып келетш, дэлдгрек айтканда онын непзшде жана эд1сп курастырамыз. DrawRowButton эд!с! DrawCell Button снякты жасайды, 6 ipak эрдайым Grid-тщ барлык керш етш жолына c y p e rri созып набередг procedure TexDBGrid. DrawRowButton(Rect: TRect; Text: String; Style: TFontStyles; Alignment: TAlignment); Var FullRect: TRect; Col : TColumn; FullRect: =Rect; FullRect.Left:=lndicatorWidth + 1; FullRect. Right: =CalcTitleRect(Columns[Columns. Count- 1],0,Col).Right; DrawCellButton(FullRect, Text, Style, [],A lignment); 195

197 Катарды ц белплерк TCheckBox немесе TRadioButton такырыпында суреттейм13. Кайгадан такырыптарга кешешк. Мысалы Шзге катарды белплеу мумкшд^пн жузеге асыру керек. Непзшде мундай максаттарга TCheckBox немесе TRadioButton ею бакылауша кызмет етедь Такырыптарда суреттеу ушш б'шдщ жана Grid-TiH окигасымен пайдаланайык: OnDrawTitleRect procedure TJExDBG.OnDrawTitleRect(Sender: TObject; ACol: Integer; Column: TColumn; ARect: TRect); Var Style, TypeButton : Word; FRect: TRect; IF ACol >= TexDBGrid(Sender).FixedCols Then Begin InjlateRect(ARect, -1, -I); TDBGrid(Sender). Canvas. FillRect(ARect); II Бакылаушыны суреттеу ушш тертбурыштын еш - 20 пиксель FRect: =ARect; IF RectWidth(FRect) > 20 Then FRect.Right: =FRect.Left + 20; II Агымдагы epic белпленген немесе белгшенбегенщ аныктаймыз IF Column.Field.Tag = 1 Then Style: =DFCS_CHECKED Else Style: =0; // Кдтарды белплеу ушш бакылаушыньщ тишн тандаймыз IF FTitlelsCheckBox Then TypeButton: =DFCS_B UTTONCHECK Else TypeButton:=DFCS_BUTTONRADIO; II Белпш суреттейм1з DrawFrameControl(TDBGrid(Sender). Canvas. Handle, FRect, DFC_BUTTON, TypeButton OR Style); FRect.Left:=FRect.Right + 1; ' FRect.Right: =ARect.Right; II Такырып мэтин WriteText(TDBGrid(Sender). Canvas,FRect, Column. Title. Caption, Column. Title.Alignment); End; Катардыh белпсше басу ендеуш OnMouseUp окиганы вндеушде етюэем13. Келт1ршген мысалда багананьщ белпсш сактау ушш TField.Tag касиеп колданылады. Эрине,- бул тек мумкш болатын нускалардьщ 6ipeyi гана. procedure TfExDBG. GridFixMouseUpfSender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 196

198 Const MinX = 2; MaxX - 20; Var Raw, C ol, i: Integer; Grid: TexDBGrid; Begin Grid:= TexDBGridfSender); II Тышканмен батырманы басып к е т к е н д е р аркылы, Grid-TiH жол жэне багананыц номерш аламыз Grid.MouseToCell (X, Y,Col,Row); IF Button = mbleft Then Begin // Тышканныц он батырмасы такырыпга типзуш тексерем1з // жэне MiHflerrici крыжиктщ езше тикм IF (Row = 0) AND (Col > Grid. FixedCols ) AND (Grid. Columns [Col -1J. Field <> nil) Then Begin Dec(X, Grid. TitleRect(Col-l).Le/t); IF (X > MinX) and (X < MaxX) Then Begin Tag: =Grid. Columns [Col - IJ.Field.Tag; II Белпш барлык катардан шешем1з (егер ол TRadioButton) IF NOT FTitlelsCheckBox Then For i;=0 To Grid.Columns.Count - 1 Do Grid. Columns [ij. Field. Tag: =0; II Жэне агымдагыны белплейм^з Grid.Columns [Col - IJ.Field.Tag: =1 - Tag; II Grid-тщ тугелш емес, тек такырыптарды гана кайта саламыз Grid. RefreshTitles; RefreshSelect; End; End: End;End; Теракты багандарды колдану. Енда б'одщ Grid-ri стандарты TDBGrid e жетсспейтш FixedCols касиет1мен жабдыктайык. Бшмейтшдерге стандарты TDBGrid те ттркелген багана бар, ол Gridпен iimd кажетгшктер ymih колданады. Бул сол жагындагы индикатор, онда агымдагы жолга сиггеп, ушбурыш салынады. FixedCols касйетш коса турып, буны ескерген жен. TexDBGrid = class (TDBGrid) private FFixedCols : Integer; 197

199 public Property FixedCols : integer read GetFixedCols write SetFixedCols; procedure TexDBGrid.SetFixedCols(const Value: Integer); Var FixedCount, i : Integer; // Grid- индикаторын ескеру цажет IF Value <= 0 Then FixedCount: ^IndicatorOffset Else FixedCount : Value + IndicatorOffset; IF DataLinkActive AND NOT (csdesigning in ComponentState) AND (ColCount > IndicatorOffset + I) Then Begin IF FixedCount >= ColCount Then FixedCount: =ColCount - 1; Inherited FixedCols : FixedCount;. // Т1ркелген цатарларда табуляция бойынша тоцтауга болмайды For i := 1 То FixedCols Do TabStops[IJ : False; End; FFixedCols := FixedCount - IndicatorOffset; function TexDBGrid.GetFixedCols: Integer; IF DataLinkActive Then Result := Inherited FixedCols - IndicatorOffset Else Result := FFixedCols; Катар параметрлер! кайта санапган кезшде, "пркелген катар туралы акпаратты кайтаруга кажет. TexDBGrid.LayoutChanged жэне TexDBGrid.SetColumnAttributes эдктерд! суреттелген жобасында Карацыздар. Б1здщ Grid-те Для того, чтобы в нашем Grid-e пркелген колонки вели себя также, как ведут они себя, например, в TStringGrid, нужно обработать реакцию на мышь и клавиатуру. Procedure TexDBGrid.KeyDown(var Key: Word; Shift: TShiftState); Var KeyDownEvent: TKeyEvent; Begin KeyDownEvent.*= OnKeyDown; IF Assigned(KeyDownEvent) Then KeyDownEvent(Self Key, Shift); IF NOT DatalinkActive OR NOT CanGridAcceptKeyfKey, Shift) Then Exit; II б1здщ максатымыз - аймака пркелген катарларды жiбepмey 198

200 // ол денгешлнз Selectedlndex, FFixedCols Караганда, юитлеу бола алмайды IF ssctrl IN Shift Then Begin IF (Key = VK_LEFT) AND (FixedCols > 0) Then Begin Selectedlndex := FixedCols; Exit; End; End Else Case Key Of VK_LEFT: IF (FixedCols > 0) AND NOT (dgrowselect in Options) Then IF Selectedlndex <= FFixedCols Then Exit; VK_HOME: IF (FixedCols > 0) AND (ColCount <> IndicatorOffset + 1) AND NOT (dgrowselect IN Options) Then Begin Selectedlndex := FixedCols; Exit; End;End; O n K eyd ow n N il; Try Inherited KeyDown(Key, Shift); Finally OnKeyDown := KeyDownEvent; End; procedure TexDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var C ell: TGridCoord; Cell:=MouseCoord(X, Y); //Акраратты скроллингтау кезшде Т1ркелген катарлар орында калуы керек IF (Cell.X >= 0) AND (Cell.X < FixedCols + IndicatorOffset) AND Datalink.Active Then Begin IF (dglndicator IN Options) Then Inherited MouseDcrwn(Button, Shift, I, Y) Else IF (Cell. Y > = 1) AND (Cell.Y - Row <> 0) Then Datalink.Dataset.MoveBy(CeU.Y- Row); End Else inherited MouseDown(Button, Shift, X, Y);

201 I Эдсбиеттер 1 Андасова Б. 3. Деректер базасынын теориясы : акпараттык технологиялар мамаидыгынй-ариалган окульщ. - Астана. : Л. Гумилев атындагы Е У, б. 2 Блюдина Л. С. Проектирование баз данных в среде Delphi : Компьтерный методический материал к лабораторным работам / сост. Л. С. Блюдина. - Ульяновск : УлГТУ, с. 3 Елманова Н. Работа с базами данных в Borland C++ Builder // Компьютер-Пресс N6. - С Конноли Томсон и Бегг Каролин. Базы данных: проектирование, реализация и сопровождение. Теория и практика.- 2-е издание: пер с англ. : уч. Пособие. - М. : Издательский дом «Вильямс», с. 5 Шевченко Игорь, Филиппова Елена. НеОбычный TDBGrid г

202 Мазмуны Kipicne «Койма» деректер корын баскару жуйесш куру «Менщ элем1м» деректер корын баскару жуйесш куру «Телефон аныктамасы» деректер корын баскару жуйесш куру «Ютапхана жуйест деректер корын баскару жуйесш куру «Менщ досым» деректер корын куру DBGRID компонентшщ мумкшд1ктер Эдебиетгер

203 А. С. Аканова ДЕРЕКТЕР БАЗАСЫНЬЩ Ж У Й Е С 1 О ку-эд 1стемел 1к к^ралы Техникалык редактор М. К. Альжанова Жауапты хатшы А. К. Темиргалинова Басуга ж. Spin Typi Times nimi.m 29,7 x 42 V*. Офсетпк ка газ Ш арпы баспа табагы 7,10 Таралымы 300 пяпя Тапсырыс 1987 «КЕРЕКУ» Баспасы С.Торайгыров атындагы Павлодар мемлекегпк университет! , Павлодар к., Ломов к., 64

204 Курастырушы Аканова А. С. Информатика жэне акпараттык жуйелер кафедрасы Деректер базасынын жуйеа : акпараттык жуйелер мамандыгынын студенттерше арналган оку-эд1стемел1к курал Кафедра мэжшсшде бекггщщ2013 ж. о / С хаттама Кафедра мецгеруипа Н. Н. Оспанова Физика, математика жэне акпараттык технологиялар факультетшщ оку-эдгстемелш кецесшде макулданган 2013 ж. «_Лб> _и J хаттама ОЭК терайымы. (Д с& уёг А. Б. Искакова КЕЛ1С1ЛД1. ФМжАТФ деканы н. А. Испулов 2013 ж. «4С» од Нормабакылаушы иы _^ БСМмБжСЖБ Г. С. Баяхметова 2013 ж. «/А» 0&L МАКУЛДАНДЫ ОЭБ бастыгы Е. Н. Жуманкулова 2013 ж. «Л» С t

Математика факультети

Математика факультети ӨЗБЕКСТАН РЕСПУБЛИКАСЫ ЖОҚАРЫ ҲƏМ ОРТА АРНАЎЛЫ БИЛИМЛЕНДИРИЎ МИНИСТРЛИГИ БЕРДАҚ АТЫНДАҒЫ ҚАРАҚАЛПАҚ МƏМЛЕКЕТЛИК УНИВЕРСИТЕТИ Математика факультети «Əмелий математика ҳəм информатика» кафедрасы 5А480103

More information

«Деректер базасымен жұмыс істеуге арналған қосымшалар құру»

«Деректер базасымен жұмыс істеуге арналған қосымшалар құру» ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ СЕМЕЙ ҚАЛАСЫНЫҢ ШӘКӘРІМ АТЫНДАҒЫ МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ 3 деңгейлі СМК құжаты ПОӘК «Деректер базасымен жұмыс істеуге арналған қосымшалар құру» пәнінің

More information

TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Additional Financing

TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Additional Financing Additional Financing of Central Asia Regional Economic Cooperation Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project (RRP TAJ 49042) Resettlement Plan Project Number: 49042-005 (DRAFT) October

More information

MS DOS/Windows,UNIX,LINUX

MS DOS/Windows,UNIX,LINUX MS DOS/Windows,UNIX,LINUX Мазмұны 1.Файл 2.MS Dos/Windows ож 3.Желілік ОЖ 4.Windows NT/2000 ОЖ 5.Linux 6.Unix Қорытынды Файл - байттарды ң әлдебір атауы бар тізбегі. Әр файлды ң атауы болады. Windows опрециаялы

More information

*Операциялық жүйелер, түрлері, қызметі. Кыдырбекова Айғаным Адлетовна БЖ-515

*Операциялық жүйелер, түрлері, қызметі. Кыдырбекова Айғаным Адлетовна БЖ-515 Операциялық жүйелер, түрлері, қызметі. Кыдырбекова Айғаным Адлетовна БЖ-515 Операциялық жүйе компьютер іске қосылған кезде бірден жұмыс жасайтын программа. Операциялық жүйе қолданушымен сұхбат ұйымдастырады,

More information

Тақырыбы:Операциялық жүйелер, түрлері, қызметі.

Тақырыбы:Операциялық жүйелер, түрлері, қызметі. Қазақстан Республикасыны ң білім және ғылым министрлігі Семей қаласы Шәкәрім атындағы мемлекеттік университеті СӨЖ Тақырыбы:Операциялық жүйелер, түрлері, қызметі. Орындаған: Керменбай Н.Қ Жаксыгулова Д.Д

More information

LINUX ОПЕРАЦИЯЛЫҚ ЖҮЙЕСІ

LINUX ОПЕРАЦИЯЛЫҚ ЖҮЙЕСІ Коммерциялық емес акционерлік қоғам АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ Компьютерлік технология кафедрасы LINUX ОПЕРАЦИЯЛЫҚ ЖҮЙЕСІ 5В070400 Есептеу техникасы және бағдарламалық қамтамасыз ету

More information

Қазақстан Республикасының Білім және ғылым министрлігі. С. Торайғыров атындағы Павлодар мемлекеттік университеті

Қазақстан Республикасының Білім және ғылым министрлігі. С. Торайғыров атындағы Павлодар мемлекеттік университеті Пән бағдарламасының (SYLLABUS) титулдық парағы Нысан ПМУ ҰС Н 7.18.4/19 Қазақстан Республикасының Білім және ғылым министрлігі С. Торайғыров атындағы Павлодар мемлекеттік университеті Информатика және

More information

*Компьютерлік желілер. Электронды пошта қызметі. Әлеуметтік желілер. Кыдырбекова Айғаным Адлетовна БЖ-515

*Компьютерлік желілер. Электронды пошта қызметі. Әлеуметтік желілер. Кыдырбекова Айғаным Адлетовна БЖ-515 *Компьютерлік желілер. Электронды пошта қызметі. Әлеуметтік желілер Кыдырбекова Айғаным Адлетовна БЖ-515 Компьютерлік желілер (Computer NetWork, net - желі, work жұмыс) берілген ереже-лерге сәйкес компьютерлер

More information

Операциялы қ жүйелер, түрлері, қ ызметі. ан: Муратов Адилет

Операциялы қ жүйелер, түрлері, қ ызметі. ан: Муратов Адилет Операциялы қ жүйелер, түрлері, қ ызметі. Орында ғ ан: Муратов Адилет Бағдарламалы қ қамтамасыздандыру (Б Қ ) белгілі бір типтегі есептеуіш машиналар кластарына арналған, оны ң аппаратта қ құралдарыны ң

More information

Дәрістер тезистері 1-Дәріс Тақырыбы: Ақпарат, адам және компьютер. Ақпаратты кодтау. Санау жүйесі.

Дәрістер тезистері 1-Дәріс Тақырыбы: Ақпарат, адам және компьютер. Ақпаратты кодтау. Санау жүйесі. Дәрістер тезистері 1-Дәріс Тақырыбы: Ақпарат, адам және компьютер. Ақпаратты кодтау. Санау жүйесі. Мақсаты: Информатика жайлы түсіндіру Информатика мен информацияның міндеттері. Ақпаратты кодтау. Санау

More information

Операциялық жүйелер ОРЫНДАҒАН : РАХИМБЕКОВА А.С. ТЕКСЕРГЕН : ЖАКСЫГУЛОВА Д.Д. ТОП : БЛ-509

Операциялық жүйелер ОРЫНДАҒАН : РАХИМБЕКОВА А.С. ТЕКСЕРГЕН : ЖАКСЫГУЛОВА Д.Д. ТОП : БЛ-509 Семей қаласындағы Шәкәрім атындағы мемлекеттік университеті. Аграрлық факультет. Операциялық жүйелер ОРЫНДАҒАН : РАХИМБЕКОВА А.С. ТЕКСЕРГЕН : ЖАКСЫГУЛОВА Д.Д. ТОП : БЛ-509 Жоспар : І.Кіріспе ІІ.Негізгі

More information

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Семей қаласының ШӘКӘРІМ атындағы МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ ПОӘК

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Семей қаласының ШӘКӘРІМ атындағы МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ ПОӘК ПОӘК 042-18.39.1.119/01-2013 10.09.2013 ж. 1 басылым 107 беттің 1 ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Семей қаласының ШӘКӘРІМ атындағы МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ 3 деңгейдегі СМК құжаты ПОӘК

More information

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ. Қ.И.Сəтбаев атындағы Қазақ ұлттық техникалық университеті. Ақпараттық технологиялар институты

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ. Қ.И.Сəтбаев атындағы Қазақ ұлттық техникалық университеті. Ақпараттық технологиялар институты ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ Қ.И.Сəтбаев атындағы Қазақ ұлттық техникалық университеті Ақпараттық технологиялар институты Желілер мен жүйелердің программалық қамтамасы кафедрасы

More information

KAZ: CAREC Corridors 1 and 6 Connector Road (Aktobe Makat) Improvement Project

KAZ: CAREC Corridors 1 and 6 Connector Road (Aktobe Makat) Improvement Project Resettlement Plan Project Number: 48424-002 October 2015 KAZ: CAREC Corridors 1 and 6 Connector Road (Aktobe Makat) Improvement Project Prepared by the Ministry of Investments and Development, Republic

More information

ЕСЕПТЕУ ТЕХНИКАЛАРЫНЫҢ АППАРАТТЫҚ ҚҰРЫЛЫМЫ.

ЕСЕПТЕУ ТЕХНИКАЛАРЫНЫҢ АППАРАТТЫҚ ҚҰРЫЛЫМЫ. ЕСЕПТЕУ ТЕХНИКАЛАРЫНЫҢ АППАРАТТЫҚ ҚҰРЫЛЫМЫ. КОМПЬЮТЕРДІҢ ШЫҒУ ТАРИХЫ Есептеу қажеттілігі адамзатта әлдеқашан пайда болды. Ал, өркениет дамыған сайын есептеу қажеттілігі арта түсіп, есептеудің механикаландыру

More information

Қазақ стан Республикасы Білім және ғылым министрлігі Семей қаласыны ң Шәкәрім атындағы мемлекеттік университеті.

Қазақ стан Республикасы Білім және ғылым министрлігі Семей қаласыны ң Шәкәрім атындағы мемлекеттік университеті. Қазақ стан Республикасы Білім және ғылым министрлігі Семей қаласыны ң Шәкәрім атындағы мемлекеттік университеті. Тақырыбы:Компьютерлік желілер. Орындаған:Кенжегалиева А.Р Тобы : Тж- 505 Тексерген:Жаксыгулова

More information

«BLACKBERRY» БАҒДАРЛАМАЛЫҚ ҚАМТАМАСЫЗДАНДЫРУДЫ ҚОЛДАНЫЛУЫНА ЛИЦЕНЗИОНДЫҚ КЕЛІСІМ

«BLACKBERRY» БАҒДАРЛАМАЛЫҚ ҚАМТАМАСЫЗДАНДЫРУДЫ ҚОЛДАНЫЛУЫНА ЛИЦЕНЗИОНДЫҚ КЕЛІСІМ «BLACKBERRY» БАҒДАРЛАМАЛЫҚ ҚАМТАМАСЫЗДАНДЫРУДЫ ҚОЛДАНЫЛУЫНА ЛИЦЕНЗИОНДЫҚ КЕЛІСІМ ӨТІНІШ, БАҒДАРЛАМАЛЫҚ ҚАМТАМАСЫЗДАНДЫРУДЫ ОРНАТУ НЕМЕСЕ ҚОЛДАНУ АЛДЫНДА МЫНА ҚҰЖАТТЫ ТОЛЫҒЫМЕН МҰҚИЯТ ОҚЫП ШЫҒУЛАРЫҢЫЗДЫ

More information

Тақырыбы: Операциялы қ жүйелер, түрлері, қызметі.

Тақырыбы: Операциялы қ жүйелер, түрлері, қызметі. Семей қаласыны ң Шәкәрім атындағы мемлекеттік университеті СӨЖ Тақырыбы: Операциялы қ жүйелер, түрлері, қызметі. Айнур Орындаған: Карамолдина БЛ-509 Операциялы қ жүйе дегеніміз компьютерді басқаруға арналған

More information

ЦИФРЛЫҚ АҚПАРАТТЫ ЕНГІЗУ ЖƏНЕ ӨҢДЕУ

ЦИФРЛЫҚ АҚПАРАТТЫ ЕНГІЗУ ЖƏНЕ ӨҢДЕУ КƏСІБИ БІЛІМ БЕРУ А.В. КУРИЛОВА, В.О. ОГАНЕСЯН ЦИФРЛЫҚ АҚПАРАТТЫ ЕНГІЗУ ЖƏНЕ ӨҢДЕУ ПРАКТИКУМ «Білім беруді дамытудың федералды институты» федералды мемлекеттік мекемесі «Цифрлық ақпаратты өңдеу шебері»

More information

Тақырыбы: Операциялық жүйелер және түрлері. Орындаған: Омирханова А.Е. Тексерген: Мейрамбек Ә.М. Семей, 2015 жыл

Тақырыбы: Операциялық жүйелер және түрлері. Орындаған: Омирханова А.Е. Тексерген: Мейрамбек Ә.М. Семей, 2015 жыл Тақырыбы: Операциялық жүйелер және түрлері СӨЖ Орындаған: Омирханова А.Е. Тексерген: Мейрамбек Ә.М. Семей, 2015 жыл Жоспар: I. Кіріспе Операциялық жүйелер II. Негізгі бөлім 1.Операциялық жүйенің даму тарихы

More information

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Ш.ЕСЕНОВ АТЫНДАҒЫ КАСПИЙ МЕМЛЕКЕТТІК ТЕХНОЛОГИЯЛАР ЖӘНЕ ИНЖИНИРИНГ УНИВЕРСИТЕТІ

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Ш.ЕСЕНОВ АТЫНДАҒЫ КАСПИЙ МЕМЛЕКЕТТІК ТЕХНОЛОГИЯЛАР ЖӘНЕ ИНЖИНИРИНГ УНИВЕРСИТЕТІ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Ш.ЕСЕНОВ АТЫНДАҒЫ КАСПИЙ МЕМЛЕКЕТТІК ТЕХНОЛОГИЯЛАР ЖӘНЕ ИНЖИНИРИНГ УНИВЕРСИТЕТІ Э.А.АБДЫКЕРИМОВА КОМПЬЮТЕРЛІК ГРАФИКА ЖӘНЕ МОДЕЛЬДЕУ КУРСЫНАН ЛАБОРАТОРИЯЛЫҚ

More information

CITY LIFE STYLE O ZZIO DESIGN CO LLECTIO N

CITY LIFE STYLE O ZZIO DESIGN CO LLECTIO N S M A R T L I V I N G : МНО ГО Ф УНКЦИ О НАЛ ЬНЫ Е И O ZZIO DESIGN CO LLECTIO N IN LESS SPACE THERE IS MORE LIFE / LA FILOSOFIA OZZIO DEL VIVERE CONTEMPORANEO APPRODA AD UN NUOVO STADIO EVOLUTIVO. SOLUZIONI

More information

Дәрістік сабақтардың конспектілері

Дәрістік сабақтардың конспектілері Дәрістік сабақтардың конспектілері Дәріс. 1. Кіріспе 1. Оқу тақырыбы мен пәннің құрылымы, оның мамандықтың басқа пәндермен байланысы. 2. Компьютерлік тораптардың қысқаша даму тарихы 3. Компьютерлік тораптардың

More information

TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project

TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Resettlement Plan Project July 2017 TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Prepared by Ministry of Transportation of the Republic of Tajikistan for the Asian Development Bank.

More information

1)Кіріспе 2)Негізгі бөлім 3)Қорытыңды 4)Пайдаланылған әдебиеттер

1)Кіріспе 2)Негізгі бөлім 3)Қорытыңды 4)Пайдаланылған әдебиеттер 1)Кіріспе 2)Негізгі бөлім 3)Қорытыңды 4)Пайдаланылған әдебиеттер Компьютердің жүйелік блогындa ішкі, сыртқы құрылғылармен байланыс жасауға арналған арнайы тapaқшa қосқъш түріндегі порттары бар. Олар тізбекті

More information

Компанияда адам құқықтарын жүзеге асыру Əрекет жоспары 1

Компанияда адам құқықтарын жүзеге асыру Əрекет жоспары 1 Қазақстан, Алматы, 050040, Абай п-ті, 157, оф. 44 тел./факс: +7 727 394 3660, 394 3694 info@lprc.kz, www.lprc.kz ДИОН. Р Тəуелсiз сарапшы, Лондон университетi Славян жəне Шығыс - Еуропа зерттеу мектебiнiң

More information

Серіктестік шарты. заңды тұлға

Серіктестік шарты. заңды тұлға «ЛР РУС» ЖШҚ-ның Қазақстан Республикасындағы филиалының Бизнесті жүргізу саясаты 1. Негізгі ұғымдар 1.1. Серіктес «ЛР РУС» ЖШҚ-ның Қазақстан Республикасындағы филиалымен серіктес шартына отырған тұлға

More information

Бағдарламалы жасақтама. Операциялы қ жүйелер.

Бағдарламалы жасақтама. Операциялы қ жүйелер. Бағдарламалы қ жасақтама. Операциялы қ жүйелер. Жоспар: Бағдарламалы қ жасақтама ұғымы; Жүйелік БЖ Аспапты қ БЖ Қолданбалы БЖ және түрлері. ОЖ және оны ң қ ызметі, интерфейсі. Бағдарлама магниттік тасымалдаушыда

More information

Компьютерлік вирустар және антивирустар. ВС-503 Жакуляева М.Б.

Компьютерлік вирустар және антивирустар. ВС-503 Жакуляева М.Б. Компьютерлік вирустар және антивирустар ВС-503 Жакуляева М.Б. Компьютерлiк вирустар дегенiмiз компьютерлiк жүйедегi және желiдегi әртүрлi объектiлерге залалын тигiзуге бейiм программалар. Вирустар компьютермен

More information

Қолданушының нұсқасы. GoGEAR. Көмектесу үшін әрдайым осындамын SA5DOT02 SA5DOT04 SA5DOT08

Қолданушының нұсқасы. GoGEAR. Көмектесу үшін әрдайым осындамын SA5DOT02 SA5DOT04 SA5DOT08 Көмектесу үшін әрдайым осындамын Өнімді мына жерде тіркеп, оған қолдау алыңыз: www.philips.com/welcome GoGEAR SA5DOT02 SA5DOT04 SA5DOT08 Қолданушының нұсқасы Мазмұндар кестесі 1 Маңызды қауіпсіздік ақпараты

More information

Жиынтық бағалауға арналған әдістемелік ұсыныстар. Информатика. 5 сынып

Жиынтық бағалауға арналған әдістемелік ұсыныстар. Информатика. 5 сынып Жиынтық бағалауға арналған әдістемелік ұсыныстар Информатика 5 сынып Әдістемелік ұсыныстар мұғалімге, 5-сынып білім алушыларына «Информатика» пәні бойынша жиынтық бағалауды жоспарлау, ұйымдастыру және

More information

1. Читаємо англійською

1. Читаємо англійською (інформаційний список літератури) Сьогодні для успішної роботи в будь-яких сферах та напрямах необхідне знання іноземної мови. Це корисне вміння дозволяє одержати доступ до іноземних сайтів і друкованих

More information

Операциялық жүйе, қыс. ОЖ - компьютерді басқаруға арналған және қолданбалы программалармен байланысы бар нақты программа.

Операциялық жүйе, қыс. ОЖ - компьютерді басқаруға арналған және қолданбалы программалармен байланысы бар нақты программа. ОПЕРАЦИЯЛЫҚ ЖҮЙЕЛЕР Операциялық жүйе, қыс. ОЖ - компьютерді басқаруға арналған және қолданбалы программалармен байланысы бар нақты программа. Операциялық жүйе компьютер құрылғыларының үздіксіз жұмыс істеуін

More information

Нұсқаулық. Нұсқаулық тарауына өту үшін төмендегі қойындылардың бірін таңдаңыз. ImageBrowser EX. CameraWindow

Нұсқаулық. Нұсқаулық тарауына өту үшін төмендегі қойындылардың бірін таңдаңыз. ImageBrowser EX. CameraWindow Нұсқаулық Нұсқаулық тарауына өту үшін төмендегі қойындылардың бірін таңдаңыз. ImageBrowser EX CameraWindow EOS камерасының пайдаланушылары: бұл әрекеттер үшін CameraWindow бағдарламасының орнына EOS Utility

More information

«ЕУРАЗИЯЛЫҚ БАНК» АКЦИОНЕРЛІК ҚОҒАМЫ БІРІНШІ ОБЛИГАЦИЯЛЫҚ БАҒДАРЛАМАСЫНЫҢ ШЫҒАРЫЛЫМ ПРОСПЕКТІСІНЕ 13 ӨЗГЕРІСТЕР МЕН ТОЛЫҚТЫРУЛАР

«ЕУРАЗИЯЛЫҚ БАНК» АКЦИОНЕРЛІК ҚОҒАМЫ БІРІНШІ ОБЛИГАЦИЯЛЫҚ БАҒДАРЛАМАСЫНЫҢ ШЫҒАРЫЛЫМ ПРОСПЕКТІСІНЕ 13 ӨЗГЕРІСТЕР МЕН ТОЛЫҚТЫРУЛАР «ЕУРАЗИЯЛЫҚ БАНК» АКЦИОНЕРЛІК ҚОҒАМЫ БІРІНШІ ОБЛИГАЦИЯЛЫҚ БАҒДАРЛАМАСЫНЫҢ ШЫҒАРЫЛЫМ ПРОСПЕКТІСІНЕ 13 ӨЗГЕРІСТЕР МЕН ТОЛЫҚТЫРУЛАР («ЕУРАЗИЯЛЫҚ БАНК» АҚ) «Еуразиялық банк» АҚ Директорлар кеңесінің шешімімен

More information

Компьютерлік вирус здігінен к б еюге а білетті арнайы программалар. Ол компьютер жадысында талатын программалар мен файлдарды

Компьютерлік вирус здігінен к б еюге а білетті арнайы программалар. Ол компьютер жадысында талатын программалар мен файлдарды Вирус Усейін Ф Компьютерлік вирус - өздігінен көбеюге қабілетті арнайы программалар. Ол компьютер жадысында сақталатын программалар мен файлдарды құртуы, жоюы және компьютерді істен шығаруы мүмкін. Компьютерлік

More information

TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Additional Financing

TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Additional Financing Resettlement Plan Project Number: 49042-005 February 2018 TAJ: CAREC Corridors 2, 5, and 6 (Dushanbe Kurgonteppa) Road Project Additional Financing Prepared by the Ministry of Transport. for the Asian

More information

«Информатика» пәнінен тоқсандық жиынтық бағалау спецификациясы. 5-сынып

«Информатика» пәнінен тоқсандық жиынтық бағалау спецификациясы. 5-сынып «Информатика» пәнінен тоқсандық жиынтық бағалау спецификациясы 5-сынып МАЗМҰНЫ 1. Тоқсан бойынша жиынтық бағалаудың мақсаты... 3 2. Тоқсан бойынша жиынтық бағалаудың мазмұнын анықтайтын құжаттар... 3 3.

More information

Š A F R a N P N R U E A G A Š M N L N T Č I I C I I E Č Ú N N L T Z A A Č I Š I N T N A I. Kölner Dom UNESCO ДОСТОПРИМЕЧАТЕЛЬНОСТИ WORLD HERITAGE

Š A F R a N P N R U E A G A Š M N L N T Č I I C I I E Č Ú N N L T Z A A Č I Š I N T N A I. Kölner Dom UNESCO ДОСТОПРИМЕЧАТЕЛЬНОСТИ WORLD HERITAGE Š A F R a N P N R U E A G A Š M N L N T Č I I C I I E Č Ú N N L T Z A A Č I Š I N T N A I A N A 1 Základná škola, Kúpeľná 2, Prešov UNESCO Kölner Dom WORLD HERITAGE ДОСТОПРИМЕЧАТЕЛЬНОСТИ Hans Christian

More information

/THE POSSIBILITIES MULTIPLY

/THE POSSIBILITIES MULTIPLY EXTEND/ENLARGE Atlas Plan is the new brand from Atlas Concorde conceived to enhance design projects and reach unprecedented levels of excellence. The technical performance of porcelain stoneware is merged

More information

Z(7 2t- qqq h iz: KO W 2 DBE DENVER THE MILE HIGH CITY. H-Iii. (i3cs QC71 SHEET. -\ - -io CAV%O 3]? I 14 /() Ou) L4tVi& 7oz! ( tf/ fc/24l,f/j.

Z(7 2t- qqq h iz: KO W 2 DBE DENVER THE MILE HIGH CITY. H-Iii. (i3cs QC71 SHEET. -\ - -io CAV%O 3]? I 14 /() Ou) L4tVi& 7oz! ( tf/ fc/24l,f/j. PRE-BID CONFERENCE SIGN-IN SHEET Time: 9:00am Project name: Name 16th Street Mall Renovation Company Design/Build Project Phone PlacelRoom: Webb E-Mail Building, Conference room 1.B.6 Certified Firm? Please

More information

Бұл нұсқаулық көптеген модельдерге бірдей болатын мүмкіндіктерін сипаттайды. Кейбір мүмкіндіктер компьютеріңізде жұмыс істемеуі мүмкін.

Бұл нұсқаулық көптеген модельдерге бірдей болатын мүмкіндіктерін сипаттайды. Кейбір мүмкіндіктер компьютеріңізде жұмыс істемеуі мүмкін. АЛҒАШҚЫ ЖҰМЫС Алғашқы жұмыс Copyright 2012 Hewlett-Packard Development Company, L.P. AMD жəне AMD Catalyst Advanced Micro Devices, Inc. корпорациясының сауда белгілері. Bluetooth өз меншік иесінің сауда

More information

The block of flats is situated in the southern part of the city of Sofia, in close proximity to Vitosha Mountain. The building is unique for its

The block of flats is situated in the southern part of the city of Sofia, in close proximity to Vitosha Mountain. The building is unique for its За да разгледате проекта в интерактивен режим моля свалете приложението ScanArchitect от След стартиране ще имате 3 избора за разглеждане на проекта. В първия режим може да насочите телефона си към картинката,

More information

Use of Photogrammetric Methods at the Creation of a Cadastre Map. Three-Dimensional Model of the Cadastre Map

Use of Photogrammetric Methods at the Creation of a Cadastre Map. Three-Dimensional Model of the Cadastre Map Use of Photogrammetric Methods at the Creation of a Cadastre Map. Three-Dimensional Model of the Cadastre Map Key words: 3d cadastre, laser scaning, cadastral map, photogrammetry SUMMARY On 25.04.2000

More information

CHARLES A. VON STEIN, INC.

CHARLES A. VON STEIN, INC. C V A S CHARLES A. VON STEIN, INC. COMMERCIAL PROPERTY MANAGEMENT, SALES AND LEASING SPECIALISTS SINCE 1963 BUILDING FACTS Building Square Footage Leasable Building Square Footage Size Executive Suites

More information

CONTEMPORARY STRATEGY ANALYSIS

CONTEMPORARY STRATEGY ANALYSIS CONTEMPORARY STRATEGY ANALYSIS TEXT AND CASES EIGHTH EDITION ROBERT M. GRANT ЗАМАНАУИ СТРАТЕГИЯЛЫҚ ТАЛДАУ II том 8-БАСЫЛЫМ РОБЕРТ M. ГРАНТ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ РОБЕРТ М.

More information

Р.бр. ЈНМВ: 1.1.2/ ИЗМЕЊЕНИ ОБРАЗАЦ ПОНУДЕ Материјал за одржавање хигијене од хартије и другиматеријал

Р.бр. ЈНМВ: 1.1.2/ ИЗМЕЊЕНИ ОБРАЗАЦ ПОНУДЕ Материјал за одржавање хигијене од хартије и другиматеријал Р.бр. ЈНМВ: 1.1.2/16 6.1. ИЗМЕЊЕНИ ОБРАЗАЦ ПОНУДЕ Материјал за одржавање хигијене од хартије и другиматеријал Понуду дајем (означити начин давања понуде): а) самостално б) заједничка понуда в) понуда са

More information

P O U NDBRID GE GREE N

P O U NDBRID GE GREE N P O U NDBRID GE GREE N POUNDBRIDGE GREEN IS AN EXQUISITE DEVELOPMENT OF SUPERBLY DETAILED HOMES, SITUATED JUST OFF THE HIGHLY SOUGHT AFTER OLD BELFAST ROAD IN SAINTFIELD. With a choice of outstanding modern

More information

Using GIS To Manage Surface Ownership and Right-Of-Way

Using GIS To Manage Surface Ownership and Right-Of-Way Using GIS To Manage Surface Ownership and Right-Of-Way Jeff Bute - Sr. Land Maintenance Rep. / GIS Analyst Jeff was formerly a Property Tax Right of Way and Claims field agent for the company. Now he uses

More information

MODERN MAPPING TECHNOLOGIES OF CADASTRAL WORKS SOFTWARE

MODERN MAPPING TECHNOLOGIES OF CADASTRAL WORKS SOFTWARE Серія «геологія географія екологія», випуск 41 21. Социология: Энциклопедия [Электронный ресурс] / Сост. А. А. Грицанов, В. Л. Абушенко, Г. М. Евелькин, Г. Н. Соколова, О. В. Терещенко. 2003. Режим доступу

More information

MRI Commercial Management For Web Operational Training Guide Version 4.2

MRI Commercial Management For Web Operational Training Guide Version 4.2 MRI Commercial Management For Web Operational Training Guide Version 4.2 2012 MRI Software LLC. Any unauthorized use or reproduction of this document is strictly prohibited. All Rights Reserved. 2012 MRI

More information

Пайдаланушы нұсқаулығы

Пайдаланушы нұсқаулығы Пайдаланушы нұсқаулығы Copyright 2012 Hewlett-Packard Development Company, L.P. Bluetooth өз меншік иесінің сауда белгісі болып табылады жəне оны Hewlett- Packard компаниясы лицензия бойынша пайдаланады.

More information

The Bulgarian St. Stefan church in Istanbul: an architectural project from 1890s and its multifunctional application in Bulgaria

The Bulgarian St. Stefan church in Istanbul: an architectural project from 1890s and its multifunctional application in Bulgaria The Bulgarian St. Stefan church in Istanbul: an architectural project from 1890s and its multifunctional application in Bulgaria Blagovesta Ivanova 1 Abstract The paper analyses and compares some architectural

More information

ON ТНЕ RESTITUTION AND COMPENSATION OF ТНЕ PROPERTIES OF SOME EX-PROPRIETORS

ON ТНЕ RESTITUTION AND COMPENSATION OF ТНЕ PROPERTIES OF SOME EX-PROPRIETORS ALBANIAN сеягне FOR FOREIGN "INVESTMENT PROMOTION TEL/FAX:(355) 42 27865 ТЕL:(ЗS5) 42 28439 Law n.7698, dated 04.15.1993 ON ТНЕ RESTITUTION AND COMPENSATION OF ТНЕ PROPERTIES OF SOME EX-PROPRIETORS Based

More information

Abila MIP Fund Accounting TM. Encumbrances STUDENT WORKBOOK ABILA LEARNING SERVICES. Important Notice:

Abila MIP Fund Accounting TM. Encumbrances STUDENT WORKBOOK ABILA LEARNING SERVICES. Important Notice: Abila MIP Fund Accounting TM Encumbrances STUDENT WORKBOOK ABILA LEARNING SERVICES Important Notice: Authentic Abila MIP Fund Accounting TM training guides display a holographic image on the front cover.

More information

Balticlab iclab Balt

Balticlab iclab Balt Balticlab Balticlab TABLE OF CONTENTS Foreword Manifesto Estonia Finland Germany Latvia Lithuania Norway Poland Russia Sweden Ukraine Belarus Meet some of our mentors and speakers 4 6 11 23 29 33 49 69

More information

ecoinomic.net can present to the institutional investors as а guarantee for their investments. Р2Р alternative, popular in the cryptosphere, is currently not applicaыe in the loan industry. According to

More information

Yarmouth County Registry of Deeds

Yarmouth County Registry of Deeds Record Type Volume Dates Indexes Reel Index 1A 1774-1792 18776 not at Archives Index 2 1785-1817 18776 not at Archives Index 3 1817-1832 18776 not at Archives Index 4 1832-1846 18776 not at Archives Index

More information

RPSV4 Users ORPTS Regional Directors and Managers ORPTS Customer Relationship Managers ORPTS Regional V4 Support Staff

RPSV4 Users ORPTS Regional Directors and Managers ORPTS Customer Relationship Managers ORPTS Regional V4 Support Staff TO: FROM: RPSV4 Users ORPTS Regional Directors and Managers ORPTS Customer Relationship Managers ORPTS Regional V4 Support Staff Michael Griffen, RPS Support Group DATE: December 5 2016 SUBJECT: RPSV4

More information

Baltimore County Public Schools Dogwood Elementary School Capacity Relief Study. Meeting 4 Option Analysis

Baltimore County Public Schools Dogwood Elementary School Capacity Relief Study. Meeting 4 Option Analysis ogwood lementary School Capacity elief Study eeting 4 Option nalysis evised: 03/19/2019 2018-19 Capacity, 2018-19 Official nrollment, Live ttend Counts, and Building Utilizations The following are school

More information

Section 8 Voucher Tracking

Section 8 Voucher Tracking Section 8 Voucher Tracking Two new Voucher tabs have been added to the Section 8 Manager module, next to Voucher Snapshot: Voucher Leased and Voucher Activity, for Voucher Forecasting. VMS Report Groups

More information

Residential Housing in Kharkov (Ukraine),

Residential Housing in Kharkov (Ukraine), Residential Housing in Kharkov (Ukraine), 1920-1935 CATHERINE DIDENKO, ALEXANDER BOURYAK, NADIIA ANTONENKO Abstract This paper explores the evolution of residential housing approaches in Kharkov, the first

More information

Revenue. Major part of ULB's revenue comes by means of:

Revenue. Major part of ULB's revenue comes by means of: Revenue Major part of ULB's revenue comes by means of: Collecting property tax Issuing trade licenses Alloting its land and buildings to carry out business Collecting usage charges and service fees for

More information

ADDENDUM #2_RFP # Computer Mass Appraisal (CAMA) Software for HC Assessor Department

ADDENDUM #2_RFP # Computer Mass Appraisal (CAMA) Software for HC Assessor Department Horry County Government PROCUREMENT DEPARTMENT www.horrycounty.org Horry County Office of Procurement 3230 Hwy. 319 E. Conway, South Carolina 29526 Phone 843.915.5380 Fax 843.365.9861 TO: FROM: ALL INTERESTED

More information

By the end of this chapter, you will be able to: Inquire on Physical and Financial information of any asset.

By the end of this chapter, you will be able to: Inquire on Physical and Financial information of any asset. Chapter 9 Asset Inquiry Objectives By the end of this chapter, you will be able to: Describe the asset inquiry process. Inquire on Physical and Financial information of any asset. Overview PeopleSoft Asset

More information

Features Guide. Enhancements. Mortgage Calculators VERSION 7. May 2008

Features Guide. Enhancements. Mortgage Calculators VERSION 7. May 2008 Features Guide VERSION 7 May 2008 Copyright 2002-2008 SuperTech Software All rights reserved. Printed in Australia. Enhancements This document describes new features and enhancements in POSH. Mortgage

More information

Social Monitoring Report

Social Monitoring Report Social Monitoring Report Second Internal Land Acquisition Monitoring Review Report June 2011 KAZ: Multitranche Financing Facility CAREC Transport Corridor I (Zhambyl Oblast Section) [Western Europe Western

More information

Uniform Collateral Data Portal (UCDP) General User Guide October 2017

Uniform Collateral Data Portal (UCDP) General User Guide October 2017 Uniform Collateral Data Portal (UCDP) General User Guide October 2017 direction of their regulator, the Federal Housing Finance Agency. 1 of 100 direction of their regulator, the Federal Housing Finance

More information

HOW TO CREATE AN APPRAISAL

HOW TO CREATE AN APPRAISAL Page 1 7/19/2005 IMAGEsoft s Appraise Link Instruction Manual HOW TO CREATE AN APPRAISAL Start at the MAIN MENU. Click on APPRAISALS. The WORK WITH APPRAISALS screen appears. This screen stores your appraisals,

More information

41/2/9 Student Affairs Programs and Services General Correspondence, Box 1:

41/2/9 Student Affairs Programs and Services General Correspondence, Box 1: Record Series Number The materials listed in this document are available for research at the University of Illinois Archives. For more information, email illiarch@illinois.edu or search http://www.library.illinois.edu/archives/archon

More information

Directorate of Survey and Mapping NAMIBIA. Cadastral Information System. Vehupisa Kasuko Tjatindi Surveyor Directorate of Survey and Mapping NAMIBIA

Directorate of Survey and Mapping NAMIBIA. Cadastral Information System. Vehupisa Kasuko Tjatindi Surveyor Directorate of Survey and Mapping NAMIBIA Vehupisa Kasuko Tjatindi Directorate of Survey and Mapping NAMIBIA Tel: +64 61 965000 Directorate of Survey and Mapping NAMIBIA Cadastral Information System Introduction Over the past few decades cadastral

More information

Listing Load Manual. for. Staff

Listing Load Manual. for. Staff Listing Load Manual for Staff 1 Listing Load Listing Load is the module that allows you to add a new listing, change listing information and make contractual changes such as status or price at any time

More information

Property Online Provincial Query User Agreement Instructions. Filling Out the Agreement

Property Online Provincial Query User Agreement Instructions. Filling Out the Agreement Property Online Provincial Query User Agreement Instructions This agreement is for use of Property Online, provincial query access allows provincial government users to query land ownership and related

More information

Questions on Carnelian Creek Conservation Corridor Project (FA01)

Questions on Carnelian Creek Conservation Corridor Project (FA01) MMAUM: o: From: essard-ams utdoor Heritage Council Minnesota and rust ate: July 27, 2016 e: Questions on Carnelian Creek Conservation Corridor Project (FA01) Below please find responses to a number of

More information

Property Online Query User Agreement Instructions. Filling Out the Agreement

Property Online Query User Agreement Instructions. Filling Out the Agreement Property Online Query User Agreement Instructions This agreement is for use of Property Online, a monthly subscription service. Query access allows users to query land ownership and related property information.

More information

CFPB Implementation of Parcels Provision in HMDA Under Dodd-Frank

CFPB Implementation of Parcels Provision in HMDA Under Dodd-Frank CFPB Implementation of Parcels Provision in HMDA Under Dodd-Frank Land ownership is the foundation of the financial, legal, and real estate systems in our society Parcel Data vs. Census Data + Census data

More information

IAS 4.0 Cost & Income Valuation Guide

IAS 4.0 Cost & Income Valuation Guide IAS 4.0 Cost & Income Valuation Guide TABLE OF CONTENTS PREFACE... 1 ASSESSMENT ADMINISTRATION (AA) SCREENS RELATED TO VALUATION... 2 AA44 Jurisdiction Update...2 Overview... 2 To Query an Assessment Jurisdiction

More information

ENERGY EFFICIENCY IN HOUSING SECTOR OF UKRAINE

ENERGY EFFICIENCY IN HOUSING SECTOR OF UKRAINE MINISTRY OF REGIONAL DEVELOPMENT, CONSTRUCTION, HOUSING AND COMMUNAL ECONOMY OF UKRAINE ENERGY EFFICIENCY IN HOUSING SECTOR OF UKRAINE Natalia Oliinyk Director of Department for Strategy in Reforming and

More information

Step-by-Step Guide for Configuring and Implementing SAP REFX

Step-by-Step Guide for Configuring and Implementing SAP REFX CHAPTER 10 Step-by-Step Guide for Configuring and Implementing SAP REFX In this chapter we will provide a complete business scenario for REFX, with a step-by-step guide for configuring the system. We will

More information

ARGUS Valuation Capitalisation. v Change History

ARGUS Valuation Capitalisation. v Change History ARGUS Valuation Capitalisation v2.50.010 Change History Last Updated: 10/11/2010 While ARGUS endeavors to correct known issues, software is provided "as is" without warranty of any kind, express or implied.

More information

OQOOD Off-Plan Property Management Solution

OQOOD Off-Plan Property Management Solution Emirates Real Estate Solutions (ERES) OQOOD Off-Plan Property Management Solution Property Developers Guide Version 1.1 http://www.oqood.ae/ Copyrights Emirates Real Estate Solutions (ERES) 2010. All Rights

More information

Robin Rajack World Bank April 2010

Robin Rajack World Bank April 2010 Annual World Bank Conference on Land Policy and Administration Land in the Bank s new Urban Strategy Robin Rajack World Bank April 2010 Will the World Bank s New Urban Strategy please stand up What has

More information

Using ArcGIS Server for National Property Information System

Using ArcGIS Server for National Property Information System Using ArcGIS Server for National Property Information System Shota Chachkhunashvili (National Agency of Public Registry, Georgia) Mikheil Tsiklauri (Geographic, Georgia) San Diego, 2008 About us National

More information

3. Los Angeles County Department of Public Works Attn: Gail Farber, Director of Public Works 900 South Fremont Avenue Alhambra, CA

3. Los Angeles County Department of Public Works Attn: Gail Farber, Director of Public Works 900 South Fremont Avenue Alhambra, CA ACCELERATED REVIEW PROCESS - B Office of the City Engineer Los Angeles, California To the Honorable Council Of the City of Los Angeles Honorable Members: JUN 2 0 2014 C. D. No. 11 SUBJECT: Quitclaim of

More information

Пайдаланушы нұсқаулығы

Пайдаланушы нұсқаулығы Пайдаланушы нұсқаулығы Copyright 2015 HP Development Company, L.P. AMD белгісі Advanced Micro Devices, Inc. корпорациясының сауда белгісі. Bluetooth өз меншік иесінің сауда белгісі болып табылады және

More information

HOUSE RULES HUD Multifamily FASTForms Description As of 8/11/2018

HOUSE RULES HUD Multifamily FASTForms Description As of 8/11/2018 RBD does not act as a legal advisor nor as a regulatory governing agency. The recipient should understand that any materials or comments contained herein are not designed for, nor should be relied upon

More information

Welcome. Introductions Nature Expectations Agenda Timing. Home Sweet Home 2

Welcome. Introductions Nature Expectations Agenda Timing. Home Sweet Home 2 Welcome Introductions Nature Expectations Agenda Timing Home Sweet Home 2 Objectives Role of Relocation Program Role of Housing Programs Budgeting Research Neighborhood Rent vs. Buy Decision Making Rental

More information

Бұл нұсқаулық көптеген модельдерге бірдей болатын мүмкіндіктерін сипаттайды. Кейбір мүмкіндіктер компьютеріңізде жұмыс істемеуі мүмкін.

Бұл нұсқаулық көптеген модельдерге бірдей болатын мүмкіндіктерін сипаттайды. Кейбір мүмкіндіктер компьютеріңізде жұмыс істемеуі мүмкін. Алғашқы жұмыс Шағын Copyright 2010 Hewlett-Packard Development Company, L.P. Bluetooth белгісі Hewlett-Packard Company компаниясының лицензия бойынша пайдаланатын сəйкес иесінің сауда белгісі. Windows

More information

1 MLS Settings Glossary

1 MLS Settings Glossary 1 MLS Settings Glossary Association vs MLS... 2 Broker Load... 2 Collection... 2 Dashboard... 2 Export... 3 Fallthrough Date... 3 Geocode... 3 Incomplete Listing... 3 Marketing Name... 3 MLS Datashare...

More information

Home Energy Labeling in Colorado. Christian Williss Director of Programs and Initiatives

Home Energy Labeling in Colorado. Christian Williss Director of Programs and Initiatives Home Energy Labeling in Colorado Christian Williss Director of Programs and Initiatives DEPARTMENT MISSION STATEMENT The CEO s mission is to improve the effective use of all of Colorado's energy resources

More information

Intel Realsense D435 3D Active IR Stereo Depth Camera

Intel Realsense D435 3D Active IR Stereo Depth Camera Intel Realsense D435 3D Active IR Stereo Depth Camera System report by David Le Gac May 2018 2018 by System Plus Consulting Intel RealSense D435 1 Table of Contents o Executive Summary o Main Chipset o

More information

F&I Product Rating and Contracting

F&I Product Rating and Contracting F&I Prouct Rating an Contracting F&I Prouct Rating an Contracting helps the F&I Manager accurately rate proucts an services within a eal. It also helps simplify contracting, reuce F&I income ajustments,

More information

Planning Application #: _\,-3_-_D---'-.\1~ S- Date Received: S f Zb ( \ 3> Fee Paid: 3Q94:. 00 Receipt #: ---L-17...,'1:...

Planning Application #: _\,-3_-_D---'-.\1~ S- Date Received: S f Zb ( \ 3> Fee Paid: 3Q94:. 00 Receipt #: ---L-17...,'1:... Planning Application #: _\,-3_-_D---'-.\1~ S- Date Received: S f Zb ( \ 3> Fee Paid: 3Q94:. 00 Receipt #: ---L-17...,'1:...o2"""S~7 PLANNING APPLICATION FORM Please complete the following application to

More information

Thank you for your interest in Lloyd Apartments! We look forward to your visit here. For your convenience, we have attached an Application to Lease.

Thank you for your interest in Lloyd Apartments! We look forward to your visit here. For your convenience, we have attached an Application to Lease. Dear Prospective Resident, Thank you for your interest in Lloyd Apartments! We look forward to your visit here. For your convenience, we have attached an Application to Lease. You may complete the attached

More information

ESTONIA Э С Т О Н І Я

ESTONIA Э С Т О Н І Я E E S T I V I R O E I S T L A N D I G A U N I J A E S T I J A E S T O N I A Э С Т О Н И Я Е С Т О Н І Я Э С Т О Н І Я 22 ANASTASSIA DRATŠOVA ANNE VETIK Anastassia is an audience development specialist

More information

User Guide and Training Manual

User Guide and Training Manual User Guide and Training Manual Version 2012 Table of Contents Introduction About This Manual... 1 Exercises... 1 Statement of Warranty and Disclaimer... 2 Training Files... 3 LOGON & Keyboard Objectives...

More information

PRIVATE PROVIDER PROGRAM General Information Rev

PRIVATE PROVIDER PROGRAM General Information Rev PRIVATE PROVIDER PROGRAM General Information Rev. 03-05-2018 The use of Private Providers is authorized by Florida Statute 553.791, Alternative Plans Review and Inspection. The City of Miami requires that

More information

Бұл нұсқаулықты пайдалану жолы: 1

Бұл нұсқаулықты пайдалану жолы: 1 Өнімнің қауіпсіздік нұсқаулығы 1 (HL-L2300DR / HL-L2340DWR / HL-L2360DNR / HL-L2365DWR / DCP-L2500DR / DCP-L2520DWR / DCP-L2540DNR / DCP-L2560DWR / MFC-L2700DNR / MFC-L2700DWR / MFC-L2720DWR / MFC-L2740DWR)

More information