ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ IBDataSet1. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° BOOKS_DataSet (свойство Name). Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… — DataBase = IBDataBase1 ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ — Transaction = IBTransaction1. Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ SelectSQL тСкст основного запроса: «select* from BOOKS». ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ свойства GeneratorField Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠΎΠ»Π΅, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ присваиваСтся Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΡΠ°ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. АктивируСм… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

— 23 ;

Π—Π°Π΄Π°Π½ΠΈΠ΅

Β· Π’ ΡΠΎΠΎΡ‚вСтствии с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ спроСктируйтС Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π»ΡŽΠ±Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ проСктирования Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ описания ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

1. Π’ Π‘Π£Π‘Π” InterBase 6.0/Firebird 1.5 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ спроСктированной Ρ€Π°Π½Π΅Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

1) Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°

2) Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ каскадноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ связанных ΠΏΠΎΠ»Π΅ΠΉ

3) Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² ΠΏΠΎΠ»Π΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°

4) Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

5) Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€

2. Π’ Π˜Π‘Π  Delphi создайтС клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π»ΡŽΠ±ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ (BDE, IBX, ADO ΠΈ Π΄Ρ€.) с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ поиска ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

1) Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€.

2) КаТдая ΠΊΠ½ΠΈΠ³Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π΄Π°Π½Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π΅.

3) Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π΅ издаСтся нСсколько ΠΊΠ½ΠΈΠ³.

4) КаТдая ΠΊΠ½ΠΈΠ³Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство страниц, Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Π°, Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚ΠΈΡ€Π°ΠΆΠ°.

5) КаТдая ΠΊΠ½ΠΈΠ³Π° Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈΠ»ΠΈ Π½Π° Ρ€ΡƒΠΊΠ°Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ читатСля.

6) ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ нСсколько ΠΊΠ½ΠΈΠ³.

7) ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Π°Π±ΠΎΠ½Π΅ΠΌΠ΅Π½Ρ‚Π°.

8) Имя читатСля Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ. НазваниС ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ.

9) Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ЀИО, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, адрСс. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ — Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π³ΠΎΡ€ΠΎΠ΄.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области:

— 23 ;

Рис. 1. ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π’Π°ΠΊ ΠΊΠ°ΠΊ каТдая ΠΊΠ½ΠΈΠ³Π° Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€ΡƒΠΊΠ°Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ читатСля, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ сущности «ΠšΠ½ΠΈΠ³Π°» ΠΈ «Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ» ΠΏΠΎ ΠΏΠΎΠ»ΡŽ «ID ΠΠ±ΠΎΠ½Π΅Π½Ρ‚Π°» связью Ρ‚ΠΈΠΏΠ° МногиС ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡ‚ΠΎΠΌ ΠΏΠΎΠ»Π΅, ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌΡΡ внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° «ΠšΠ½ΠΈΠ³ΠΈ», ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ записи, ΠΈΠ±ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ сразу нСсколько ΠΊΠ½ΠΈΠ³. Если это ΠΏΠΎΠ»Π΅ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ данная ΠΊΠ½ΠΈΠ³Π° Π½ΠΈ Π½Π°Ρ…одится Π½Π° Ρ€ΡƒΠΊΠ°Ρ… Ρƒ Ρ‡ΠΈΡ‚атСля, Π° Π½Π°Ρ…одится Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Π”ΠΎΠ±Π°Π²ΠΈΠΌ для сущности «ΠšΠ½ΠΈΠ³Π°» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство «Π”Π°Ρ‚Π° Π²Ρ‹Π΄Π°Ρ‡ΠΈ». ЗначСния этого поля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ NULL Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля «ID ΠΠ±ΠΎΠ½Π΅Π½Ρ‚Π°» Ρ‚Π°ΠΊ ΠΆΠ΅ равняСтся NULL.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. Бвойство «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ» сущности «ΠšΠ½ΠΈΠ³ΠΈ» ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свойства Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠ΅ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сдСлаСм свойство «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ» ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π²Π²Π΅Π΄Ρ‘ΠΌ для Π½Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство «ID Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°» ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ.

— 23 ;

Рис. 2. ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ОпишСм структуру ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π’Π°Π±Π»ΠΈΡ†Π° «ΠšΠ½ΠΈΠ³ΠΈ» (Books)

НаимСнованиС поля

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

ID ΠšΠ½ΠΈΠ³ΠΈ (ID_Books)

Π¦Π΅Π»ΠΎΠ΅ число

NOT NULL

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ

НаимСнованиС (Name)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (30)

NOT NULL

ID Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° (ID_Publishers)

Π¦Π΅Π»ΠΎΠ΅ число

NOT NULL

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ страниц (K_pages)

Π¦Π΅Π»ΠΎΠ΅ число

NOT NULL

Π’ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΏΠ»Ρ‘Ρ‚Π° (Cover)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (15)

NOT NULL

Π’ΠΈΡ€Π°ΠΆ (Tiraz)

Π¦Π΅Π»ΠΎΠ΅ число

NOT NULL

ID ΠΠ±ΠΎΠ½Π΅Π½Ρ‚Π° (ID_abonent)

Π¦Π΅Π»ΠΎΠ΅ число

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡

Π”Π°Ρ‚Π° Π²Ρ‹Π΄Π°Ρ‡ΠΈ (Date_issue)

Π”Π°Ρ‚Π°

Π’Π°Π±Π»ΠΈΡ†Π° «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°» (Publishers)

НаимСнованиС поля

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

ID Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° (ID_Publishers)

Π¦Π΅Π»ΠΎΠ΅ число

NOT NULL

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ

НазваниС (Name)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (20)

NOT NULL

Π“ΠΎΡ€ΠΎΠ΄ (City)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (20)

