logo

Ma’lumotlar bazasiga ulanish jarayonlarini dasturlash.

Yuklangan vaqt:

08.08.2023

Ko'chirishlar soni:

0

Hajmi:

24.51171875 KB
Mavzu:  Ma’lumotlar bazasiga ulanish jarayonlarini dasturlash.  
Reja:
1. MB va MBBTlari haqida tushunchalar.
2. Qt muhitidan turli MBlariga ulanish usullari.
3. SqlLite ma’lumotlar bazasini boshqarish tizimi. 
4. MBda   jadval   tushunchasi.   Jadvallarni   yaratish,   o’zgartirish,   o’chirish   va
ma’lumotlar bilan to’ldirish jarayonlarini dasturlash. 1. MB va MBBTlari haqida tushunchalar.
Ma'lumotlar   bazasi   (JB)   -   bu   ma'lumotlarning   tuzilgan   nomlangan   ombori,
birinchi   ta'rifidanoq,   ishchilar   uchun   har   chorakda   hisoblangan   bonuslarni   o'z
ichiga olgan fayl aniq bo'lishi kerak.
Ma'lumotlar   bazasini   boshqarish   tizimi   (MBBT)   -   bu   uning   tarkibiy   bo'linmalari
to'plami   sifatida   ma'lumotlar   bazasiga   kirishni   ta'minlaydigan   ixtisoslashtirilgan
dasturiy ta'minot.
Ma'lumotlarni   jadvallarga   kiritishdan   oldin   ushbu   jadvallarning   tuzilishini
aniqlash   kerak.   Bu   nafaqat   maydonlarning   nomlari   va   turlarining   tavsifini,   balki
boshqa   bir   qator   xususiyatlarni   ham   anglatadi   (masalan,   format,   kirish
ma'lumotlarini   tekshirish   mezonlari).   Jadvallarning   tuzilishini   tavsiflash   bilan   bir
qatorda,   odatda   jadvallar   o'rtasidagi   munosabatlar   ko'rsatiladi.   Relyatsion
ma'lumotlar   bazalaridagi   munosabatlar   turli   jadvallardagi   maydon   qiymatlarining
bir-biriga   mos   kelishi   bilan   belgilanadi.   Masalan,   mijozlar   va   buyurtmalar   bir-
biridan   ko'plarga   bog'liqdir.   mijozlar   to'g'risidagi   ma'lumotlarni   o'z   ichiga   olgan
jadvaldagi   bitta   yozuv   ushbu   mijozlarning   buyurtmalar   jadvalidagi   bir   nechta
yozuvlarga mos kelishi  mumkin. Agar  o'qituvchilar  o'rtasidagi  munosabatlarni  va
ular   o'qiyotgan   ma'ruza   kurslarini   ko'rib   chiqsak,   bu   ko'pdan-ko'pgacha   bo'lgan
munosabatlar.   bitta   o'qituvchi   bir   nechta   kurslarni   o'qitishi   mumkin,   ammo   bitta
kursni   bir   nechta   o'qituvchilar   o'qitishi   mumkin.   Va   jadvallar   o'rtasidagi
munosabatlarning so'nggi turi - bu yakka munosabat. Ushbu turdagi munosabatlar
juda   kam   tarqalgan.   Qoida   tariqasida,   bu   ikki   holatda   bo'ladi:   yozuv   juda   ko'p
maydonlarga ega, so'ngra ob'ektlarning bir turi haqidagi ma'lumotlar ikkita tegishli
jadvalga tarqaladi yoki jadvaldagi ma'lum miqdordagi yozuvlar uchun qo'shimcha
atributlarni belgilashingiz kerak , keyin ushbu qo'shimcha atributlar uchun alohida
jadval tuziladi, bu esa asosiy jadval bilan yakka munosabatlarga bog'lanadi.
Har   qanday   MBBT   ma'lumotlar   bilan   to'rtta   oddiy   operatsiyani   bajarishga   imkon
beradi:
• jadvalga bir yoki bir nechta yozuvlarni qo'shish;
• jadvaldan bir yoki bir nechta yozuvlarni o'chirish; • bir yoki bir nechta yozuvlarda ba'zi maydonlarning qiymatlarini yangilash;
• berilgan shartga mos keladigan bir yoki bir nechta yozuvlarni topish.
Ushbu   operatsiyalarni   bajarish   uchun   so'rov   mexanizmi   ishlatiladi.   So'rovlarni
bajarish  natijasi   -  bu  ma'lum  mezonlar  bo'yicha   tanlangan  yozuvlar   to'plami   yoki
jadvallarning   o'zgarishi.   Ma'lumotlar   bazasiga   so'rovlar   buning   uchun   maxsus
yaratilgan   tilda   shakllanadi,   bu   tuzilgan   so'rovlar   tili   (SQL   -   Structured   Query
Language) deb nomlanadi.
MBBT-ning   so'nggi   funktsiyasi   -   bu   ma'lumotlarni   boshqarish.   Ma'lumotlarni
boshqarish   deganda,   odatda,   ma'lumotlarni   ruxsatsiz   kirishdan   himoya   qilish,
ma'lumotlar   bilan   ishlashning   ko'p   foydalanuvchi   rejimini   qo'llab-quvvatlash   va
ma'lumotlar yaxlitligi va izchilligini ta'minlash tushuniladi.
Ruxsatsiz   kirishdan   himoyalanish   odatda   har   bir   foydalanuvchiga   faqat
ko'rish yoki o'zgartirish uchun ruxsat berilgan ma'lumotlarni ko'rish va o'zgartirish
imkonini beradi. Ko'p foydalanuvchi qobiliyatlari bir nechta foydalanuvchilarning
bir   vaqtning   o'zida   bir   xil   ma'lumotni   o'zgartirishiga   to'sqinlik   qiladi.
Ma'lumotlarning   yaxlitligi   va   izchillik   nazorati   ma'lumotlar   o'zgarishiga   olib
keladigan   o'zgarishlarning   oldini   oladi.   Masalan,   ikkita   jadval   birdan   ko'pga
munosabatda   bo'lganda,   bitta   (asosiy)   tarafdagi   jadvalda   tegishli   yozuv   bo'lmasa,
ko'p tomonda (odatda bo'ysunuvchi deb yuritiladi) jadvalga yozib bo'lmaydi.
2. Qt muhitidan turli MBlariga ulanish usullari.
Qt   standart   DBMS   yordamida   platformadan   mustaqil   ma'lumotlar   bazasi
dasturlarini   yaratishga   imkon   beradi.   Qt   Oracle,   Microsoft   SQL   Server,   Sybase
Adaptive   Server,   IBM   DB2,   PostgreSQL,   MySQL   va   ODBC   mos   ma'lumotlar
bazalari uchun mahalliy drayverlarni o'z ichiga oladi. Qt ma'lumotlar bazasiga xos
vidjetlarni   o'z   ichiga   oladi,   shuningdek,   o'rnatilgan   yoki   alohida   yozilgan   har
qanday vidjet uchun ma'lumotlar bazasini kengaytirishni qo'llab-quvvatlaydi.
Qt ma'lumotlar bazalari bilan ishlash turli darajalarda sodir bo'ladi:
1.Driver   Layer   -   QSqlDriver,   QSqlDriverCreator,   QSqlDriverCreatorBase,
QSqlDriverPlugin va QSqlResult sinflarini o'z ichiga oladi. Ushbu qatlam ma'lum ma'lumotlar   bazalari   va   SQL   API   qatlami   o'rtasida   past   darajadagi   ko'prikni
ta'minlaydi.
2.   SQL   API   qatlami   -   bu   qatlam   ma'lumotlar   bazalariga   kirishni   ta'minlaydi.
Aloqalar   QSqlDatabase   klassi   yordamida   o'rnatiladi.   Ma'lumotlar   bazasi   bilan
o'zaro   ta'sir   QSqlQuery   klassi   yordamida   amalga   oshiriladi.   QSqlDatabase   va
QSqlQuery   sinflaridan   tashqari   SQL   API   qatlami   QSqlError,   QSqlField,
QSqlIndex va QsqlRecord sinflariga tayanadi.
3.   Foydalanuvchi   interfeysi   qatlami   -   bu   qatlam   ma'lumotlar   bazasidagi
ma'lumotlarni   ma'lumotlar   yo'naltirilgan   vidjetlar   bilan   bog'laydi.   Bunga
QSqlQueryModel,   QSqlTableModel   va   QSqlRelationalTableModel   kabi   sinflar
kiradi.
Ma'lumotlar bazasiga ulanish
QSqlQuery   va   QSqlQueryModel   yordamida   ma'lumotlar   bazasiga   kirish
uchun   siz   bir   yoki   bir   nechta   ma'lumotlar   bazasi   ulanishlarini   yaratishingiz   va
ochishingiz kerak.
Qt   quyidagi   ma'lumotlar   bazalari   bilan   ishlashi   mumkin  (GPL  litsenziyasiga   mos
kelmasligi sababli barcha plaginlar Qt Open Source Edition bilan birga kelmaydi):
QDB2 - IBM DB2 (versiya 7.1 va undan yuqori)
QIBASE - Borland InterBase
QMYSQL - MySQL
QOCI - Oracle Call Interface Driver
QODBC - Ochiq ma'lumotlar bazasi ulanishi (ODBC) - Microsoft SQL Server va
boshqa ODBC mos keluvchi ma'lumotlar bazalari
QPSQL - PostgreSQL (versiya 7.3 va undan yuqori)
QSQLITE2 - SQLite 2-versiyasi
QSQLITE - SQLite 3-versiya
QTDS - Sybase Adaptive Server Driver
Qt   tarqatishda   bo'lmagan   haydovchi   plaginini   yaratish   uchun   ishlatilgan   DBMS
uchun mos mijozlar kutubxonasiga ega bo'lishingiz kerak.
Ma'lumotlar bazasiga quyidagicha ulanishingiz mumkin: QSqlDatabase db = QsqlDatabase::addDatabase("QMYSQL", "mydb");
   db.setHostName("bigblue");
   db.setDatabaseName("flightdb");
   db.setUserName("acarlson");
   db.setPassword("1uTbSbAs");
   bool ok = db.open();
