Qt

Qt எடுத்துக்காட்டு செயல்பாட்டு தரவுத்தளம் QSqlTableModel

Qt Example Operation Database Qsqltablemodel



இந்த கட்டுரை Qt தரவுத்தள உதாரணத்தை QSqlTableModel செயல்பாட்டை விவரிக்கிறது. விவரங்களுக்கு, உள்ளடக்கத்தைக் காண்க. இந்த கட்டுரையைப் பொருட்படுத்தாமல் உள்ளடக்கத் துண்டுகளின் ஒருங்கிணைப்பு கட்டுரை உள்ளடக்கத்திலும் ஒரு இணைப்பைக் கொண்டுள்ளது.

Qt தரவுத்தள QSqlTableModel நிகழ்வு செயல்பாடு இந்த கட்டுரையில் விவரிக்கப்பட்டுள்ள உள்ளடக்கம், உள்ளடக்கத்தைப் பார்ப்போம். கடைசியாக நாம் படிக்க மட்டுமே QSqlQueryModel பற்றிப் பேசினோம், அதைத் திருத்தக்கூடியதாக மாற்றலாம், ஆனால் நிறைய சிக்கல்கள். Qt ஒற்றை QSqlTableModel இயக்க அட்டவணையை வழங்குகிறது, அட்டவணையின் உள்ளடக்கங்களை மாற்ற வேண்டுமானால், இந்த வகுப்பை நேரடியாகப் பயன்படுத்தலாம்.



தொடர்புடைய கட்டுரை:



Qt எடுத்துக்காட்டு செயல்பாட்டு தரவுத்தளம் QSqlQueryModel பகுதி



Qt அடுத்த எடுத்துக்காட்டு செயல்பாட்டு தரவுத்தளம் QSqlQueryModel

QSqlTableModel, வகுப்பு ஒற்றை வாசிப்பு-எழுதும் தரவை SQL அட்டவணை மாதிரியைத் திருத்த முடியும். மாற்றியமைத்தல், செருக, நீக்கு, வினவல் மற்றும் வரிசைப்படுத்துதல் போன்ற அவற்றின் பொதுவான சில அம்சங்களை இங்கே நாம் அறிமுகப்படுத்தியுள்ளோம்.

நீங்கள் பேசத் தொடங்குவதற்கு முன், நாங்கள் ஒரு புதிய Qt4 குய் பயன்பாட்டுத் திட்டத்தை உருவாக்குகிறோம், இங்கே எனது திட்டம் டேபிள்மாடல் என்று அழைக்கப்படுகிறது, பின்னர் QtSQL தொகுதி, அடிப்படை வகுப்பு தேர்தல் QWidget ஐத் தேர்ந்தெடுக்கவும். திட்டம் முடிந்ததும், database.h என பெயரிடப்பட்ட C ++ தலைப்பு கோப்பைச் சேர்க்கவும், பின்வருமாறு படிக்கும் மாற்றத்தை சேர்க்கவும்:



 
  1. #ifndef DATABASE_H
  2. # DATABASE_H ஐ வரையறுக்கவும்
  3. #சேர்க்கிறது
  4. #சேர்க்கிறது
  5. #சேர்க்கிறது
  6. நிலையான பூல் createConnection ()
  7. {
  8. QSqlDatabase db = QSqlDatabase :: addDatabase (“QSQLITE”)
  9. db.setDatabaseName (“database.db”)
  10. (! db.open ()) தவறானதாக இருந்தால்
  11. QSqlQuery வினவல்
  12. query.exec (QObject :: tr (“அட்டவணை மாணவரை உருவாக்குங்கள் (id int முதன்மை விசை, பெயர் vchar)”))
  13. query.exec (QObject :: tr ('மாணவர் மதிப்புகளில் செருகவும் (0,' லியு ')'))
  14. query.exec (QObject :: tr ('மாணவர் மதிப்புகளில் செருகவும் (1,' கேங் ')'))
  15. query.exec (QObject :: tr ('மாணவர் மதிப்புகளில் செருகவும் (2,' WANG ')'))
  16. உண்மைக்குத் திரும்பு
  17. }
  18. #endif // DATABASE_H

தரவுத்தளத்தில் சீன மொழியைப் பயன்படுத்த, நாங்கள் tr QObject வகுப்பு () செயல்பாட்டைப் பயன்படுத்தினோம். பின்வரும் முக்கிய () செயல்பாட்டில், சீனர்களை ஆதரிக்க பொருத்தமான குறியீட்டையும் சேர்க்க வேண்டும்.