Π’Π°Π±Π»ΠΈΡ†Π° «Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ» (Readers)

НаимСнованиС поля

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

ID ΠΠ±ΠΎΠ½Π΅Π½Ρ‚Π° (ID_ abonent)

Π¦Π΅Π»ΠΎΠ΅ число

NOT NULL

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ

ЀИО (FIO)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (30)

NOT NULL

Π’Π΅Π»Π΅Ρ„ΠΎΠ½ (Telephone)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (10)

АдрСс (Address)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° (20)

NOT NULL

РСализация сСрвСрной части Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Π΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ FireBird 2.1 Π² Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ IBExpert.

Запустим IBExpert. Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Database/Create Database (Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…/Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…). Π’ ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Create Database (Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…) ΡƒΠΊΠ°ΠΆΠ΅ΠΌ:

Β· Server (Π‘Π΅Ρ€Π²Π΅Ρ€) — Local (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ)

Β· Database (Π€Π°ΠΉΠ» Π‘Π”) — C:1LIBRARY.fdb

Β· UserName (Имя_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ) — SYSDBA

Β· Password (ΠΏΠ°Ρ€ΠΎΠ»ΡŒ) — masterkey — это имя ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ администратора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Β· Charset (ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°) — WIN1251

Β· SQL Dialect (Π”ΠΈΠ°Π»Π΅ΠΊΡ‚ Π‘Π”) — Dialect 3 (Π”ΠΈΠ°Π»Π΅ΠΊΡ‚ 3).

НаТмём OK. Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ создана. Π’ ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Database Register (РСгистрация Π‘Π”) Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Π² ΠΏΠΎΠ»Π΅ ВСрсия сСрвСра FireBird 2.1. НаТмСм ΠΊΠ½ΠΎΠΏΠΊΡƒ Register, ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ зарСгистрирована ΠΈ ΠΎΡ‚образится Π² ΠΎΠΊΠ½Π΅ Database Explorer. Π’ ΡΡ‚ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Database/Connect to Database (Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…/ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π‘Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…). Π’ ΠΎΠΊΠ½Π΅ Database Explorer отобразятся всС элСмСнты Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ «ΠšΠ½ΠΈΠ³ΠΈ» (Books). Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ Database/New Table (Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…/Новая Ρ‚Π°Π±Π»ΠΈΡ†Π°). Π’ ΠΎΠΊΠ½Π΅ Table (Π’Π°Π±Π»ΠΈΡ†Π°) Π·Π°Π΄Π°Π΄ΠΈΠΌ имя Books ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ называния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ скрипт, Π½Π°ΠΆΠ°Π² .

Π—Π°Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS». Для этого сдСлаСм Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Constraint (ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ). Π©Π΅Π»ΠΊΠ½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ пространствС ΠΎΠΊΠ½Π° Table (Π’Π°Π±Π»ΠΈΡ†Π°) ΠΈ Π² Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌ мСню Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ New primary key (Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡). Π”Π°Π»Π΅Π΅ установим ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° «ID_BOOKS». Для этого Ρ‰Π΅Π»ΠΊΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² ΠΏΠΎΠ»Π΅ On Field (На ΠΏΠΎΠ»Π΅) ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚. Установим сортировку ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ значСния индСкса — Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Ascending для Index Sorting.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Fields (поля) Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΠΎΠ»Π΅ «ID_BOOKS» Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ мСню, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Edit Field ID_BOOKS. Π’ ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Autoincrement (Π°Π²Ρ‚ΠΎ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅). НиТС появятся Ρ‚Ρ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Generator (Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€) Trigger (Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€) ΠΈ Procedure (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°). На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Generator Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Create Generator (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€), присвоим Π΅ΠΌΡƒ имя «GEN_BOOKS_ID» ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌ 1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Trigger ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Create Trigger (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€). АвтоматичСски Π±ΡƒΠ΄Π΅Ρ‚ написан ΠΊΠΎΠ΄:

IF (NEW." ID_ BOOKS" IS NULL) THEN

NEW." ID_ BOOKS" = GEN_ID (GEN_BOOKS_ID, 1);

Π—Π΄Π΅ΡΡŒ содСрТится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ условия. Если ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ столбца «ID_ BOOKS» (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ NEW), ΠΎΠ½ΠΎ являСтся пустым (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ IS NULL) Ρ‚ΠΎ Π΅ΠΌΡƒ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ созданным Ρ€Π°Π½Π΅Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ GEN_BOOKS_ID (GEN_ID (имя_Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, шаг) — ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ обращСния ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ). НаТмём «ΠžΠš» ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ скрипт.

Аналогично ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€ΠΈ создании Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ столбцам этих Ρ‚Π°Π±Π»ΠΈΡ†.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°» (Publishers) ΠΈ «Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ» (Readers).

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ²

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS». Для этого создадим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ «BOOKS_JOURNAL», Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹Π΅ измСнСния, добавлСния, удалСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ «BOOKS». ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Ρ‚Π° (ΠΏΠΎΠ»Π΅ «DATE»), опСрация (INS, UPD, DEL) Π½Π°Π΄ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ «BOOKS» (ΠΏΠΎΠ»Π΅ «OPERATION»), Π° Ρ‚Π°ΠΊΠΆΠ΅ староС ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбцов этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ удалСния Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбцов Π±ΡƒΠ΄Π΅Ρ‚ пустым. Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния пустым Π±ΡƒΠ΄Π΅Ρ‚ староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбцов.

Для ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»Π° создана Ρ‚Π°Π±Π»ΠΈΡ†Π°:

CREATE TABLE BOOKS_JOURNAL (

OPERATION CHAR (6) NOT NULL,

ID_BOOKS_OLD INTEGER,

ID_BOOKS_NEW INTEGER,

ID_PUBLISHERS_OLD INTEGER,

ID_PUBLISHERS_NEW INTEGER,

K_PAGES_OLD INTEGER,

K_PAGES_NEW INTEGER,

COVER_OLD VARCHAR (15),

COVER_NEW VARCHAR (15),

TIRAZ_OLD INTEGER,

TIRAZ_NEW INTEGER,

ID_ABONENT_OLD INTEGER,

ID_ABONENT_NEW INTEGER,

DATE_ISSUE_OLD DATE,

DATE_ISSUE_NEW DATE,

NAME_OLD VARCHAR (20),

NAME_NEW VARCHAR (20),

DATE_ DATE NOT NULL,

TIME_ TIME NOT NULL,

ID_JOURNAL INTEGER NOT NULL);

ALTER TABLE BOOKS_JOURNAL ADD PRIMARY KEY (ID_JOURNAL);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€, Π·Π°ΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½Ρ‹ΠΉ Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ «BOOKS» для вставки, измСнСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ записСй. Для создания Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Triggers/New Trigger…(Π’Ρ€ΠΈΠ³Π³Π΅Ρ€/Новый Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€). ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ создания Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ:

Β· Имя — «JOURNAL»;

Β· Для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ — «BOOKS»;

Β· Π’ΠΈΠΏ — «BEFORE», Ρ‚. Π΅. выполняСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ;

Β· Π£ΠΊΠ°ΠΆΠ΅ΠΌ INSERT, UPDATE, DELETE.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ тСкст Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

SET TERM ^ ;

CREATE OR ALTER TRIGGER JOURNAL FOR BOOKS

ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0

AS

begin

IF (INSERTING) THEN

begin

insert into BOOKS_JOURNAL values ('INSERT', null, new. id_books, null, new. id_publishers, null, new. k_pages, null, new. cover, null, new. tiraz, null, new. id_abonent, null, new. date_issue, null, new.name, 'now', 'now', gen_id (generator_journal, 1));

end

IF (updating) THEN

begin

insert into BOOKS_JOURNAL values ('UPDATE', old. id_books, new. id_books, old. id_publishers, new. id_publishers, old. k_pages, new. k_pages, old. cover, new. cover, old. tiraz, new. tiraz, old. id_abonent, new. id_abonent, old. date_issue, new. date_issue, old.name, new.name, 'now', 'now', gen_id (generator_journal, 1));

end

IF (deleting) THEN

begin

insert into BOOKS_JOURNAL values ('DELETE', old. id_books, null, old. id_publishers, null, old. k_pages, null, old. cover, null, old. tiraz, null, old. id_abonent, null, old. date_issue, null, old.name, null, 'now', 'now', gen_id (generator_journal, 1));

end

end

^ SET TERM; ^

Π’Ρ€ΠΈΠ³Π³Π΅Ρ€ состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΡ… выполняСтся Π»ΠΈ Π½Π°Π΄ записями Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соотвСтствСнно опСрация вставки, измСнСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ. Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π³Π΄Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΆΡƒΡ€Π½Π°Π»Π° Π² ΠΏΠΎΠ»Π΅ «OPERATION» Π±ΡƒΠ΄Π΅Ρ‚ вставлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «INSERT», Π² ΠΏΠΎΠ»Π΅ «DATE_» тСкущая Π΄Π°Ρ‚Π° (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «now»), Π² ΠΏΠΎΠ»Π΅ «TIME_» Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «now»), Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ пСрСписаны всС Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΏΠΎΠ»Π΅ΠΉ, Π° Π² ΠΏΠΎΠ»ΡΡ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΆΡƒΡ€Π½Π°Π»Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… для хранСния старых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS», занСсутся значСния NULL. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «IF (updating) THEN» провСряСт, выполняСтся Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вставки записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΆΡƒΡ€Π½Π°Π»Π° «BOOKS_JOURNAL». Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π°Π΄Π°Π½ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠΎΠ»Ρ ΠΏΠΎΠ΄ старыС значСния вмСсто NULL заносятся значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… столбцов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS» Π΄ΠΎ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. Аналогично Π·Π°Π΄Π°Π½ послСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ записи ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS», Π³Π΄Π΅ NULL заносится Π² ΡΡ‚ΠΎΠ»Π±Ρ†Ρ‹ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹Π΅ значСния.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ каскадного обновлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ записСй.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ каскадного обновлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ записСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS» ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ «PUBLISHERS».

Π­Ρ‚ΠΎΡ‚ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½ Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ «PUBLISHERS», ΠΈ Π·Π°Π΄Π°Π½ ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ для измСнСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ записСй. Для создания Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Triggers/New Trigger…(Π’Ρ€ΠΈΠ³Π³Π΅Ρ€/Новый Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€). ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ создания Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ:

Β· Имя — «PUBLISHERS_CASCADE_BOOKS»;

Β· Для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ — «PUBLISHERS»;

Β· Π’ΠΈΠΏ — «BEFORE», Ρ‚. Π΅. выполняСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ;

Β· Π£ΠΊΠ°ΠΆΠ΅ΠΌ UPDATE, DELETE.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ тСкст Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

SET TERM ^ ;

CREATE OR ALTER TRIGGER PUBLISHERS_CASCADE_BOOKS FOR PUBLISHERS

ACTIVE BEFORE UPDATE OR DELETE POSITION 0

AS

begin

IF (updating) THEN

begin

update books C

set C. id_publishers = new. id_publishers

where c. id_publishers = old. id_publishers;

end

else

begin

delete from books C