Birinchi   qator   ulanish   moslamasini   yaratadi,   ikkinchisi   esa   uni   ochadi.
Ularning orasida ulanish nomi, ma'lumotlar bazasi nomi, xost nomi, foydalanuvchi
nomi, parol kabi ba'zi ulanish ma'lumotlari ishga tushiriladi. Ushbu misol bigblue
tugunidagi MySQL flightdb ma'lumotlar bazasiga ulanadi. AddDatabase  () uchun
QMYSQL   argumenti   ulanish   uchun   foydalaniladigan   ma'lumotlar   bazasi
drayverining turini belgilaydi va mydb - bu ulanishning nomi.
Aloqa   o'rnatilgandan   so'ng,   dasturning   istalgan   joyidan   QSqlDatabase   ::
ma'lumotlar   bazasi   ()   statik   funktsiyasiga   murojaat   qilishingiz,   ulanish   nomini
ko'rsatib,   ushbu   ulanishga   ko'rsatgich   olishingiz   mumkin.   Agar   ulanish   nomini
o'tkazmasangiz, u standart ulanishni qaytaradi.
Agar   open   ()   bajarilmasa,   u   false   qiymatiga   qaytadi.   Bunday   holda   siz
QSqlDatabase   ::   lastError   ()   ga   murojaat   qilib,   xato   haqida   ma'lumot   olishingiz
mumkin.
Ma'lumotlar   bazasiga   ulanishni   olib   tashlash   uchun   avval   QSqlDatabase   ::
close   ()   yordamida   ma'lumotlar   bazasini   yopish   kerak,   so'ngra   QSqlDatabase   ::
removeDatabase () statik usuli yordamida ulanishni olib tashlash kerak.
3. SqlLite ma’lumotlar bazasini boshqarish tizimi.
SQLite   -   ixcham   o'rnatilgan   relyatsion   ma'lumotlar   bazasi.   Kutubxonaning
manba kodi jamoat domeniga chiqarildi. Bu mutlaqo relyatsion ma'lumotlar bazasi.
"O'rnatiladigan"   so'zi   SQLite-da   mijoz-server   paradigmasidan   foydalanmasligini
anglatadi.   O'sha.   SQLite   mexanizmi   bu   dastur   o'zaro   aloqada   bo'lgan   alohida   ish
jarayoni   emas,   balki   dasturni   bog'laydigan   kutubxonani   ta'minlaydi   va   vosita
dasturning ajralmas qismiga aylanadi. Shunday qilib, almashinuv protokoli sifatida
SQLite kutubxonasining funktsiya chaqiruvlari (API) ishlatiladi. Ushbu yondashuv qo'shimcha   xarajatlarni,   javob   berish   vaqtini   qisqartiradi   va   dasturni
soddalashtiradi. SQLite butun ma'lumotlar bazasini (ta'riflar, jadvallar, indekslar va
ma'lumotlarni   o'z   ichiga   olgan   holda)   dastur   ishlayotgan   kompyuterda   bitta
standart faylda saqlaydi. Amalga oshirish qulayligi, yozish operatsiyasini  bajarish
boshlanishidan   oldin   ma'lumotlar   bazasini   saqlaydigan   butun   fayl   qulflanganligi
tufayli erishiladi; ACID [1] funktsiyalariga jurnal faylini yaratish orqali erishiladi.
Bir   nechta   ma'lumotlar   yoki   ma'lumotlar   bir   vaqtning   o'zida   bitta   ma'lumotlar
bazasidan ma'lumotlarni muammosiz o'qishi mumkin. Ma'lumotlar bazasiga yozish
faqat   boshqa   hech   qanday   so'rovlar   bajarilmasa   amalga   oshirilishi   mumkin;   aks
holda,   yozish   urinishi   muvaffaqiyatsiz   tugadi   va   xato   kodi   dasturga   qaytariladi.
Voqealarni   rivojlantirishning   yana   bir   varianti   -   belgilangan   vaqt   oralig'ida   yozib
olish urinishlarini avtomatik ravishda takrorlash. Shuningdek, operatsiyalar uchun
tanaffusni   kiritishingiz   mumkin.   Keyin   ma'lumotlar   bazasining   bandligi   bilan
bog'liq   bo'lgan   ulanish,   SQLITE_BUSY   xatosida   ishlamay   qolguncha   N   soniya
kutib turadi.
SQL standartini qo'llab-quvvatlash
Ma'lumki, SQL o'z rivojlanishida turli yo'nalishlarda shoshildi. Katta ishlab
chiqaruvchilar har qanday kengaytmalarni siqib chiqara boshladilar. Va har qanday
standartlar   qabul   qilingan   bo'lsa   ham,   haqiqiy   hayotda   barcha   yirik   ma'lumotlar
bazalari   standartlarni   to'liq   qo'llab-quvvatlamaydi.   Ammo   ularning   o'ziga   xos
narsalari   bor.   Shunday   qilib,   SQLite   "minimal,   ammo   to'liq   to'plam"   printsipi
asosida   yashashga   harakat   qiladi.   U   murakkab   narsalarni   qo'llab-quvvatlamaydi,
lekin ko'p jihatdan SQL 92 ga mos keladi. Va u o'zining o'ziga xos xususiyatlarini
taqdim etadi, ular juda qulay, ammo standart emas.
Quyidagi funktsiyalar qo'llab-quvvatlanmaydi:
•   To'g'ri   va   to'liq   tashqi   ishtirok   etish.   Faqat   LEFT   OUTER   JOIN   amalga
oshiriladi.
•   ALTER   TABLE   qisman   amalga   oshiriladi.   Faqat   jadvalni   qayta   nomlash   va
kolonnani qo'shish mumkin.
• Triggerni qisman qo'llab-quvvatlash. Faqat har bir qator uchun triggerlar mavjud. •   VIEWS-da   yozib   olish.   SQLite-da   VIEWS   faqat   o'qish   uchun   mo'ljallangan.
Triggerlar orqali qisman chetlab o'tildi.
•   Ma'lumotlar   bazasini   bitta   fayl   sifatida   amalga   oshirishi   va   mijoz-server
kontseptsiyasidan   chiqib   ketishi   tufayli   GRANT   va   REVOKE   funktsiyalaridan
foydalanilmaydi.
• Chet el kalitlari sukut bo'yicha o'chirilgan. Bu orqaga qarab muvofiqlik uchun.
Ma’lumot tipi
SQLite dinamik ma'lumotlarni tiplashdan foydalanadi. Bu shuni anglatadiki,
ustun turi ushbu yozuv maydonida saqlanadigan qiymat turini aniqlamaydi. O'sha.
har qanday ustun har qanday qiymatga kiritilishi mumkin.
Ustunning turi qiymatlarni qanday taqqoslashni belgilaydi (masalan, indeks ichida
taqqoslashda siz ularni bir xil turga kiritishingiz kerak). Ushbu turdagi qiymatlarni
ustunga kiritish majburiy emas.
Aytaylik, biz ustunni "INTEGER" deb e'lon qildik. SQLite ushbu ustunga istalgan
turdagi   qiymatlarni   kiritish   imkonini   beradi   (999,   "abc",   "123",   678.525).   Agar
kiritilgan qiymat butun son bo'lmasa, SQLite uni butun songa o'tkazishga harakat
qiladi.   O'sha.   "123"   qatori   123   raqamiga   aylanadi   va   qolgan   qiymatlar   "boricha"
yoziladi.
Mumkin bo'lgan maydon turlari: NULL, INTEGER, REAL, MATN, BLOB.
Ishonchlilik
SQLite manba kodini sinash qamrovi afsonadir.
Bu   testlar   deyarli   barcha   mumkin   bo'lgan   (va   mumkin   bo'lmagan)   vaziyatlarni
tavsiflashi   bilan   bog'liq.   SQLite-ni   amalga   oshiradigan   kodga   qaraganda   testlarni
tavsiflovchi   juda  ko'p  kod  mavjud.  Tabiiyki,  testlar   bilan  kodni   qoplash  100%   ni
tashkil qiladi.
SQLite  ishlab  chiquvchilari   tomonidan qo'llaniladigan  sinovga  bir  xil   yondoshish
taqlid qilishga loyiqdir. Va bunga intilish uchun ideal sifatida qabul qilish mumkin.
Amaliyot Relatsion   model   haqidagi   tushunchangizni   mustahkamlash   va   uning
cheklanganligini ko'rsatish uchun amaliy mashg'ulot sifatida biz mahsulot katalogi
tuzilishini yaratish misolini ko'rib chiqamiz.
SQL kodini ishlatish uchun siz quyidagi buyruqni bajarishingiz kerak:
sqlite3 ~ / example.sqlite
3. MBda   jadval   tushunchasi.   Jadvallarni   yaratish,   o’zgartirish,   o’chirish
va ma’lumotlar bilan to’ldirish jarayonlarini dasturlash.
SQL bayonotlarini bajarish
QSqlQuery   klassi   SQL   so'rovlarini   bajarish   va   natijalar   to'plami   bo'ylab
harakatlanish uchun interfeysni taqdim etadi.
SQL so'rovlarini bajarish uchun shunchaki QSqlQuery ob'ektini yarating va    
   QSqlQuery :: exec () ga murojaat qiling. Masalan, shunga o'xshash:
   QSqlQuery query;
   query.exec("SELECT name, salary FROM employee WHERE salary > 50000");