Main.cpp கோப்பு பின்வருமாறு மாறுகிறது:

 
  1. #சேர்க்கிறது
  2. # அடங்கும் “widget.h”
  3. # அடங்கும் “database.h”
  4. #சேர்க்கிறது
  5. int main (int argc, char * argv [])
  6. {
  7. QApplication a (argc, argv)
  8. QTextCodec :: setCodecForTr (QTextCodec :: codecForLocale ())
  9. if (! createConnection ())
  10. திரும்ப 1
  11. சாளரம் w
  12. w.show ()
  13. a.exec () ஐத் திரும்புக
  14. }

இங்கே நாம் widget.ui ஐ திறக்கிறோம், வடிவமைப்பு இடைமுகம் பின்வருமாறு:

Qt QSqlTableModel

அதில் உறுப்பினர் மற்றும் அட்டவணை காட்சி வரி திருத்து, மீதமுள்ள உறுப்பினர் சில பொத்தான்கள்.

Widget.h பின்னர் தலைப்பு கோப்பில் சேர்க்கப்பட்டது: # அடங்கும்

தனிப்பட்ட பொருள்களில் அறிவிக்கப்பட்டது: QSqlTableModel * மாதிரி

ஏனென்றால், பொருள் மாதிரியை வேறு செயல்பாட்டில் பயன்படுத்த விரும்புகிறோம், எனவே அதை அறிவிக்க இங்கே இருக்கிறோம்.

கோப்பு கட்டமைப்பாளருக்கு நாங்கள் widget.cpp பின்வரும் குறியீட்டைச் சேர்க்கிறோம்:

 
  1. மாதிரி = புதிய QSqlTableModel (இது)
  2. model-> setTable (“மாணவர்”)
  3. model-> setEditStrategy (QSqlTableModel :: OnManualSubmit)
  4. model-> select () // முழு அட்டவணையின் அனைத்து வரிசைகளையும் தேர்ந்தெடுக்கவும்
  5. // model-> removeColumn (1) // ஒரு நெடுவரிசை பெயர் பண்புக்கூறைக் காட்ட வேண்டாம், பதிவு செய்யும் நேரம் சேர்க்கப்பட்டால், சொத்தின் கூடுதல் மதிப்பு இல்லை
  6. ui-> tableView-> setModel (மாதிரி)
  7. // ui-> tableView-> setEditTriggers (QAbstractItemView :: NoEditTriggers) // இது திருத்த முடியாது

இந்த வழக்கில் நிரல் இயங்குகிறது, விளைவு பின்வருமாறு:

Qt QSqlTableModel

நீங்கள் பார்க்க முடியும், இந்த மாதிரி SQL அறிக்கையிலிருந்து முற்றிலும் வெளியேறிவிட்டது, நாங்கள் தேர்ந்தெடுக்கப்பட்ட () செயல்பாட்டை மட்டுமே செய்ய வேண்டும் முழு அட்டவணையையும் தேட முடியும். குறியீட்டின் இரண்டு வரிகளுக்கு மேல் கருத்து தெரிவிக்கப்பட்டுள்ளது, அவற்றின் விளைவுகளை சோதிக்க நீங்கள் குழப்பமடையலாம்.

முதலில், மாற்றியமைக்கும் செயல்பாடு.

1. பின்வருமாறு மாற்றியமைக்கப்பட்ட 'சமர்ப்பி திருத்து' பொத்தானைக் கிளிக் நிகழ்வு ஸ்லாட் செயல்பாட்டை உள்ளிடுகிறோம்:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_clicked () // மாற்றங்களைச் செய்யுங்கள்
  2. {
  3. model-> தரவுத்தள () பரிவர்த்தனை (). // பரிவர்த்தனை செயல்பாட்டைத் தொடங்குங்கள்
  4. if (model-> submitAll ()) {
  5. மாதிரி-> தரவுத்தளம் () கமிட் (). // சமர்ப்பிக்கவும்
  6. } else {
  7. மாதிரி-> தரவுத்தளம் () ரோல்பேக் (). // ரோல்பேக்
  8. QMessageBox :: எச்சரிக்கை (இது, tr (“tableModel”),
  9. tr ('தரவுத்தள பிழை:% 1')
  10. .arg (model-> lastError (). உரை ()))
  11. }
  12. }

இங்கே பயன்படுத்தப்படும் பரிவர்த்தனை செயல்பாடுகள், உண்மையில் செயல்பாட்டைச் செய்வது மாதிரி-> சமர்ப்பித்தல் அனைத்து () ஒன்றாகும், இது எல்லா மாற்றங்களையும் செய்கிறது.