where c. id_publishers = old. id_publishers;

end

end

^

SET TERM; ^

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ выполняСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ записСй ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «PUBLISHERS», Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ Π·Π°Π΄Π°Π½ΠΎ условиС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π΅, какая опСрация Π½Π°Π΄ записями этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ производится. IF (updating) THEN = ИБВИНА, Ссли опСрация измСнСния (UPDATE), ΠΈΠ½Π°Ρ‡Π΅ =Π›ΠžΠ–Π¬ (для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° это опСрация удалСния). Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС производится каскадноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ записСй ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° измСнСния Π΄Π°Π½Π½Ρ‹Ρ… UPDATE, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ каскадноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ DELETE FROM. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях условиСм ΠΎΡ‚Π±ΠΎΡ€Π° записСй Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ являСтся равСнство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ поля «ID_PUBLISHERS» Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS» ΠΈ ΡΡ‚Π°Ρ€Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ поля «ID_PUBLISHERS» Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «PUBLISHERS». Π’ ΡΠ»ΡƒΡ‡Π°Π΅ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… этим полям ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ значСния записСй.

Аналогично создадим Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ каскадного обновлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ записСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «BOOKS» ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ «READERS» — «READERS_CASCADE_BOOKS». Π Π°Π·Π½ΠΈΡ†Π° здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π½ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «READERS» ΠΈ Π² Π·Π°ΠΏΠΈΡΡΡ… ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ значСния ΠΏΠΎΠ»Π΅ΠΉ «ID_ABONENT».

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Ρ€ΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ список ΠΊΠ½ΠΈΠ³, находящихся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Для этого Π·Π°Π΄Π°Π΄ΠΈΠΌ запрос Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ списка ΠΊΠ½ΠΈΠ³, Π² ΠΏΠΎΠ»Π΅ «BOOKS.ID_ABONENT» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стоит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL.

Для создания Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ProceduresNew Procedure (ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ΠΠΎΠ²Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°). Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ Output Parameters (Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) Π·Π°Ρ‚Π΅ΠΌ Insert parameter/variable (Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ). Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ «NAME_BOOKS VARCHAR (30)» ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Ρ‰Ρ‘ Π΄Π²Π° — ΠΏΠΎΠ΄ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π³ΠΎΡ€ΠΎΠ΄ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° — соотвСтствСнно «NAME_PUBLISHERS VARCHAR (20)» ΠΈ «CITY_PUBLISHERS VARCHAR (20)».

Листинг ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ «BOOKS_LIBRARY»:

CREATE PROCEDURE BOOKS_LIBRARY

returns (

city_publishers varchar (20) character set win1251,

name_publishers varchar (20) character set win1251,

name_books varchar (30) character set win1251)

as

begin

for

select distinct books.name, publishers.name, publishers. city

from books inner join publishers on books. id_publishers = publishers. id_publishers

where books. id_abonent iS NULL

into: name_books,: name_publishers,: city_publishers

do suspend;

end

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ запроса Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ SELECT использована конструкция «FOR SELECT … INTO … DO …», которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° записСй Π² Ρ†ΠΈΠΊΠ»Π΅. Π˜Π½Π°Ρ‡Π΅ Ссли SELECT Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка «multiple rows in singleton select». Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ строки производится ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Ρ‹Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΈ Ρ‚. Π΄. ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π°Π½Ρ‹ всС строки, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ запроса.

Вторая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ список ΠΊΠ½ΠΈΠ³, Π²Ρ‹Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ (Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ — Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Π°Ρ Π΄Π°Ρ‚Π°). Π—Π°Π΄Π°Π΄ΠΈΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ «DATE1 DATE» ΠΈ «DATE2 DATE». Π—Π°Π΄Π°Π΄ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: «NAME_BOOKS VARCHAR (30)», «NAME_PUBLISHERS VARCHAR (20)» ΠΈ «CITY_PUBLISHERS VARCHAR (20)».

Листинг ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ «BOOKS_LIST_PERIOD»:

CREATE PROCEDURE BOOKS_LIST_PERIOD (

date1 date,

date2 date)

returns (

city_publishers varchar (20) character set win1251,

name_publishers varchar (20) character set win1251,

name_books varchar (30) character set win1251)

as

declare variable var_date date;

begin

for

select distinct books.name, publishers.name, publishers. city, books. date_issue

from books inner join publishers on books. id_publishers = publishers. id_publishers

into: name_books,: name_publishers,: city_publishers, :var_date

do if (var_date between date1 and date2) then suspend;

end

Π’ ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ цикличСской Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ «SELECT», провСряСтся, Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… SELECT-ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ var_date ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌΠΈ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ date1 ΠΈ date2. Если Π΄Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π²Ρ‹Π΄Π°Ρ‡Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° suspend.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ количСство ΠΊΠ½ΠΈΠ³ ΠΈ ΡΡ€Π΅Π΄Π½ΠΈΠΉ Ρ‚ΠΈΡ€Π°ΠΆ ΠΏΠΎ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°ΠΌ. Π—Π΄Π΅ΡΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ агрСгирования, вычисляСмыС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ поля «PUBLISHERS. NAME».

Листинг ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ «KOL_BOOKS_TIRAZ»:

CREATE PROCEDURE KOL_BOOKS_TIRAZ

returns (

publishers_name varchar (20) character set win1251,

avg_tiraz integer,

count_ integer)

as

begin

for

select distinct publishers.name, count (publishers.id_publishers), AVG (books.tiraz)

from books inner join publishers on books. id_publishers = publishers. id_publishers

group by publishers.name

into: publishers_name,: count_,: avg_tiraz

do suspend;

end

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