QSqlQuery konstruktor  ixtiyoriy QSqlDatabase argumentini qabul  qiladi, u
qaysi   ma'lumotlar   bazasi   ulanishini   ishlatishini   belgilaydi.   Agar   siz   uni
ko'rsatmasangiz, standart ulanish ishlatiladi.
Agar xatolik yuz bersa, exec () false qiymatini qaytaradi. Xatoga QSqlQuery
:: lastError () yordamida kirish mumkin.
QSqlQuery bitta so'rov natijalari to'plamiga bir martalik kirishni ta'minlaydi. Exec
()   chaqiruvidan   so'ng   ichki   QSqlQuery   ko'rsatkichi   birinchi   yozuvdan   oldingi
holatga ishora qiladi. Agar siz QSqlQuery :: next () usulini bir marta chaqirsangiz,
u   ko'rsatkichni   birinchi   yozuvga   o'tkazadi.   Shundan   so'ng,   boshqa   yozuvlarga
kirish  uchun navbatdagi  () murojaatni  yolg'onga qaytguncha  takrorlash  kerak. Bu
erda barcha yozuvlar bo'yicha takrorlanadigan odatiy tsikl mavjud:
   while (query.next()) {
     QString name = query.value(0).toString();
     int salary = query.value(1).toInt();
     qDebug() << name << salary;
   } QSqlQuery nafaqat SELECTni, balki boshqa har qanday so'rovni ham bajara oladi.