2, 'மாற்றங்களைச் செயல்தவிர்' பொத்தானைக் கிளிக் நிகழ்வு ஸ்லாட் செயல்பாட்டில், மற்றும் மாற்றங்கள் பின்வருமாறு:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_2_clicked () // மாற்றங்களைச் செயல்தவிர்
  2. {
  3. model-> revertAll ()
  4. }

இது ஒரு எளிய குறியீடு மட்டுமே.

நாம் தலைப்பு கோப்புகளை widget.cpp கோப்பில் சேர்க்க வேண்டும்:

 
  1. #சேர்க்கிறது
  2. #சேர்க்கிறது

இந்த வழக்கில் நிரல் இயங்குகிறது, விளைவு பின்வருமாறு:

Qt QSqlTableModel

'லி கியாங்கிற்கு' கேங் 'செய்வோம்,' மாற்றங்களைச் செயல்தவிர் 'என்பதைக் கிளிக் செய்தால், அது' சென் கேங் 'ஐ மீண்டும் படிக்கும், மேலும்' சமர்ப்பி மாற்றியமைத்தல் 'என்பதைக் கிளிக் செய்தால் அது தரவுத்தளத்தில் சேமிக்கப்படும், பின்னர்' செயல்தவிர் 'என்பதைக் கிளிக் செய்க மாற்றங்கள் 'திருத்தத்தில் மீண்டும் வரவில்லை.

பார்க்க முடியும், இந்த மாதிரியானது மாதிரியின் அனைத்து மாற்றங்களையும் சேமிக்க முடியும், நாங்கள் மாற்றங்களைச் செய்யும்போது மட்டுமே, உண்மையில் தரவுத்தளத்தில் எழுதப்படும். நிச்சயமாக, அதன் பாதுகாப்பு மூலோபாயத்தின் ஆரம்பத்தில் நாங்கள் அமைத்ததே இதற்குக் காரணம்:

 
  1. model-> setEditStrategy (QSqlTableModel :: OnManualSubmit)

OnManualSubmit நடைமுறைக்கு ஒரு மாற்றத்தை செய்ய விரும்புகிறோம் என்பதைக் காட்டுகிறது.

இரண்டாவது, வினவல் செயல்பாடு.

1. 'தேடல்' பொத்தானின் கிளிக் நிகழ்வு ஸ்லாட் செயல்பாடு மாற்றங்களை பின்வருமாறு உள்ளிடுகிறோம்:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_7_clicked () // வினவல்
  2. {
  3. QString name = ui-> lineEdit-> text ()
  4. model-> setFilter (QObject :: tr ('name ='% 1 '') arg (name).) // பெயரால் திரையிடல்
  5. model-> select () // முடிவுகளைக் காண்பி
  6. }

நாங்கள் setFilter () செயல்பாட்டு திறவுச்சொல் வடிகட்டலைப் பயன்படுத்துகிறோம், இந்த செயல்பாடு முழு வினவல் முடிவு தொகுப்பிலும் செய்யப்படுகிறது. மாறிகளைப் பயன்படுத்த, tr QObject class () செயல்பாட்டைப் பயன்படுத்தினோம்.

2. 'முழு வடிவத்திற்குத் திரும்பு' பொத்தானின் கிளிக் நிகழ்வு ஸ்லாட் செயல்பாடு மாற்றங்களை பின்வருமாறு உள்ளிடுகிறோம்:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_8_clicked () // முழு அட்டவணைக்குத் திரும்பு
  2. {
  3. model-> setTable ('மாணவர்') // மறு சங்க அட்டவணை
  4. model-> முழு அட்டவணையின் உள்ளடக்கங்களையும் மீண்டும் காண்பிக்க () // ஐத் தேர்ந்தெடுக்கவும்
  5. }

முழு அட்டவணையின் உள்ளடக்கங்களையும் மீண்டும் காண்பிக்க, அட்டவணையை மீண்டும் இணைக்க வேண்டும்.

இயக்க முடிவுகள் பின்வருமாறு:

Qt QSqlTableModel

நாங்கள் ஒரு பெயரை உள்ளிடுகிறோம், 'தேடல்' பொத்தானைக் கிளிக் செய்க, நீங்கள் பதிவுகளைக் காட்டலாம். பின்னர் 'முழு வடிவத்திற்குத் திரும்பு' பொத்தானைக் கிளிக் செய்க.