Β· publishers_name varchar (20) character set win1251 — строковой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°;

Β· avg_tiraz integer — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для срСднСго значСния Ρ‚ΠΈΡ€Π°ΠΆΠ° ΠΊΠ½ΠΈΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Β· count_ integer — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Π²Ρ‹Π΄Π°Ρ‡ΠΈ значСния количСства строк ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ осущСствляСтся Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ поля «PUBLISHERS.NAME», количСства Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… строк ΠΈ ΡΡ€Π΅Π΄Π½Π΅Π³ΠΎ значСния ΠΏΠΎ ΠΏΠΎΠ»ΡŽ «BOOKS.TIRAZ» для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния поля «PUBLISHERS.NAME».

Π’Π΅ΠΏΠ΅Ρ€ΡŒ структура Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π³ΠΎΡ‚ΠΎΠ²Π°. Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ записями:

Π’Π°Π±Π»ΠΈΡ†Π° «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°» (Publishers)

ID_Publishers

Name

City

ΠŸΠΈΡ‚Π΅Ρ€

Π‘.- ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³

Π”ΠΈΠ°Π‘ΠΎΡ„Ρ‚

КиСв

КОРОНА ΠΏΡ€ΠΈΠ½Ρ‚

Π‘.- ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³

Ѐинансы ΠΈ ΡΡ‚атистика

Москва

Π’Π°Π±Π»ΠΈΡ†Π° «Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ» (Readers)

ID_ abonent

FIO

Telephone

Address

Иванов Π’Π°Π΄ΠΈΠΌ

Москва ΡƒΠ». 1 Π΄. 1 ΠΊΠ². 1

ΠŸΠ΅Ρ‚Ρ€ΠΎΠ² Борис

ΠžΡ€Π΅Π» ΡƒΠ». 1 Π΄. 1 ΠΊΠ². 1

Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ² Иван

ΠšΡƒΡ€ΡΠΊ ΡƒΠ». 1 Π΄. 1 ΠΊΠ². 1

ΠšΡƒΠ·Π½Π΅Ρ†ΠΎΠ² АртСм

Π’ΠΎΡ€ΠΎΠ½Π΅ΠΆ ΡƒΠ». 1 Π΄. 1 ΠΊΠ².1

Π’Π°Π±Π»ΠΈΡ†Π° «ΠšΠ½ΠΈΠ³ΠΈ» (Books)

ID_ Books

Name

ID_ Publishers

K_ pages

Cover

Tiraz

ID_ abonent

Date_issue

ЭффСктивная Ρ€Π°Π±ΠΎΡ‚Π° с Π‘Π£Π‘Π”

Ρ‚Π²Ρ‘Ρ€Π΄Ρ‹ΠΉ

01.01.2009

Delphi. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Ρ‚Π²Ρ‘Ρ€Π΄Ρ‹ΠΉ

01.01.2009

Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

Ρ‚Π²Ρ‘Ρ€Π΄Ρ‹ΠΉ

11.01.2009

Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Ρ‚Π²Ρ‘Ρ€Π΄Ρ‹ΠΉ

NULL

NULL

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ клиСнтского прилоТСния Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π˜Π‘Π  Delphi, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ InterBase eXpress (IBX).

Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ File/New/Application (Π€Π°ΠΉΠ»/НовоС/ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅), Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ — File/New/Data Module (Π€Π°ΠΉΠ»/Новый/ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…). ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ располоТСны Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π΅ Data Access ΠŸΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ отобраТСния Π΄Π°Π½Π½Ρ‹Ρ… располоТСны Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π΅ Data Controls ΠŸΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ InterBase eXpress Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠ³Π°ΡŽΡ‚ΡΡ Π½Π° ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π΅ InterBase, Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для создания ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² — QReport.

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TIBDatabase. Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DatabaseName ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ имя сСрвСра) ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ Π‘Π” — «C:1LIBRARY.FDB».

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ модуля Π΄Π°Π½Π½Ρ‹Ρ…:

Β· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ IBTransaction

Β· Ρ‚Ρ€ΠΈ IBDataSet,

Β· Ρ‚Ρ€ΠΈ DataSource

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TIBDatabase ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Скстного мСню Database Editor… Π’ ΡΡ‚ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ User Name = SYSDBA, Character Set = WIN1251. Π—Π°Ρ‚Π΅ΠΌ установим свойство Connected ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° IBDatabase1 Ρ€Π°Π²Π½Ρ‹ΠΌ True ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ DefaultTransaction ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° IBDatabase1 Ρ€Π°Π²Π½Ρ‹ΠΌ IBTransaction1.

Π—Π°Π΄Π°Π΄ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями. Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ IBTransaction1, для Ρ‡Π΅Π³ΠΎ Π΅Π³ΠΎ свойству Active ΠΏΡ€ΠΈΠ΄Π°Π΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True. Π’Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Transaction Editor…, ΠΈ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠ΅ΠΌΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ — Read Committed.

Установим значСния свойств:

Β· DefaultAction — TACommitRetaining

Β· DefaultDatabase — IBDatabase1

Β· Params — read_committed

rec_version

nowait

Β· Active — True

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ IBDataSet1. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° BOOKS_DataSet (свойство Name). Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… — DataBase = IBDataBase1 ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ — Transaction = IBTransaction1. Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ SelectSQL тСкст основного запроса: «select* from BOOKS». ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ свойства GeneratorField Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠΎΠ»Π΅, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ присваиваСтся Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΡΠ°ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. АктивируСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚: Active — True. Π’Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Dataset Editor… Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Table Name Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ Π½Π°ΠΆΠΌΡ‘ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Get Table Fields (ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ поля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹). Π’ ΡΠΏΠΈΡΠΊΠ΅ Key Fields (ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ поля) Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ ΠΏΠΎΠ»Π΅ «ID_BOOKS», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ условиС WHERE Π² Π·Π°ΠΏΡ€ΠΎΡΠ°Ρ…. ПослС наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Generate SQL автоматичСски ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ значСния свойств DeleteSQL, InsertSQL, ModifySQL, RefreshSQL. Π­Ρ‚ΠΈ значСния станут Ρ€Π°Π²Π½Ρ‹:

DeleteSQL:

delete from BOOKS

where

ID_BOOKS = :OLD_ID_BOOKS

InsertSQL:

insert into BOOKS

(ID_BOOKS, NAME, ID_PUBLISHERS, K_PAGES, COVER, TIRAZ, ID_ABONENT, DATE_ISSUE)

values

(:ID_BOOKS, :NAME, :ID_PUBLISHERS, :K_PAGES, :COVER, :TIRAZ, :ID_ABONENT,

:DATE_ISSUE)

ModifySQL:

update BOOKS

set

ID_BOOKS = :ID_BOOKS,

NAME = :NAME,

ID_PUBLISHERS = :ID_PUBLISHERS,

K_PAGES = :K_PAGES,

COVER = :COVER,

TIRAZ = :TIRAZ,

ID_ABONENT = :ID_ABONENT,

DATE_ISSUE = :DATE_ISSUE

where

ID_BOOKS = :OLD_ID_BOOKS

RefreshSQL:

Select

ID_BOOKS,

NAME,

ID_PUBLISHERS,

K_PAGES,

COVER,

TIRAZ,

ID_ABONENT,

DATE_ISSUE

from BOOKS

where

ID_BOOKS = :ID_BOOKS

Аналогично Π·Π°Π΄Π°Π΄ΠΈΠΌ значСния свойств Π΄Π²ΡƒΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ IBDataSet.

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° DataSource Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ Dataset ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° IBDataSet.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ для отобраТСния Ρ‚Π°Π±Π»ΠΈΡ†. На ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ помСстим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ DBGrid ΠΈ DBNavigator. Π£ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² DBGrid ΠΈ DBNavigator Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DataSource ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ DataSource.

Поиск Π΄Π°Π½Π½Ρ‹Ρ…

Для поиска Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция

function LocateNext (const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;

Π³Π΄Π΅ KeyFields — список ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ производится поиск (ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с Π·Π°ΠΏΡΡ‚ΠΎΠΉ), KeyValues — список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, сравниваСмых со Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ этих ΠΏΠΎΠ»Π΅ΠΉ (значСния Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятой), TLocateOptions — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ поиска, Π³Π΄Π΅ loCaselnsensitive ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ поиск Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра (Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΈ ΠΌΠ°Π»Ρ‹Π΅ символы), Π° loPartialKey. — Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ для поиска Π΄Π°Π½Ρ‹ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Ѐункция LocateNext позволяСт Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ нСсколько записСй, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… условиям поиска, для отобраТСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ записи слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΅Ρ‰Ρ‘ Ρ€Π°Π·. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ логичСского Ρ‚ΠΈΠΏΠ°, Ρ€Π°Π²Π½ΠΎΠ³ΠΎ TRUE (ИБВИНА), Ссли Π½Π°ΠΉΠ΄Π΅Π½Π° подходящая запись, ΠΈ FALSE (Π›ΠžΠ–Π¬) Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

На Ρ„ΠΎΡ€ΠΌΠ΅ отобраТСния ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ирования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ BOOKS для поиска размСстим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

Β· Edit1 — для Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ KeyValues.

Β· Button1 — для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ поиска.

Β· НСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² CheckBox для указания списка ΠΏΠΎΠ»Π΅ΠΉ для поиска, Ρ‚. Π΅. значСния KeyFields.

Π’ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Button1 сначала производится сбор строки списка ΠΏΠΎΠ»Π΅ΠΉ KeyFields Π² ΡΠΎΠΎΡ‚вСтствии с ΡƒΠΊΠ°Π·Π°Π½ΠΈΡΠΌΠΈ Ρ„Π»Π°ΠΆΠΊΠΎΠ² CheckBox. Π—Π°Ρ‚Π΅ΠΌ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вмСстС со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ поля Edit1 отправляСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ LocateNext Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ loc (Fields, Values), ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Unit2 (Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Unit2 описан класс TDataModule2 (Ρ„ΠΎΡ€ΠΌΠ° модуля Π΄Π°Π½Π½Ρ‹Ρ…) Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ «BOOKS_DataSet: TIBDataSet;»).

Аналогично Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ поиск Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… PUBLISHERS ΠΈ READERS.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…

Π—Π°Π΄Π°Π΄ΠΈΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ BOOKS.

На Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ BOOKS помСстим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ CheckBox для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ полям. Π€ΠΈΠ»ΡŒΡ‚Ρ€ производится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌ полям, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ CheckBox, для этого Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ логичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Unit2) для указания, слСдуСт Π»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ записи ΠΏΠΎ Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ поля. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° слуТит ΠΊΠ½ΠΎΠΏΠΊΠ° «Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€» Π³Π΄Π΅ производится присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ (модуля Unit2) Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, послС Ρ‡Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ свойству BOOKS_DataSet.Filtered значСния True. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ свойству Filtered ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° TIBDataSet Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся ΠΏΠ΅Ρ€Π΅ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnFilterRecord этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

procedure TDataModule2. BOOKS_DataSetFilterRecord (DataSet: TDataSet; var Accept: Boolean);