Quyidagi misol INSERT yordamida jadvalga yozuv kiritadi:
QSqlQuery query;
   query.exec("INSERT INTO employee (id, name, salary) "
        "VALUES (1001, 'Thad Beaumont', 65000)");
Agar   bir   vaqtning   o'zida   bir   nechta   yozuvlarni   kiritish   kerak   bo'lsa,   so'rovni
haqiqiy   kiritilgan   qiymatlardan   ajratish   ko'pincha   samaraliroq   bo'ladi.   Buni
parametrlar   orqali   qiymatlarni   joylashtirish   orqali   amalga   oshirish   mumkin.   Qt
qiymatlarni   kiritish   uchun   ikkita   sintaksisni   qo'llab-quvvatlaydi:   nomlangan
parametrlar   va   pozitsion   parametrlar.   Quyidagi   misolda   nomlangan   parametr
yordamida qo'shilish ko'rsatilgan:
   QSqlQuery query;
   query.prepare("INSERT INTO employee (id, name, salary) "
          "VALUES (:id, :name, :salary)");
   query.bindValue(":id", 1001);
   query.bindValue(":name", "Thad Beaumont");
   query.bindValue(":salary", 65000);
   query.exec();
Ushbu misol pozitsion parametr yordamida qo'shishni ko'rsatadi:
QSqlQuery query;
   query.prepare("INSERT INTO employee (id, name, salary) "
          "VALUES (?, ?, ?)");
   query.addBindValue(1001);
   query.addBindValue("Thad Beaumont");
   query.addBindValue(65000);
   query.exec(); Bir   nechta   yozuvlarni   kiritishda   QSqlQuery   ::   prepar   ()   raqamiga   faqat   bir   marta