மூன்றாவது, வரிசையாக்க செயல்பாடு.

நாங்கள் 'ஐடி மூலம் ஏறுவரிசையில்' இருக்கிறோம் மற்றும் ஐடி மூலம் இறங்கு வரிசையில் நிகழ்வு ஸ்லாட் செயல்பாட்டைக் கிளிக் செய்க, மாற்றங்கள் பின்வருமாறு: மாற்றங்கள் பின்வருமாறு:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_5_clicked () // ஏறுதல்
  2. {
  3. model-> setSort (0, Qt :: AscendingOrder) // ஐடி பண்புக்கூறு, அதாவது, 0 வது நெடுவரிசை, ஏறுவரிசையில்
  4. model-> தேர்ந்தெடு ()
  5. }
  6. வெற்றிட விட்ஜெட் :: on_pushButton_6_clicked () // இறங்கு
  7. {
  8. model-> setSort (0, Qt :: DescendingOrder)
  9. model-> தேர்ந்தெடு ()
  10. }

வரிசைப்படுத்த இங்கே setSort () செயல்பாட்டைப் பயன்படுத்தினோம், அதற்கு இரண்டு அளவுருக்கள் உள்ளன, முதல் அளவுரு பல வகை பண்புக்கூறு தலைப்புகளில் முதல் இடமிருந்து வலமாக குறிக்கிறது, இடதுபுறம் 0 வது சொத்து, இது ஐடி பண்பு. இரண்டாவது அளவுரு ஒரு வரிசையாக்க முறை, ஏறுவரிசை மற்றும் இறங்கு இரண்டு வகைகள் உள்ளன.

நிரலை இயக்கவும், விளைவு பின்வருமாறு:

Qt QSqlTableModel

இது விளைவுகளுக்குப் பிறகு 'ஐடி மூலம் இறங்கு வரிசை' பொத்தானை அழுத்துகிறது.

நான்காவது, நீக்குதல் செயல்பாடு.

'தேர்ந்தெடுக்கப்பட்ட வரிசையை நீக்கு' பொத்தானை கிளிக் நிகழ்வு ஸ்லாட் செயல்பாட்டை உள்ளிடுகிறோம், பின்வரும் மாற்றங்களைச் செய்கிறோம்:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_4_clicked () // தற்போதைய வரிசையை நீக்கு
  2. {
  3. int curRow = ui-> tableView-> currentIndex (). வரிசை ()
  4. // தேர்ந்தெடுக்கப்பட்ட வரிசையைப் பெறுங்கள்
  5. model-> removeRow (curRow)
  6. // வரிசையை நீக்கு
  7. int ok = QMessageBox :: எச்சரிக்கை (இது, tr ('தற்போதைய வரியை நீக்கு!'), tr ('நீங்கள் உறுதியாக இருக்கிறீர்களா'
  8. 'தற்போதைய வரியை இன்னும் நீக்கவா?'),
  9. QMessageBox :: ஆம், QMessageBox :: இல்லை)
  10. if (ok == QMessageBox :: இல்லை)
  11. {
  12. model-> revertAll () // அகற்றப்படாவிட்டால், திரும்பப் பெறுதல்
  13. }
  14. else model-> submitAll () // இல்லையெனில் சமர்ப்பிக்கவும், தரவுத்தளத்தில் வரிசையை நீக்கவும்
  15. }

முதல் மாதிரியில் சேமிக்கப்பட்ட வரிசைகளை இங்கே நீக்கும், நாங்கள் சமர்ப்பித்தபின் () செயல்பாட்டைச் செய்தபின் தரவுத்தளத்தில் வரிசையை நீக்கும். வரிசையை நீக்க விரும்புகிறீர்களா என்பதை பயனரைத் தேர்வுசெய்ய இங்கே ஒரு எச்சரிக்கை பெட்டியைப் பயன்படுத்துகிறோம்.

இயக்க முடிவுகள் பின்வருமாறு:

Qt QSqlTableModel

இரண்டாவது வரிசையில் கிளிக் செய்து, பின்னர் 'தேர்ந்தெடுக்கப்பட்ட வரிசையை நீக்கு' பொத்தானைக் கிளிக் செய்க, எச்சரிக்கை பெட்டி. அட்டவணையின் இரண்டாவது வரிசையின் முன்னால் ஒரு சிறிய ஆச்சரியக்குறி இருந்தது, வரி மாற்றப்பட்டிருப்பதைக் குறிக்கிறது, ஆனால் தரவுத்தளத்தில் உண்மையான மாற்றங்கள் எதுவும் இல்லை, தரவு அழுக்கு தரவு (டர்ட்டி டேட்டா) . தரவுத்தளத்தில் உள்ள 'ஆம்' பொத்தானை தரவு நீக்கும்போது, ​​நீங்கள் 'இல்லை' என்பதை அழுத்தினால், மாற்றம் ரத்து செய்யப்படும்.