Π³Π΄Π΅ DataSet ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выполняСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи ΠΈ Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Accept Ρ€Π°Π²Π΅Π½ True, Ρ‚ΠΎ Ρ‚Скущая запись отобраТаСтся, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС — Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°:

if (DataSet['NAME'] <> Name_) then Accept := False;

Π³Π΄Π΅ NAME — Π½Π°Π·Π²Π°Π½ΠΈΠ΅ поля, Name_ - пСрСмСнная, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сравниваСтся со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этого поля Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ записи.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€:

procedure TDataModule2. BOOKS_DataSetFilterRecord (DataSet: TDataSet;

var Accept: Boolean);

begin

Accept := True;

if P1 then if (DataSet['NAME'] <> Name_) then Accept := False;

if P2 then if (DataSet['K_PAGES'] < K_Pages1) then Accept := False;

if P3 then if (DataSet['K_PAGES'] > K_Pages2) then Accept := False;

if P4 then if (DataSet['DATE_ISSUE'] < Date1) then Accept := False;

if P5 then if (DataSet['DATE_ISSUE'] > Date2) then Accept := False;

if P6 then if (DataSet['ID_PUBLISHERS'] <> Id_pub) then Accept := False;

if P7 then if (DataSet['COVER'] <> Cov) then Accept := False;

if P8 then if (DataSet['TIRAZ'] < Tiraz1) then Accept := False;

if P9 then if (DataSet['TIRAZ'] > Tiraz2) then Accept := False;

if 10 then if (DataSet['ID_ABONENT'] <> Id_ab) then Accept := False;

end;

ЛогичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ P1 — P10 хранят значСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Ρ„Π»Π°ΠΆΠΊΠ°ΠΌ CheckBox, ΠΈ Π΅ΡΠ»ΠΈ Ρ„Π»Π°ΠΆΠΎΠΊ Π²Ρ‹Π±Ρ€Π°Π½, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π΅ΠΌΡƒ пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° True, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ этого поля. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ пСрСмСнная Accept ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True, Ρ‚. Π΅. считаСтся, Ρ‡Ρ‚ΠΎ строка ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, Ссли Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ условия Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ здСсь провСряСтся Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… условий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вмСсто «DataSet['NAME'] = Name_» провСряСтся «DataSet['NAME'] <> Name_» ΠΈ ΡΡ‚авится Π½Π΅ «Accept:= True» Π² ΡΠ»ΡƒΡ‡Π°Π΅ выполнСния этого условия, Π° «Accept := False»). Достаточно нСвыполнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ условия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ строка Π½Π΅ ΠΏΡ€ΠΎΡˆΠ»Π°, Ρ‚. Π΅. пСрСмСнная Accept ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ False.

Аналогично Π·Π°Π΄Π°Π΄ΠΈΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈ Π΄Π»Ρ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†.

Π’Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°

ΠžΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Для Π½Π°Ρ‡Π°Π»Π° создадим запрос Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ записСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ BOOKS, Π³Π΄Π΅ вмСсто ΠΊΠΎΠ΄ΠΎΠ² ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΈ Ρ‡ΠΈΡ‚атСля Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вся ΠΎ Π½ΠΈΡ… информация, получСнная ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ† PUBLISHERS ΠΈ READERS. Для этого помСстим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ IBQuery, Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Π΅Π³ΠΎ BOOKS_Query ΠΈ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ SQL запишСм:

select all BOOKS.NAME, BOOKS. COVER, BOOKS. TIRAZ, BOOKS. K_PAGES, PUBLISHERS.NAME, PUBLISHERS. CITY, READERS. FIO, READERS. ADDRESS, READERS. TELEPHONE, BOOKS. DATE_ISSUE

from (BOOKS inner join PUBLISHERS on BOOKS. ID_PUBLISHERS= PUBLISHERS. ID_PUBLISHERS) left join READERS on BOOKS. ID_ABONENT= READERS. ID_ABONENT

order by BOOKS.NAME;

Запрос Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ поля ΠΈΠ· Π²ΡΠ΅Ρ… Ρ‚Ρ€Ρ‘Ρ… Ρ‚Π°Π±Π»ΠΈΡ†. Π’Π°Π±Π»ΠΈΡ†Ρ‹ BOOKS ΠΈ PUBLISHERS связаны ΠΏΠΎ Ρ€Π°Π²Π΅Π½ΡΡ‚Π²Ρƒ поля ID_PUBLISHERS, Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Π°Ρ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ связи Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ связана с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ READERS ΠΏΠΎ Ρ€Π°Π²Π΅Π½ΡΡ‚Π²Ρƒ поля ID_ABONENT. Π—Π΄Π΅ΡΡŒ благодаря связи left join Π² Π·Π°ΠΏΡ€ΠΎΡ выводятся записи, содСрТащиС Π² ΠΏΠΎΠ»Π΅ BOOKS. ID_ABONENT Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Π·Π°ΠΏΠΈΡΡΠΌ примСняСтся сортировка ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ поля BOOKS.NAME.

Установим свойство Active ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° BOOKS_Query Π² True. Если ΠΏΡ€ΠΈ этом Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡ‚ся сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, Ρ‚ΠΎ Π·Π°ΠΏΡ€ΠΎΡ SQL Π²Π²Π΅Π΄Ρ‘Π½ Π±Π΅Π· ошибок.

Π’Π°ΠΊΠΆΠ΅ помСстим Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ DataSourse, Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Π΅Π³ΠΎ BOOKS_Query_Source ΠΈ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DataSet ΡƒΠΊΠ°ΠΆΠ΅ΠΌ BOOKS_Query.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π½Π° Π½Π΅Ρ‘ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ DBGrid1 Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DataSourse ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ DataModule2. BOOKS_Query_Source. На Ρ„ΠΎΡ€ΠΌΠ΅ располоТим ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π’ывСсти ΠΎΡ‚Ρ‡Ρ‘Ρ‚», ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ запроса BOOKS_Query.