murojaat qilishingiz kerak. Keyin kerak bo'lganda bindValue() yoki addBindValue
() ni chaqirib, exec() ga murojaat qilishingiz mumkin.
Ma'lumotlarni jadval ko'rinishida aks ettirish
QSqlQueryModel,   QSqlTableModel   va   QSqlRelationalTableModel   sinflari
QListView,   QTableView   va   QTreeView   kabi   Qt   ko'rish   sinflari   uchun   ma'lumot
manbalari   sifatida   ishlatilishi   mumkin.   Amalda,   QTableView   ko'pincha   SQL
tanlovi asosan ikki o'lchovli ma'lumotlar tuzilishi bo'lganligi sababli ishlatiladi.
Quyidagi misol SQL ma'lumotlar modeli asosida ko'rinishni yaratadi:
   QSqlTableModel model;
   model.setTable("employee");
   QTableView *view = new QTableView;
   view->setModel(&model);
   view->show();
Agar   model   o'qish-yozish   modeli   bo'lsa   (masalan,   QSqlTableModel),   unda
ko'rinish maydonlarni tahrirlashga imkon beradi. Buni quyidagi kod bilan o'chirib
qo'yish mumkin
   view-> setEditTriggers (QAbstractItemView :: NoEditTriggers);
Siz   bir   xil   modelni   bir   nechta   ko'rish   uchun   ma'lumotlar   manbai   sifatida
ishlatishingiz   mumkin.   Agar   foydalanuvchi   model   ma'lumotlarini   ko'rinishlardan
biri yordamida o'zgartirsa, boshqa ko'rinishlar darhol o'zgarishlarni aks ettiradi.
Yuqoridagi   ustunlar   uchun   ko'rish   sinflari   sarlavhalarni   aks   ettiradi.   Sarlavha
matnini o'zgartirish uchun modelning setHeaderData () funktsiyasidan foydalaning.
Masalan:
   model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
   model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
   model->setHeaderData(2, Qt::Horizontal, QObject::tr("City"));
   model->setHeaderData(3, Qt::Horizontal, QObject::tr("Country"));            Foydalanilgan ea dabiyotlar ro’yxati
