Texnik tizimlarda axborot texnalogiyalari


laboratoriya ishi №7
Mavzu: Internet tarmog‘idagi ma’lumotlar bazasini dasturiy tizim vositalari yordamida yaratish.


Ishdan maqsad : C++ Builderda ma'lumotlar da ma’lumotlar bazasini yaratishni o’rgatish

C++ Builderda ma'lumotlar bazasi (MB) bilan ishlaganda dastlab Alias hosil qilinadi Alias ma'lum bir guruhga tegishli bo'lgan jadvallarni qaysi toifaga tegishliligini (jadvallar hosil qilinadigan drayverni), jadvallar yo'lini o'zida saqlaydi. C++ Builderda Alias hosil qiliashning bir necha usullari mavjud.

1. Menyuning DataBase bo'limidan SQL Explorer tanlanadi.

2. Object -»New ... [CTRL+N] tanlanadi; (yoki SQL Explorer darchasining o'ng qismida sichqonchaning o'ng tugmasi bosiladi va New tanlanadi)



3. Yuqoridagi darchadan drayver nomi tanlanadi; Standart holatda Paradox tanlanadi

4. Path bo'limiga jadvallar saqlanadigan katalog ko'rsatiladi.

5. Hosil qilingan Alias ni saqlash uchun sichqonchaning o'ng tugmasi bosiladi va Apply [CTRL+A] tanlanadi.

Jadval hosil qilish uchun quyidagi amallar ketma ketligi bajariladi.

1. C++ Builder menyusining Tools bo'limidan Database Desktop tanlanadi;

2. Database Desktop dan File—>New—>Table tanlanadi;



4. Field Name - jadval maydoni nomi; Type - maydon toifasi; Size - hajmi; Key - kalit maydonini bildirish bo'limi

5. Jadval maydonlari kiritilgandan keyin Save As… tugmasi bosiladi;

6. Alias bo'limidan o'zimiz hosil qilgan alias nomi tanlaniladi;

7. Jadvalga nom beriladi;

8. Options bo'limida Display Table ga bayroqcha o'rnatilsa, Soxranit tugmasi bosilgandan keyin Database Desktop da jabval ochiladi.

9. Bayroqcha o‘rnatilmasa (yoki ixtiyoriy jadvalni ochish uchun) File —> Open -> Table tanlanadi. Alias bo'limidan jadval saqlangan alias tanlaniladi. So'ngra ochilichi lozim bo'lgan jadval nomi tanlanilib Otkrыt tugmasi bosiladi.



Maydonlar haqida ma'lumot

Maydon nomi 25 ta simvoldan iborat bo‘lishi mumkin. Birinchi simvol probel bo‘lishi mumkin emas.

Eslatma: Maydon nomini yozishda probeldan umuman foydalanmagan ma’qul. Chunki, SQL so‘rovlardan foydalanganda muammo chiqishi mumkin. Zarurat bo‘lsa, shift minus belgisidan foydalaning. Apostrovdan (‘) ham foydalanmang!

Maydon toifasini tanlash uchun Type maydoniga o‘tib, sichqonchaning o‘ng tarafi bosiladi yoki probel bosiladi. Paradox uchun maydon toifalari quyidagicha bo‘lishi mumkin.

1. A1-255 Alpha Satrli maydon. ASCII kodini barcha simvollarda qabul qiladi.

2. N-number- 10307 -10308 butun son

3. $ - money - pul birligini bildiruvchi musbat yoki manfiy son.

4. S - short -32767 ... 32767 oralig’idagi butun sonlar.

5. I - long integer -2147483648 ... 2147483648

6. # - 0 - 32 BCD Binary Coded Decimal formatdagi son.

7. D - Date - sanani bildiruvchi maydon.

8. T- Time - vaqt.

9. @ - Time Stamp - vaqt va sanani bildiruvchi maydon.

10. M -1-240 Memo cheklanmagan satr ma’lumotlarini saqlash uchun mo‘lallangan.

11. F - 0-240 Formatted cheklanmagan format. Memo ulangan satrni saqlash uchun mo‘ljallangan.

12. G - graphic tasvir ma’lumotlarini saqlash.

13. O - OLE tasvir, ovoz, dokument va xakozolarni saqlash.

14. L - logical mantiqiy maydon.

15. + Autoincrement avtomat ravishda yozuvni bittaga oshirib boradi. Yozuvlar o‘chirilsa oldindagilar o‘zgarishsizqoladi. Misol: Lesson nomli alias hosil qiling. Quyidagi maydonlarni o'z ichiga oluvchi talaba nomli jadval hosil qiling.