Для создания нСпосрСдствСнно ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° создадим для Π½Π΅Π³ΠΎ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π½Π° Π½Π΅Ρ‘ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ QuickRep. И ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DataSet DataModule2. BOOKS_Query. Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ Page. Orientation = poLandscape (ПСйзаТная ориСнтация страницы). Π£ ΡΠ²ΠΎΠΉΡΡ‚Π²Π° Bands установим Π² True ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ подсвойства: HasDetail, hasTitle, PageHander. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ QuickRep Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Detail ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ QRDBText для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля, Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DataSet ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΊΠ°ΠΆΠ΅ΠΌ DataModule2. BOOKS_Query, Π° Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ DataField ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅. Π’ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Title помСстим Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² QRLabel для Π½Π°Π·Π²Π°Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΈ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ эти названия Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ Caption этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². РасполоТим Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ QRTextFilter, QRHTMLFilter для сохранСния ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… HTML, TXT. Π’ ΠΎΠ±Π»Π°ΡΡ‚ΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° PageHander помСстим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ QRSysData для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚Ρ‹, для Ρ‡Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅ Data установим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ qrsDate. Π’Π΅ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈ Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° страницы.

Π’Π²ΠΎΠ΄ SQL запросов ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€

Работая с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ SQL запросы, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сохранСны Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ Π² Π²ΠΈΠ΄Π΅ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Для обСспСчСния Ρ‚Π°ΠΊΠΎΠΉ возмоТности слСдуСт Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для Π²Π²ΠΎΠ΄Π° тСкста Memo, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст запроса. Π—Π°Ρ‚Π΅ΠΌ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… помСстим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ IBQuery1: TIBQuery1 (соотвСтствСнно ΠΈ DataSource1: TDataSource1), создадим Ρ„ΠΎΡ€ΠΌΡƒ для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π½Π° Π½Π΅Ρ‘ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ DBGrid1: TDBGrid1. Π—Π°Ρ‚Π΅ΠΌ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ помСстим ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ Π΅Ρ‘ Π½Π°ΠΆΠ°Ρ‚ия Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ запроса ΠΈΠ· Ρ‚Скстового поля Π² ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ SQL ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° IBQuery1 послС Ρ‡Π΅Π³ΠΎ сдСлаСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ IBQuery1 Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Если Π² Π·Π°ΠΏΡ€ΠΎΡΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, просто ΡƒΠΊΠ°Π·Π°Π²

select * from KOL_BOOKS_TIRAZ;

ΠΈΠ»ΠΈ

select * from BOOKS_LIBRARY;

Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ся запрос, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Π² ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅.

Листинг ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° события Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π’ывСсти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса»:

procedure TForm1. Button10Click (Sender: TObject);

var i: integer;

begin

DataModule2.IBQuery1.Active:=False;

DataModule2.IBQuery1.SQL.Clear;

for i:=0 to Memo1.Lines.Count do

begin

DataModule2.IBQuery1.SQL.Append (Memo1.Lines[i]);

end;

DataModule2.IBQuery1.Active:=True;

Form10.Show;

end;

Для Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ значСния этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², поэтому Π²Ρ‹Π·ΠΎΠ² Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ BOOKS_LIST_PERIOD ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Листинг ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π·ΠΎΠ² этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

procedure TForm1. Button9Click (Sender: TObject);

begin

DataModule2.IBQuery1.SQL.Clear;

DataModule2.IBQuery1.SQL.Add ('select * from BOOKS_LIST_PERIOD (' +#39+MaskEdit1.Text+#39+','+#39+MaskEdit2.Text+#39+');');

DataModule2.IBQuery1.Active:=true;

Form9.Show;

end;

Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Add добавляСтся запись ΠΊ ΡΠ²ΠΎΠΉΡΡ‚Π²Ρƒ SQL ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° IBQuery1 (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΎ очищаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Clear). MaskEdit1. Text ΠΈ MaskEdit2. Text — значСния ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², #39 — ASCII ΠΊΠΎΠ΄ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½ΡƒΠΆΠ½Ρ‹ для Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² SQL запросС. Π—Π°Ρ‚Π΅ΠΌ активируСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ IBQuery1 ΠΈ ΠΎΡ‚обраТаСтся Ρ„ΠΎΡ€ΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

1. Ковязин Π‘., Востриков Π‘. ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/ Firebird/ Yaffil. — Πœ.: ΠšΠ£Π”Π˜Π¦ — ΠžΠ‘Π ΠΠ—, 2005. — 496 с.

2. Π₯ΠΎΠΌΠΎΠ½Π΅Π½ΠΊΠΎ А. Π”., Π“ΠΎΡ„ΠΌΠ°Π½ Π’. Π­. Π Π°Π±ΠΎΡ‚Π° с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Delphi. — Π‘Пб.: Π‘Π₯Π’ — ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2005. — 640с.

3. Кондзюба Π‘. П., Π“Ρ€ΠΎΠΌΠΎΠ² Π’. Н. Delphi 6. Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: Π›Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΡ. — ΠšΠΈΠ΅Π²: Π”ΠΈΠ°Π‘ΠΎΡ„Ρ‚, 2001. — 576 с.

4. http://www.ibase.ru/devinfo/ibfaq.htm

5. http://www.piter.com/lib/978 527 200 003/sql7.phtml?fil=Ch12

6. http://www.codenet.ru/progr/delphi/stat/SQL-Delphi.php

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