1. Sh.A.Nazirov, R.V.Qobulov, M.R.Babajanov «C va C++ TILI»
2. Informatika fanidan o’quv qo’llanma //TATU 489 b. Toshkent, 2012.
3. C / C ++.   Программирование   на   языке   высокого   уровня   /   Т.   А.
Павловская. — СПб.:Питер, 2003. —461 с: ил.
4. Программирование на языке С++ в среде  Qt   Creator :
5. / Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк,О. В. Чеснокова,
6. А. С. Чмыхало — М. :  ALT   Linux , 2015. — 448 с.
7. Жасмин   Бланшет,   Марк   Саммерфилд   Qt   4:Программирование   GUI   на
C ++
8. М.Шлее,  Qt  5.10. Профессиональное программирование на С++. - СПб.:
БХВ-Петербург, 2018. - 1072 с.

Mavzu: Ma’lumotlar bazasiga ulanish jarayonlarini dasturlash. Reja: 1. MB va MBBTlari haqida tushunchalar. 2. Qt muhitidan turli MBlariga ulanish usullari. 3. SqlLite ma’lumotlar bazasini boshqarish tizimi. 4. MBda jadval tushunchasi. Jadvallarni yaratish, o’zgartirish, o’chirish va ma’lumotlar bilan to’ldirish jarayonlarini dasturlash.