ஐந்தாவது, செருகும் செயல்பாடு.

'பதிவைச் சேர்' பொத்தானின் கிளிக் நிகழ்வு ஸ்லாட் செயல்பாடு மாற்றங்களை பின்வருமாறு உள்ளிடுகிறோம்:

 
  1. வெற்றிட விட்ஜெட் :: on_pushButton_3_clicked () // பதிவைச் செருகவும்
  2. {
  3. int rowNum = model-> rowCount () // அட்டவணையில் உள்ள வரிசைகளின் எண்ணிக்கையைப் பெறுங்கள்
  4. int id = 10
  5. model-> insertRow (rowNum) // ஒரு வரியைச் சேர்க்கவும்
  6. model-> setData (model-> index (rowNum, 0), id)
  7. // model-> submitAll () // ஐ நேரடியாக சமர்ப்பிக்கலாம்
  8. }

கடைசி வரிசையில் அட்டவணையைச் சேர்ப்போம், ஏனென்றால் மாணவர் ஐடி எண்ணில் அட்டவணையை அமைப்பது முதன்மை விசையாகும், எனவே ஐடி பண்புக்கூறு சேர்க்க புதிய வரியைச் சேர்க்க மதிப்பு செட் டேட்டா செயல்பாடு இருக்க வேண்டும், அல்லது வரிசைகளைச் சேர்ப்பது வெற்றிகரமாக இருக்காது. சமர்ப்பிக்க இங்கே நீங்கள் நேரடியாக submitAll () செயல்பாட்டை அழைக்கலாம், சமர்ப்பிக்க 'சமர்ப்பி மாற்றியமை' பொத்தானையும் பயன்படுத்தலாம்.

நிரலை இயக்கவும், விளைவு பின்வருமாறு:

Qt QSqlTableModel

'பதிவைச் சேர்' பொத்தானை அழுத்திய பின், ஒரு வரியைச் சேர்க்கவும், ஆனால் கோட்டின் முன் ஒரு நட்சத்திரம் உள்ளது, நாம் 'சமர்ப்பி மாற்றியமை' பொத்தானை அழுத்தினால், நட்சத்திரம் மறைந்துவிடும். நிச்சயமாக, அகற்றப்பட்ட மேலே உள்ள குறியீடு செயல்பாடு குறித்த கருத்துகளை நாங்கள் சமர்ப்பித்தால், நட்சத்திர எண் இருக்கும்.

இந்த மாதிரி மிகவும் சக்திவாய்ந்ததாக இருப்பதை நாம் காணலாம், மேலும் SQL அறிக்கையிலிருந்து முற்றிலும் வெளியேறியது, தரவுத்தளத்தைப் பற்றி உங்களுக்கு அதிகம் தெரியாவிட்டாலும், நீங்கள் அதை மிகவும் பொதுவான செயல்பாடுகளுக்கும் பயன்படுத்தலாம். நாங்கள் பார்த்தோம், இந்த மாதிரி ஒரு இடையகத்தை வழங்குகிறது, முதலில் சேமித்ததை நீங்கள் மாற்றலாம், நாங்கள் செயல்பாட்டைச் செய்யும்போது, ​​உண்மையில் தரவுத்தளத்தை மாற்றச் செல்லுங்கள். நிச்சயமாக, இந்த மாதிரி முந்தைய மாதிரியை விட மேம்பட்டது, எல்லா செயல்பாடுகளுக்கும் முன்னால் பேசுவது இங்கே செயல்படுத்தப்படலாம்.

இந்த கட்டுரை www.yafeilinux.com இல் தோன்றியது

சுருக்கம்: Qt உள்ளடக்க தரவுத்தளம் QSqlTableModel ஒரு செயல்பாட்டு அறிமுகத்தின் எடுத்துக்காட்டு முடிந்துவிட்டது, இந்த கட்டுரையை நீங்கள் பயனுள்ளதாகப் படிப்பீர்கள் என்று நம்புகிறேன், வேளாண்மை மற்றும் தகவல்களைப் படிப்பது தயவுசெய்து எடிட்டர் சாய்ஸைப் பார்க்கவும்.