Tug_kun maydonida tug'ilgan kuni sanasi yoziladi.

Bu jadvalni C++ Builder bilan bog'lashni ko'rib chiqamiz.

1. File→New→Application tanlanadi;

2. Komponentalarning BDE bo'limidan Table komponentasi formaga qo'yiladi;

3. Table komponentasining DatabaseName xususiyatida Alias ko'rsatiladi. (yani Lesson);

4. TableName xususiyatida jadval nomi keltiriladi. (talaba);

5. Active xususiyati true ga o'zgartiriladi;

6. Komponentalarning Data Access bo'limidan DataSource komponentasi formaga qo'yiladi;

7. DataSet xususiyati Table1 qilinadi;

8. Komponentalarning Data Controls bo'limidan DBNavigator komponentasi formaga qo'yiladi;

9. DataSource xususiyati DataSource qilinadi;

10. Komponentalarning Data Controls bo'limidan DBGrid komponentasi formaga qo'yiladi;

11. DataSource xususiyati DataSource qilinadi;

12. Formaga Edit va Button komponentalari qo'yiladi Button komponentasi ustida sichqoncha ikki marta bosiladi va quyidagilar kiritiladi:

TLocateOptions qidiruv_turi; qidiruv_turi « loPartialKey « loCaselnsensitive; if (!table1->Locate("Familiya",Editl->Text,qidiruv_turi)) ShowMessage("Bunday yozuv yo'q");

Bu yerda qidiruv_turi turidagi loPartialKey qidirilayotgan familiya qisman kiritilsa ham qidiruvni amalga ochirishni bildiradi. Masalan: Abdurahimov familiyasini qidirish lozim bo‘lsa, Abdu deb yozilsa ham qidiruv amalga oshirilishini bildiradi. loCaselnsensitive esa, qidirilayotgan ma'lumotning katta yoki kichik yozilganiga axamiyat bermaslikni bildiradi. Masalan: Abdurahimov familiyasini qidirish lozim bo'lsa, abdurahimov deb yozilsa ham qidiruv amalga oshirilishini bildiradi.

Bu parametrlarni alohida ishlatilsa ham bo'ladi. qidiruv_turi « loCaselnsensitive; yoki qidiruv_turi « loPartialKey;

Maydonlar bo yicha filtrlash

1. Formaga Button va Edit komponentalarini qo'ying

2. Button komponentasiga quyidagilar yoziladi Table1->Filtered = false; Table1->FilterOptions « foCaselnsensitive; Table1->Filter = "Familiya=' " + Editl->Text +,,*,n; Table1->Filtered = true;

3. Table ning FilterOptions xususiyatining foCaselnsensitive xususiyati True qilinadi. Yoki Edit komponentasining Onchange hodisasiga quyidagilar yoziladi: Table1->Filtered = false;

// Editl bo'sh bo'Isa funksiyadan chiqib ketiladi if (Editl->Text == "") return ;

Table1->FilterOptions « foCaselnsensitive; Table1->Filter = "Familiya='" + Editl->Text Table1->Filtered = true;

DIQQAT: Filterlashni bu turi faqat Paradox uchun o'rinli

Maydonlarga quyidagicha murojaat qilish mumkin.

Table1->FieldByName("Maydon_nomi")->Value;

Table1->FieldByName("Narxi")->AsCurrency; Table1->FieldByName("Soni")->AsInteger;

Maydonga biror qiymatni o'zlashtirish quyidagicha amalgam oshiriladi:

Table1->Edit; // Jadvalni o'zgartirishga ruxsat berish

Table1->FieldByName("Ism")->AsString = Editl->Text;

Table1->Post(); // Saqlash

Biror maydon yig'indisini hisoblash quyidagicha bo'lishligi mumkin.

void __ fastcall TForml::ButtonlClick(TObject *Sender)