1. MB va MBBTlari haqida tushunchalar. Ma'lumotlar bazasi (JB) - bu ma'lumotlarning tuzilgan nomlangan ombori, birinchi ta'rifidanoq, ishchilar uchun har chorakda hisoblangan bonuslarni o'z ichiga olgan fayl aniq bo'lishi kerak. Ma'lumotlar bazasini boshqarish tizimi (MBBT) - bu uning tarkibiy bo'linmalari to'plami sifatida ma'lumotlar bazasiga kirishni ta'minlaydigan ixtisoslashtirilgan dasturiy ta'minot. Ma'lumotlarni jadvallarga kiritishdan oldin ushbu jadvallarning tuzilishini aniqlash kerak. Bu nafaqat maydonlarning nomlari va turlarining tavsifini, balki boshqa bir qator xususiyatlarni ham anglatadi (masalan, format, kirish ma'lumotlarini tekshirish mezonlari). Jadvallarning tuzilishini tavsiflash bilan bir qatorda, odatda jadvallar o'rtasidagi munosabatlar ko'rsatiladi. Relyatsion ma'lumotlar bazalaridagi munosabatlar turli jadvallardagi maydon qiymatlarining bir-biriga mos kelishi bilan belgilanadi. Masalan, mijozlar va buyurtmalar bir- biridan ko'plarga bog'liqdir. mijozlar to'g'risidagi ma'lumotlarni o'z ichiga olgan jadvaldagi bitta yozuv ushbu mijozlarning buyurtmalar jadvalidagi bir nechta yozuvlarga mos kelishi mumkin. Agar o'qituvchilar o'rtasidagi munosabatlarni va ular o'qiyotgan ma'ruza kurslarini ko'rib chiqsak, bu ko'pdan-ko'pgacha bo'lgan munosabatlar. bitta o'qituvchi bir nechta kurslarni o'qitishi mumkin, ammo bitta kursni bir nechta o'qituvchilar o'qitishi mumkin. Va jadvallar o'rtasidagi munosabatlarning so'nggi turi - bu yakka munosabat. Ushbu turdagi munosabatlar juda kam tarqalgan. Qoida tariqasida, bu ikki holatda bo'ladi: yozuv juda ko'p maydonlarga ega, so'ngra ob'ektlarning bir turi haqidagi ma'lumotlar ikkita tegishli jadvalga tarqaladi yoki jadvaldagi ma'lum miqdordagi yozuvlar uchun qo'shimcha atributlarni belgilashingiz kerak , keyin ushbu qo'shimcha atributlar uchun alohida jadval tuziladi, bu esa asosiy jadval bilan yakka munosabatlarga bog'lanadi. Har qanday MBBT ma'lumotlar bilan to'rtta oddiy operatsiyani bajarishga imkon beradi: • jadvalga bir yoki bir nechta yozuvlarni qo'shish; • jadvaldan bir yoki bir nechta yozuvlarni o'chirish;

• bir yoki bir nechta yozuvlarda ba'zi maydonlarning qiymatlarini yangilash; • berilgan shartga mos keladigan bir yoki bir nechta yozuvlarni topish. Ushbu operatsiyalarni bajarish uchun so'rov mexanizmi ishlatiladi. So'rovlarni bajarish natijasi - bu ma'lum mezonlar bo'yicha tanlangan yozuvlar to'plami yoki jadvallarning o'zgarishi. Ma'lumotlar bazasiga so'rovlar buning uchun maxsus yaratilgan tilda shakllanadi, bu tuzilgan so'rovlar tili (SQL - Structured Query Language) deb nomlanadi. MBBT-ning so'nggi funktsiyasi - bu ma'lumotlarni boshqarish. Ma'lumotlarni boshqarish deganda, odatda, ma'lumotlarni ruxsatsiz kirishdan himoya qilish, ma'lumotlar bilan ishlashning ko'p foydalanuvchi rejimini qo'llab-quvvatlash va ma'lumotlar yaxlitligi va izchilligini ta'minlash tushuniladi. Ruxsatsiz kirishdan himoyalanish odatda har bir foydalanuvchiga faqat ko'rish yoki o'zgartirish uchun ruxsat berilgan ma'lumotlarni ko'rish va o'zgartirish imkonini beradi. Ko'p foydalanuvchi qobiliyatlari bir nechta foydalanuvchilarning bir vaqtning o'zida bir xil ma'lumotni o'zgartirishiga to'sqinlik qiladi. Ma'lumotlarning yaxlitligi va izchillik nazorati ma'lumotlar o'zgarishiga olib keladigan o'zgarishlarning oldini oladi. Masalan, ikkita jadval birdan ko'pga munosabatda bo'lganda, bitta (asosiy) tarafdagi jadvalda tegishli yozuv bo'lmasa, ko'p tomonda (odatda bo'ysunuvchi deb yuritiladi) jadvalga yozib bo'lmaydi. 2. Qt muhitidan turli MBlariga ulanish usullari. Qt standart DBMS yordamida platformadan mustaqil ma'lumotlar bazasi dasturlarini yaratishga imkon beradi. Qt Oracle, Microsoft SQL Server, Sybase Adaptive Server, IBM DB2, PostgreSQL, MySQL va ODBC mos ma'lumotlar bazalari uchun mahalliy drayverlarni o'z ichiga oladi. Qt ma'lumotlar bazasiga xos vidjetlarni o'z ichiga oladi, shuningdek, o'rnatilgan yoki alohida yozilgan har qanday vidjet uchun ma'lumotlar bazasini kengaytirishni qo'llab-quvvatlaydi. Qt ma'lumotlar bazalari bilan ishlash turli darajalarda sodir bo'ladi: 1.Driver Layer - QSqlDriver, QSqlDriverCreator, QSqlDriverCreatorBase, QSqlDriverPlugin va QSqlResult sinflarini o'z ichiga oladi. Ushbu qatlam ma'lum

