Ma’lumotlar bazasiga ulanish jarayonlarini dasturlash.
![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.](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_1.png)
![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;](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_2.png)
![• 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](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_3.png)
![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:](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_4.png)
![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](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_5.png)
![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.](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_6.png)
![• 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](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_7.png)
![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;
}](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_8.png)
![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();](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_9.png)
![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"));](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_10.png)
![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 с.](/data/documents/7075220c-4051-4867-861b-f4581d037819/page_11.png)
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