{

float s;

Tablel->First; while(!Tablel->Eof)

{

s += Tablel->FieldByName("Jami")->Value;

Tablel->Next; // keyingi yozuvga o'tish

}

Buttonl->Caption = FloatToStr(s);

SQL tili ( Structured Query Language - strukturalashgan so'rovlar tili) sintaksisi juda oson. SQL tilida katta - kichik harflar farqlanilmaydi. Ya’ni Select operatorini SELECT, Select, select shakllarida yozish mumkin. Agar bir nechta operatordan foydalanilsa operator oxirida qo'yiladi. Faqat bitta operator ishlatilsa operator oxirida qo'yish shart emas. Izoh yozish ba'zi sistemalarda / * */ shaklida, ba'zi sistemalarda esa {} shaklida bo'ladi.

SQL so‘rovlar tilidan deyarli barcha (MS SQL Server, MySQL, PostgreSQL, Oracle, Informix, Paradox, Interbase, FireBird) ma'lumotlar bazasida foydalanish mumkin. SQL so'rovlari ma'lumotlar bazasiga qarab qizman o'zgarishi mumkin.

Select tanlash operatori

Select operatorining umumiy ko'rinishi

SELECT Cmaydon nomlari ro'yhati>

FORM

WHERE

GROUP BY

HAVING

ORDER BY Cmaydon nomlari ro'yhati>;

Quyidagi maydonlarni o'zida saqlovchi namuna nomli jadval hosil qiling va uni Lesson aliasiga saqlang.



1. Bujadvaldagi ma'lumotlarni ko'rish quyidagicha bo'ladi:

SELECT *

FROM namuna

2. Jadvaldagi ba'zi maydonlarni ko'rsh uchun shu maydon nomlari ro'yhati select dan keyin keltiriladi:

SELECT Familiya, Ism, Otasi FROM namuna

3. Familiya bo'yisha tartiblash

Select familiya, ism, otasi From namuna

Order By Familiya, Ism

4. Tug'ilgan yili bo'yicha kamayib borish tartibida tartiblash

Select familiya, ism, otasi,tug_yil

FROM namuna

Order By tug_yil DESC

5. Select operatoridan keyin faqat maydon nomi emas, ixtiyoriy arifmetik amal ( +, *, /) ishlatish mumkin. Misol uchun, yuqoridagi jadvaldagi tug'ilgan yilni joriy yildan ayirib, talabaning yoshini aniqlaymiz:

Select familiya, ism, otasi, (2013-tug_yil) AS Yoshi FROM namuna

6. Agar maydon nomini ruscha shriftda chiqarish talab etilsa quyidagicha so'rov yoziladi: (Maydon nomidan keyin AS xizmatchi so'zi bilan maydon sarlavhasi keltirilladi. Faqat "YO" xarfida muammo bo‘lishi mumkin)

Select familiya AS Familiya, ism AS Imya FROM namuna

6.1. Familiya va Ism maydonlarini bitta ustunda chiqarish uchun quyidagicha yozish mumkin.

Select familiya + ' ' + ism AS "Familiya Imya"

FROM namuna

MySQL da yuqoridagi so'rov sal boshqacha amalga oshiriladi.

Where operatoridan keyin tanlash shartida mantiqiy amallar AND, OR, NOT, arifmetik amallar va munosabat amallari



7. Dastlabki 6 ta amal tushunarli. Misol uchun jinsi ayol bo'lgan, 1990 yildan keyin tug'ilganlar ro'yhatini chiqaramiz.

Select Familiya, Ism, Otasi, tug_yil, (2013-tug_yil) AS yoshi FROM namuna

Where jinsi=,,Ayol" and tug_yil>1990

8. Like amali sintaksisi quyidagicha: LIKE "cbelgilar ketma - ketligi>"

Bu amal satrli maydonlar uchun qo'llaniladi va izlanayongan ma'lumot topilsa true qiymat qaytaradi. Belgilar ketma - ketligini to'liq kiritish yoki!,%” belgisi bilan tugatish mumkin. Bu belgi ixtiyoriy belgilar ketma - ketligini bildiradi.

Misol:

Select familiya, ism, otasi FROM namuna

Where Familiya LIKE "A%"

Amali !,A" harfidan boshlanuvchi barcha familiyalarni bildiradi. (Adambaev, Abdurahimov, Alimov, Azamov, Asqarov, Azizov,...)

Select familiya, ism, otasi FROM namuna

Where Familiya LIKE "Abdu%"

Amali !,Abdu" harflaridan boshlanuvchi barcha familiyalarni bildiradi.

Select familiya, ism, otasi

FROM namuna

Where Ism LIKE "%im%"

Amali ketma - ketlikda “inf qismi bor bo'lgan ismlarni bildiradi.

(Karimboy, Abdukarim, Rahimjon, Hakimboy, Salimjon,...)

9. between ... and amali sintaksisi quyidagicha: between and

1985 va 1990 yillar oralig'ida tug'ilganlar ro'yhatini chiqarish

Select familiya, ism, otasi FROM namuna

WHERE tug_yil BETWEEN 1985 AND 1990

10. IN amali sintaksisi quyidagicha: IN (< to'plam >)

Maydondagi ma'lumot qiymati, to'plam elementlariga tegishli bo'lganlarini chiqarib beradi. Masalan, ismi Azamat, Qudrat va Ne'mat bo'lgan talabalar haqidagi ma'lumotlarni chiqarish talab etilsin:

SELECT *

FROM namuna

WHERE Ism IN ("Azamat","Qudrat","Ne'mat")

Tug'ilgan yili 1980,1982,1989 bo'lganlar ro'yxati esa quyidagicha:

SELECT familiya, ism, otasi, tug_yil FROM namuna

WHERE tug_yil IN (1980,1982, 1989)

11. DISTINCT xizmatchi so'zi ko'rsatilgan maydon bo'yicha bir xil qiymatli ma'lumotlardan faqat bittasini olishni bildiradi

SELECT DISTINCT familiya FROM namuna

9. Count ko'rsatilgan maydon bo'yicha, yoki butun jadvaldagi yozuvlar sonini aniqlash uchun ishlatiladi

Select count (*)

FROM namuna

95-99 guruhidagi talabalar sonini aniqlash:

Select count (*) as soni

FROM namuna

WHERE guruh="95-99"

10. min(), max(), avg(), sum() funksiyalari mos ravishda maydonning eng kichik qiymatini (min), eng katta qiymatini (max), o'rtacha qiymatini (avg) va yig'indisini (sum) aniqlaydi.

Select min(tug_yil), max(tug_yil), avg(2010-tug_yil)

FROM namuna

11. Quyida yoshi eng katta bo'lgan talabani aniqlovchi so'rov keltirilgan

Select familiya, ism, tug_yil FROM namuna

WHERE tug_yil=(select min(tug_yil) FROM namuna)

12. Guruhgagi talabalar sonini aniqlovchi so'rov

13. Having bo'limi, group by bo'limi bo'lgan xollarda ishlatiladi. Having ning ishlatilishi deyarli Where bilan bir hil. Faqat having bo'limidagi so'rov butun jadvallarga emas, where bo'limi orqali olingan natijaga yoziladi. Quyida birdan ortiq takrorlanuvchi familiyalar va ularning takrorlanishlar sonini chiqaruvchi so'rov keltirilgan.

select familiya, count(familiya) as soni

from namuna

group by familiya

having count(familiya) >= 2

Jadvalga yangi yozuvqo'shish INSERT operatori orqali amalga oshiriladi

INSERT INTO cjadval nomi> (Cmaydonlar ro4yhati>)

VALUES (< qiymatlar ro'yhati>)

Namuna:

INSERT INTO namuna (familiya, ism)

VALUES ("Abdurahimov", "Ne’mat")

Mavjud yozuvni tahrirlash (qiymatini yangilash) Update operatori orqali amalga oshiriladi:

UPDATE cjadval nomi> SET =

WHERE

Namuna: Abdurahimov Ne'matning tug'ilgan yilini 1989 ga o'zgartirish Update namuna SET tug_yil=1989

WHERE familiya=,,Abdurahimov" AND ism="Ne'mat"

Yozuvni o'chirish quyidagicha amalga oshiriladi:

DELETE FROM

WHERE

DELETE FROM namuna WHERE familiya="Abdurahimov"

Bu so'rov orqali, familiyasi "Abdurahimov" bo'lgan barcha ma'lumotlar o'chiriladi.

Yuqorida keltirilgan so'rovlarni C++Builder da qo'llanilishini ko'rib chiqamiz. 1 File -» New~> Application tanlanadi;

2. Komponentalarning BDE bo'limidan Queryl komponentasi formaga qo'yiladi;

3. Queryl komponentasining DatabaseName hususiyatida Alias ko'rsatiladi. (yani Lesson);

4. Queryl komponentasining SQL hususiyatiga quyidagilar kiritiladi: select * from namuna

5. Queryl komponentasining Active hususiyati true ga o'zgartiriladi;

6. Komponentalarning Data Access bo'limidan DataSource komponentasi formaga qo'yiladi;

7. DataSet hususiyati Queryl qilinadi;

8. Komponentalarning Data Controls bo'limidan DBNavigator komponentasi formaga qo'yiladi;

9. DataSource hususiyati DataSourcel qilinadi;

10. Komponentalarning Data Controls bo'limidan DBGrid komponentasi formaga qo'yiladi;

11. DataSource hususiyati DataSourcel qilinadi;

12. Formaga Label, Edit va Button komponentalari qo'yiladi. Button komponentasiga quyidagilar kiritiladi:

Queryl->Close;

Queryl->SQL->Clear() ;

Queryl->SQL->Add("Select * from namuna");

Queryl->SQL->Add("Where Familiya=\""+Editl.Text+"\""); Queryl->Open();

Bu yerda faqat tayyor jadval bilan ulanishni ko'rib chiqamiz. Shuning uchun oldin video ma'ruzani ko'rib chiqing.

C++Builderda Microsoft Accessga ulanish uchun ADO texnologiyasidan foydalanamiz.

Buning uchun siz quyidagilarni ketma - ket bajaring:

1. C++Builderning komponentalar palitrasidan ADO bo‘limini tanlang.

2. Formaga ADOConnectionl va ADOTablel komponentalarini qo‘ying.

3. ADOConnectionl ning ConnectionString hususiyati tanlanadi

4. Build tugmasi bosiladi



7. Data Source=Baza_nomi.mdb; Data Source bo‘limida faqat fayl nomi qolishi kerak. Shunda programma faylni o‘zi turgan katalogdan izlaydi

8. Oktugmasi bosiladi

9. ADOTablel komponentasining Connection hususiyatiga ADOConnectionl tanlanadi

10. TableName tanlanadi. User Name va Password so‘ralsa Ok tanlanadi

11. O‘zimizga kerak bo‘lgan jadvalni tanlashimiz mumkin

12. Formaga DATA ACCESS bo‘limidan DataSourcel qo‘yiladi va DATASET ga ADOTablel

tanlanadi

13. Data Controls bo‘limidan formaga DBGridl qo‘yiladi va DataSource hususiyatiga DataSourcel tanlanadi

14. ADOTablel komponentasining Active hususiyati true qilinadi

15. Dasturni har ish tushurganda parol so‘ramsligi ushun ADOConnectionl komponentasining LoginPrompt hususiyati false qilinadi Jadvalning biror maydoni qiymatlarini ComboBox komponentasi ga qo‘shish Jadvalning biror maydoni qiymatlarini ComboBox komponentasi ga qo‘shishda, shu maydon qiymatiga mos ID qiymatlarini ham qo‘shish kerak. Bu ishni ma’lumotlami OBJECT shakldida qo‘shish orqali amalga oshiramiz.

Yuqorida keltirilgan dasturni davom etamiz.

1. Formaga Button va ComboBox komponentalarini qo‘ying.

2. Button komponentasi ustida sichqonchani 2 marta bosing va quyidagilarni kiriting: void __ fastcall TForml::ButtonlClick(TObject *Sender)

{

ADOTablel->First();

ComboBoxl->Clear();

while( !ADOTablel->Eof )

{

ComboBoxl->Items->

AddObject(ADOTablel->FieldByName("g_nomi")->AsString,

(TObject*)ADOTablel->FieldByName("id")->AsInteger); ADOTablel->Next(); }

3. Formaga Label komponentasini qo‘ying.

4. ComboBoxdagi Object shaklida qo‘shishgan ma’lumotlarni o‘qib olish quyidagicha. ComboBox komponentasi ustida sichqonchani 2 marta bosing va quyidagilarni kiriting:

void ___ fastcall TForml::ComboBoxlChange(TObject *Sender)

{int id;

id = (int)ComboBoxl->Items->Objects[ComboBoxl->ItemIndex]; Labell->Caption = IntToStr(id);}

ComboBox ga ma’lumotlarni Object shaklida qo‘shish:

ComboBoxl->Items->AddObject(ADOTablel->FieldByName("g_nomi")- >AsString,

(TObject*)ADOTablel->FieldByName("id")->AsInteger);

ComboBoxdagi Object shaklida qo‘shishgan ma’lumotlarni o‘qib olish:

id = (int)ComboBoxl->Items->Objects[ComboBoxl->ItemIndex]

Nazorat savollari:

1. Borland C++ Builder 6 integrallashgan sohasida ma’lumotlar bazasi qanday yaratiladi?

2. Birlamchi kalit nima?

3. Borland C++ Builder 6 muhitida ma’lumotlar bazasi va uni qayta ishlash qanday amalga oshiriladi?

4. SQL tilini qo’llash qanday amalga oshiriladi?

5. TTable, TADOTable, TDBGrid, TDBNavigator komponentlari yordamida ma’lumotlar bazasini qayta ishlash qanday amalga oshiriladi?