ma'lumotlar bazalari va SQL API qatlami o'rtasida past darajadagi ko'prikni ta'minlaydi. 2. SQL API qatlami - bu qatlam ma'lumotlar bazalariga kirishni ta'minlaydi. Aloqalar QSqlDatabase klassi yordamida o'rnatiladi. Ma'lumotlar bazasi bilan o'zaro ta'sir QSqlQuery klassi yordamida amalga oshiriladi. QSqlDatabase va QSqlQuery sinflaridan tashqari SQL API qatlami QSqlError, QSqlField, QSqlIndex va QsqlRecord sinflariga tayanadi. 3. Foydalanuvchi interfeysi qatlami - bu qatlam ma'lumotlar bazasidagi ma'lumotlarni ma'lumotlar yo'naltirilgan vidjetlar bilan bog'laydi. Bunga QSqlQueryModel, QSqlTableModel va QSqlRelationalTableModel kabi sinflar kiradi. Ma'lumotlar bazasiga ulanish QSqlQuery va QSqlQueryModel yordamida ma'lumotlar bazasiga kirish uchun siz bir yoki bir nechta ma'lumotlar bazasi ulanishlarini yaratishingiz va ochishingiz kerak. Qt quyidagi ma'lumotlar bazalari bilan ishlashi mumkin (GPL litsenziyasiga mos kelmasligi sababli barcha plaginlar Qt Open Source Edition bilan birga kelmaydi): QDB2 - IBM DB2 (versiya 7.1 va undan yuqori) QIBASE - Borland InterBase QMYSQL - MySQL QOCI - Oracle Call Interface Driver QODBC - Ochiq ma'lumotlar bazasi ulanishi (ODBC) - Microsoft SQL Server va boshqa ODBC mos keluvchi ma'lumotlar bazalari QPSQL - PostgreSQL (versiya 7.3 va undan yuqori) QSQLITE2 - SQLite 2-versiyasi QSQLITE - SQLite 3-versiya QTDS - Sybase Adaptive Server Driver Qt tarqatishda bo'lmagan haydovchi plaginini yaratish uchun ishlatilgan DBMS uchun mos mijozlar kutubxonasiga ega bo'lishingiz kerak. Ma'lumotlar bazasiga quyidagicha ulanishingiz mumkin:

QSqlDatabase db = QsqlDatabase::addDatabase("QMYSQL", "mydb"); db.setHostName("bigblue"); db.setDatabaseName("flightdb"); db.setUserName("acarlson"); db.setPassword("1uTbSbAs"); bool ok = db.open(); Birinchi qator ulanish moslamasini yaratadi, ikkinchisi esa uni ochadi. Ularning orasida ulanish nomi, ma'lumotlar bazasi nomi, xost nomi, foydalanuvchi nomi, parol kabi ba'zi ulanish ma'lumotlari ishga tushiriladi. Ushbu misol bigblue tugunidagi MySQL flightdb ma'lumotlar bazasiga ulanadi. AddDatabase () uchun QMYSQL argumenti ulanish uchun foydalaniladigan ma'lumotlar bazasi drayverining turini belgilaydi va mydb - bu ulanishning nomi. Aloqa o'rnatilgandan so'ng, dasturning istalgan joyidan QSqlDatabase :: ma'lumotlar bazasi () statik funktsiyasiga murojaat qilishingiz, ulanish nomini ko'rsatib, ushbu ulanishga ko'rsatgich olishingiz mumkin. Agar ulanish nomini o'tkazmasangiz, u standart ulanishni qaytaradi. Agar open () bajarilmasa, u false qiymatiga qaytadi. Bunday holda siz QSqlDatabase :: lastError () ga murojaat qilib, xato haqida ma'lumot olishingiz mumkin. Ma'lumotlar bazasiga ulanishni olib tashlash uchun avval QSqlDatabase :: close () yordamida ma'lumotlar bazasini yopish kerak, so'ngra QSqlDatabase :: removeDatabase () statik usuli yordamida ulanishni olib tashlash kerak. 3. SqlLite ma’lumotlar bazasini boshqarish tizimi. SQLite - ixcham o'rnatilgan relyatsion ma'lumotlar bazasi. Kutubxonaning manba kodi jamoat domeniga chiqarildi. Bu mutlaqo relyatsion ma'lumotlar bazasi. "O'rnatiladigan" so'zi SQLite-da mijoz-server paradigmasidan foydalanmasligini anglatadi. O'sha. SQLite mexanizmi bu dastur o'zaro aloqada bo'lgan alohida ish jarayoni emas, balki dasturni bog'laydigan kutubxonani ta'minlaydi va vosita dasturning ajralmas qismiga aylanadi. Shunday qilib, almashinuv protokoli sifatida SQLite kutubxonasining funktsiya chaqiruvlari (API) ishlatiladi. Ushbu yondashuv