ផ្ទះ ផ្កាក្នុងផ្ទះ ទាញយក Aida 64 សម្រាប់ Windows 7. Aida64 Extreme Edition កំណែជាភាសារុស្សី។ កម្មវិធីទូរស័ព្ទ AIDA64

ទាញយក Aida 64 សម្រាប់ Windows 7. Aida64 Extreme Edition កំណែជាភាសារុស្សី។ កម្មវិធីទូរស័ព្ទ AIDA64

តោះបង្កើតកម្មវិធីមូលដ្ឋានទិន្នន័យសាមញ្ញមួយដែលបង្ហាញព័ត៌មានពីតារាង Tourists និងតារាងព័ត៌មានទេសចរណ៍ដែលភ្ជាប់ជាមួយកំណត់ត្រាបច្ចុប្បន្ននៅក្នុងតារាង Tourists ពីមូលដ្ឋានទិន្នន័យ Microsoft Access ។

ដើម្បីធ្វើដូចនេះយើងនឹងបង្កើតកម្មវិធីវីនដូទទេ។ រូបរាងនៃបរិស្ថាន

ការអភិវឌ្ឍន៍ត្រូវបានបង្ហាញក្នុងរូបភាពទី 39 ។

អង្ករ។ 39. កម្មវិធីទទេ

រូបភាពទី 39 រំលេចក្រុមនៃសមាសធាតុ "ទិន្នន័យ" ("ទិន្នន័យ") ដែលមានសមាសធាតុសម្រាប់ចូលប្រើ និងរៀបចំទិន្នន័យ។

ការចងទិន្នន័យមូលដ្ឋានទិន្នន័យទៅនឹងទម្រង់ត្រូវបានអនុវត្តដោយសមាសភាគ "ប្រភពចង"។ តោះផ្ទេរវាទៅទម្រង់។ បនា្ទាប់ពីដាក់វានៅលើទម្រង់ បរិយាកាសអភិវឌ្ឍន៍ត្រូវយកទម្រង់ខាងក្រោម (រូបភាពទី 40)។

អង្ករ។ 40. សមាសធាតុប្រភពចងនៅលើទម្រង់

សមាសភាគគឺមិនអាចមើលឃើញទេ ដូច្នេះវាត្រូវបានបង្ហាញនៅក្នុងបន្ទះបន្ថែម។ លក្ខណសម្បត្តិសំខាន់នៃសមាសភាគគឺ DataSource property ដែលចង្អុលទៅប្រភពទិន្នន័យ។ តាមលំនាំដើម ទ្រព្យសម្បត្តិគឺទទេ ដូច្នេះអ្នកត្រូវបង្កើតតម្លៃរបស់វា។ នៅពេលដែលលក្ខណសម្បត្តិនេះត្រូវបានជ្រើសរើស បង្អួចខាងក្រោមនឹងបង្ហាញនៅក្នុងបង្អួចលក្ខណសម្បត្តិ (រូបភាព 41)។

អង្ករ។ 41. បញ្ជីប្រភពទិន្នន័យ

បច្ចុប្បន្នបញ្ជីគឺទទេ ដូច្នេះអ្នកត្រូវបង្កើតប្រភពទិន្នន័យថ្មីដោយជ្រើសរើសពាក្យបញ្ជា "បន្ថែមប្រភពទិន្នន័យគម្រោង" ដើម្បីបង្កើតប្រភពទិន្នន័យថ្មី ហើយភ្ជាប់ទៅវា។ ប្រអប់ខាងក្រោមលេចឡើង (រូបភាព 42) ។

អង្ករ។ 42. បញ្ជីប្រភពទិន្នន័យ

ប្រអប់នេះផ្តល់នូវជម្រើសខាងក្រោមនៃប្រភពទិន្នន័យ៖

មូលដ្ឋានទិន្នន័យ - មូលដ្ឋានទិន្នន័យ;

សេវាកម្ម - សេវាកម្មនេះគឺជាសេវាកម្មមួយចំនួនដែលផ្តល់ទិន្នន័យ។ ភាគច្រើនជាញឹកញាប់នេះគឺជាសេវាកម្មបណ្តាញ។

Object - ជាវត្ថុសម្រាប់ជ្រើសរើសវត្ថុដែលនឹងបង្កើតទិន្នន័យ និងវត្ថុសម្រាប់ធ្វើការជាមួយពួកគេ។

ក្នុងករណីរបស់យើងអ្នកត្រូវជ្រើសរើសធាតុ "មូលដ្ឋានទិន្នន័យ" ។ បង្អួចជ្រើសរើសការតភ្ជាប់ទិន្នន័យលេចឡើង (រូបភាព 43) ។

អង្ករ។ 43. ការជ្រើសរើសការតភ្ជាប់ទិន្នន័យ

គោលបំណងនៃប្រអប់នេះគឺដើម្បីបង្កើតខ្សែតភ្ជាប់ដែលពិពណ៌នាអំពីប៉ារ៉ាម៉ែត្រនៃការតភ្ជាប់សម្រាប់ម៉ាស៊ីន ADO ដូចជាប្រភេទនៃមូលដ្ឋានទិន្នន័យ ទីតាំងរបស់វា ឈ្មោះអ្នកប្រើប្រាស់ លក្ខណៈសុវត្ថិភាពជាដើម។

បញ្ជីទម្លាក់ចុះនៃប្រអប់មានការតភ្ជាប់ដែលបានបង្កើតពីមុនទាំងអស់។ ប្រសិនបើការតភ្ជាប់ដែលត្រូវការមិនមាននៅក្នុងបញ្ជីទេនោះប៊ូតុង "ការតភ្ជាប់ថ្មី" គួរតែត្រូវបានប្រើ។ ការចុចប៊ូតុងនាំឱ្យរូបរាងនៃប្រអប់ខាងក្រោម (រូបភាព 44) ។

ប្រអប់នេះជ្រើសរើសប្រភេទប្រភពទិន្នន័យ (ក្នុងករណីនេះ Microsoft Access) ឈ្មោះនៃមូលដ្ឋានទិន្នន័យ (ក្នុងករណីនេះឈ្មោះ និងទីតាំងនៃឯកសារមូលដ្ឋានទិន្នន័យ) ឈ្មោះអ្នកប្រើប្រាស់ និងពាក្យសម្ងាត់ដែលប្រើដើម្បីភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ។ ប៊ូតុង "កម្រិតខ្ពស់" អនុញ្ញាតឱ្យអ្នកកំណត់ប៉ារ៉ាម៉ែត្រមួយចំនួនធំដែលទាក់ទងនឹងផ្នែកផ្សេងៗនៃម៉ាស៊ីន ADO ។ ដោយប្រើប៊ូតុង "សាកល្បងការតភ្ជាប់" នឹងធ្វើឱ្យប្រាកដថាប៉ារ៉ាម៉ែត្រដែលបានបញ្ចូលគឺត្រឹមត្រូវហើយការតភ្ជាប់កំពុងដំណើរការ។

អង្ករ។ 44. បង្កើតការតភ្ជាប់ថ្មី។

ជំហានចុងក្រោយនៃប្រអប់គឺការជ្រើសរើសតារាងទាំងនោះ ឬវត្ថុមូលដ្ឋានទិន្នន័យផ្សេងទៀតដែលត្រូវការនៅក្នុងប្រភពទិន្នន័យនេះ។ បង្អួចជ្រើសរើសត្រូវបានបង្ហាញក្នុងរូបភាពទី 45 ។

អង្ករ។ 45. ការជ្រើសរើសតារាងដែលត្រូវការ

នៅក្នុងបង្អួចនេះ តារាង "អ្នកទេសចរ" និង "ព័ត៌មានអំពីភ្ញៀវទេសចរ" ត្រូវបានជ្រើសរើស។ ដោយសារគ្មានវត្ថុក្រៅពីតារាងត្រូវបានបង្កើតនៅក្នុងមូលដ្ឋានទិន្នន័យ មានតែតារាងប៉ុណ្ណោះដែលត្រូវបានបង្ហាញក្នុងរូបភាពទី 45 ។ វាបញ្ចប់ការបង្កើតប្រភពទិន្នន័យ។ បន្ទាប់ពីចុចប៊ូតុង "បញ្ចប់" នៅជាប់នឹងសមាសភាគ BindingSource សមាសភាគសំណុំទិន្នន័យនឹងបង្ហាញនៅលើទម្រង់។

ឥឡូវនេះទិន្នន័យដែលបានតភ្ជាប់ខាងលើត្រូវបង្ហាញនៅលើទម្រង់។ វិធីសាមញ្ញបំផុតដើម្បីបង្ហាញទិន្នន័យគឺត្រូវប្រើសមាសភាគ DataGridView ពីក្រុមសមាសភាគទិន្នន័យ។ សមាសធាតុគឺមើលឃើញហើយមើលទៅដូចនេះនៅលើទម្រង់ (រូបភាព 46) ។

អង្ករ។ 46. ​​​សមាសភាគ DataGridView

បង្អួចការកំណត់សមាសភាគលេចឡើងភ្លាមៗ ដែលកំណត់សមត្ថភាពកែសម្រួលទិន្នន័យរបស់វា៖ "បើកការកែសម្រួល" ("បើកការបន្ថែម"), "បើកការកែសម្រួល" ("បើកការកែសម្រួល"), "បើកការលុប" ("បើកការលុប"); សមត្ថភាពក្នុងការផ្លាស់ប្តូរលំដាប់នៃជួរឈរ៖ "បើកលទ្ធភាពផ្លាស់ប្តូរលំដាប់ជួរឈរ" ("បើកដំណើរការលំដាប់ជួរឈរឡើងវិញ"); ក៏ដូចជាសមត្ថភាពក្នុងការខ្ទាស់នៅក្នុងធុងមេ។

ដើម្បីឱ្យសមាសធាតុអាចបង្ហាញទិន្នន័យ អ្នកត្រូវតែជ្រើសរើសប្រភពទិន្នន័យនៅក្នុងបញ្ជីទម្លាក់ចុះ។ ការជ្រើសរើសបញ្ជីទម្លាក់ចុះនាំឱ្យរូបរាងនៃប្រអប់ខាងក្រោម (រូបភាព 47) ។

អង្ករ។ 47. ការជ្រើសរើសប្រភពទិន្នន័យសម្រាប់ DataGridView

ក្នុងករណីនេះ យើងបានជ្រើសរើសតារាង "ទេសចរណ៍" ជាប្រភពទិន្នន័យ។ ជម្រើសនេះផ្លាស់ប្តូរទម្រង់អេក្រង់ដូចខាងក្រោម (រូបភាព 48) ។

អង្ករ។ 48. សមាសភាគ DataGridView បង្ហាញរចនាសម្ព័ន្ធនៃតារាង

តួរលេខបង្ហាញថាមានធាតុផ្សំ BindingSource មួយផ្សេងទៀត និងសមាសភាគ TableAdapter ដែលធ្វើការជាមួយតារាង "Tourists" ។ សូមចំណាំថានៅក្នុងពេលរចនា ឬអំឡុងពេលអភិវឌ្ឍន៍ ទិន្នន័យពីតារាងមិនត្រូវបានបង្ហាញទេ។

ឥឡូវអ្នកត្រូវបង្ហាញទិន្នន័យពីតារាងពាក់ព័ន្ធ "ព័ត៌មានទេសចរណ៍"។ ដើម្បីធ្វើដូច្នេះ ចូរយើងដាក់សមាសភាគ DataGridView មួយផ្សេងទៀតនៅលើទម្រង់ ហើយជ្រើសរើសដូចខាងក្រោមជាប្រភពទិន្នន័យ (រូបភាព 49) ។

អង្ករ។ 49. ការជ្រើសរើសប្រភពទិន្នន័យសម្រាប់ DataGridView ទីពីរ

នៅទីនេះ ប្រភពទិន្នន័យមិនមែនជាតារាង "ព័ត៌មានទេសចរណ៍" ទេ ប៉ុន្តែជាតំណភ្ជាប់ (ប្រភពចង) រវាងតារាង "អ្នកទេសចរ" និង "ព័ត៌មានទេសចរណ៍" ។ ការជ្រើសរើសនេះធានាថាមានតែជួរទាំងនោះនៅក្នុងតារាងព័ត៌មានទេសចរណ៍ដែលទាក់ទងនឹងជួរបច្ចុប្បន្ននៅក្នុងតារាងទេសចរណ៍ប៉ុណ្ណោះដែលត្រូវបានជ្រើសរើសពីតារាងព័ត៌មានទេសចរណ៍។ វាក៏ធានាថាទិន្នន័យដែលពាក់ព័ន្ធត្រូវបានធ្វើបច្ចុប្បន្នភាព និងលុបបានត្រឹមត្រូវ។ ប្រតិបត្តិការនៃកម្មវិធីលទ្ធផលត្រូវបានបង្ហាញក្នុងរូបភាពទី 50 ។

អង្ករ។ 50. កម្មវិធីមូលដ្ឋានទិន្នន័យនៅក្នុងសកម្មភាព

ការរុករកតាមទិន្នន័យដោយប្រើគ្រាប់ចុចព្រួញគឺមិនងាយស្រួលទេ។ ដើម្បីសម្រួលការរុករកទិន្នន័យ មានធាតុផ្សំ BindingNavigator ។ ចូរយើងដាក់វានៅលើទម្រង់ (រូបភាព 51) ។

អង្ករ។ 51. សមាសភាគ BindingNavigator នៅលើទម្រង់

សមាសភាគនេះអនុញ្ញាតឱ្យអ្នករុករករវាងធាតុតារាង បន្ថែម និងលុបជួរតារាង។ លក្ខណៈពិសេស និងរូបរាងរបស់សមាសភាគគឺអាចប្ដូរតាមបំណងបានព្រោះវាជារបារម៉ឺនុយ ToolStripContainer។

ទ្រព្យសម្បត្តិដែលកំណត់តារាងដើម្បីរុករកគឺជាទ្រព្យសម្បត្តិ BindingSource ។ កំណត់តម្លៃនៃអចលនទ្រព្យនេះទៅជា "touristsBindingSource"។ នៅក្នុងប្រតិបត្តិការសមាសភាគមើលទៅដូចនេះ (រូបភាព 52) ។

អង្ករ។ 52. សមាសភាគ BindingNavigator នៅកន្លែងធ្វើការ

ការកែសម្រួលទិន្នន័យនៅក្នុងក្រឡានៃសមាសភាគ DataGridView ជាមួយនឹងការកំណត់សមស្របគឺអាចធ្វើទៅបាន ប៉ុន្តែមានការរអាក់រអួល និងមិនមានហេតុផល។ ជាពិសេស វាពិបាកក្នុងការពិនិត្យមើលតម្លៃដែលបានបញ្ចូលសម្រាប់កំហុស។ ដូច្នេះសម្រាប់តារាង "អ្នកទេសចរ" យើងនឹងបង្កើតទម្រង់អេក្រង់ដែលអនុញ្ញាតឱ្យអ្នកបង្ហាញទិន្នន័យនៅក្នុងសមាសធាតុ TextBox និងកែសម្រួលពួកវា។ ដើម្បីធ្វើដូចនេះសូមដាក់កុងតឺន័រប្រភេទ Panel នៅលើទម្រង់ ហើយសមាសភាគ TextBox បីនៅលើវាដូចខាងក្រោម (រូបភាព 53) ។

អង្ករ។ 53. បន្ទះអេក្រង់សម្រាប់កែសម្រួលកំណត់ត្រានៃតារាង "ភ្ញៀវទេសចរ"

ឥឡូវអ្នកត្រូវចងសមាសធាតុ TextBox ទៅនឹងវាលដែលត្រូវគ្នានៃតារាង "Tourists"។ ដើម្បីធ្វើដូច្នេះ សូមប្រើលក្ខណសម្បត្តិពី DataBindings - ក្រុមកម្រិតខ្ពស់ ដែលបង្ហាញក្នុងរូបភាព 54 ។

អង្ករ។ 54. "DataBindings - កម្រិតខ្ពស់" ទ្រព្យសម្បត្តិ

ការជ្រើសរើសលក្ខណសម្បត្តិនេះនាំទៅដល់រូបរាងនៃប្រអប់ដែលបង្ហាញក្នុងរូបភាពទី 55។ ប្រអប់នេះអនុញ្ញាតឱ្យអ្នកមិនត្រឹមតែចងទិន្នន័យប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងកំណត់ព្រឹត្តិការណ៍ដែលទិន្នន័យនឹងត្រូវបានអាប់ដេត ក៏ដូចជាការធ្វើទ្រង់ទ្រាយទិន្នន័យនៅពេលដែលពួកវាត្រូវបានបង្ហាញ។

សម្រាប់សមាសភាគ TextBox ខាងលើនៅក្នុងបញ្ជីទម្លាក់ចុះការចង សូមជ្រើសរើសប្រភពទិន្នន័យ "touristsBmdmgSource" និងវាលប្រភព - "នាមត្រកូល" ។ សម្រាប់ផ្នែកកណ្តាល និងខាងក្រោមនៃ TextBox យើងនឹងជ្រើសរើសប្រភពទិន្នន័យដូចគ្នា និងវាល "First Name" និង "Patronymic" រៀងគ្នា។

កម្មវិធីដែលបានបង្កើតនៅក្នុងប្រតិបត្តិការមើលទៅដូចនេះ (រូបភាព 56) ។

អង្ករ។ 55. ប្រអប់ប្រអប់សម្រាប់លក្ខណសម្បត្តិ "DataBindings - Advanced"

អង្ករ។ 56. ការចងទិន្នន័យទៅនឹងសមាសធាតុដែលមើលឃើញ

ទោះយ៉ាងណាក៏ដោយ នៅពេលដែលមានការផ្លាស់ប្តូរ ទិន្នន័យថ្មីទាំងអស់នៅតែមាននៅលើទម្រង់បែបបទប៉ុណ្ណោះ។ ពួកវាមិនត្រូវបានរក្សាទុកក្នុងមូលដ្ឋានទិន្នន័យទេ ហើយនៅពេលដែលកម្មវិធីត្រូវបានហៅម្តងទៀត ពិតណាស់ពួកគេនឹងអវត្តមាន។ នេះគឺដោយសារតែទិន្នន័យត្រូវបានផ្ទុកទៅក្នុងវត្ថុ DataSet ដែលជាច្បាប់ចម្លងក្នុងអង្គចងចាំរបស់តារាង។ សកម្មភាពទាំងអស់ត្រូវបានអនុវត្តនៅលើច្បាប់ចម្លងនេះ។ ដើម្បីឱ្យការផ្លាស់ប្តូរត្រូវបានឆ្លុះបញ្ចាំងនៅក្នុងមូលដ្ឋានទិន្នន័យ អ្នកត្រូវតែប្រតិបត្តិវិធីសាស្ត្រអាប់ដេតនៃថ្នាក់ TableAdapter ។ ដូច្នេះនៅក្នុងកម្មវិធីដែលកំពុងត្រូវបានបង្កើតឡើង ចាំបាច់ត្រូវដាក់ប៊ូតុង "ធ្វើបច្ចុប្បន្នភាព" ហើយសរសេរកូដកម្មវិធីខាងក្រោមទៅកាន់កម្មវិធីដោះស្រាយព្រឹត្តិការណ៍ចុច៖

touristsTableAdapteGUpdate(bDTur_firmDataSet); tourism_informationTableAdapter.Update(bDTur_firmDataSet);

លេខកូដនេះធ្វើបច្ចុប្បន្នភាពព័ត៌មាននៅក្នុងតារាង "ទេសចរណ៍" និង "ព័ត៌មានទេសចរណ៍" ដែលផ្តល់ដោយប្រភពទិន្នន័យ។ ចំណាំថាវិធីសាស្ត្រនេះផ្ទុកលើសទម្ងន់ ហើយវ៉ារ្យ៉ង់របស់វាអនុញ្ញាតឱ្យអ្នកធ្វើបច្ចុប្បន្នភាពទាំងជួរតារាងតែមួយ និងក្រុមជួរ។

DbVisualizer 9.1.5

DbVisualizer គឺជាឧបករណ៍មូលដ្ឋានទិន្នន័យសម្រាប់អ្នកអភិវឌ្ឍន៍ និងអ្នកគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ ដែលជួយអ្នកទាំងការអភិវឌ្ឍន៍ និងថែទាំមូលដ្ឋានទិន្នន័យរបស់អ្នក។

Firebird 2.5.2

Firebird គឺជាមូលដ្ឋានទិន្នន័យទំនាក់ទំនងដែលផ្តល់ជូននូវលក្ខណៈពិសេសស្តង់ដារ ANSI SQL ជាច្រើនដែលដំណើរការលើ Linux, Windows និងភាពខុសគ្នានៃវេទិកា Unix ។ Firebird ផ្តល់នូវភាពស្របគ្នាដ៏ល្អ ដំណើរការខ្ពស់ និងការគាំទ្រភាសាដ៏មានអានុភាពសម្រាប់ដំណើរការដែលបានរក្សាទុក និងការកេះ។

Reitec.PMM 1.2.1.0

Reitec.PMM គឺជាឧបករណ៍ឥតគិតថ្លៃសម្រាប់ការគ្រប់គ្រងឧបករណ៍សាកល្បងដែលជាផ្នែកមួយនៃការធានាគុណភាព។

wowbase 1.1

បង្កើតមូលដ្ឋានទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកយ៉ាងរហ័ស និងងាយស្រួល។

MyContacts ៣.១

គ្រប់គ្រងទំនាក់ទំនង ថ្ងៃខែឆ្នាំកំណើត និងកាលបរិច្ឆេទ/កិច្ចការ។

LibreOffice Rus សម្រាប់ Windows 3.6.4

ឈុតការិយាល័យ LibreOffice គឺជាជម្រើសឥតគិតថ្លៃដ៏ល្អបំផុតសម្រាប់ Microsoft Office 2003, 2007 និងសូម្បីតែឆ្នាំ 2010។

PhpMyAdmin 3.5.3

phpMyAdmin Rus គឺជាកម្មវិធីគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ MySQL ដែលអ្នកអាចទាញយក និងប្រើប្រាស់ដោយឥតគិតថ្លៃ ទាំងនៅផ្ទះ និងក្នុងស្ថាប័នមួយ។ កំណែជាភាសារុស្សី។

Oracle MySQL សម្រាប់ Linux, UNIX, *BSD និង *nix 5.5.28 Final / 6.0.6 Beta

Oracle MySQL - ម៉ាស៊ីនមេមូលដ្ឋានទិន្នន័យល្បី។ វាមានភាពល្បីល្បាញដោយសារស្ថេរភាព និងល្បឿនដ៏ល្អឥតខ្ចោះរបស់វា។

Oracle MySQL សម្រាប់ Windows 5.5.28 Final / 6.0.6 Beta

MySQL គឺជាមូលដ្ឋានទិន្នន័យប្រភពបើកចំហដ៏ពេញនិយមបំផុតមួយ ហើយមិនគិតថ្លៃទាំងស្រុងក្នុងការទាញយក និងប្រើប្រាស់។

  • ការអភិវឌ្ឍន៍ Android,
  • SQLite
    • ការបង្រៀន
    • របៀបស្តារឡើងវិញ

    សួស្តី! ឈ្មោះរបស់ខ្ញុំគឺ Oleg ហើយខ្ញុំជាអ្នកសរសេរកម្មវិធី Android ស្ម័គ្រចិត្ត។ ជា​អ្នក​ស្ម័គ្រ​ចិត្ត​ព្រោះ​នៅ​ពេល​នេះ​ខ្ញុំ​រក​ប្រាក់​កម្មវិធី​ក្នុង​ទិសដៅ​ខុស​គ្នា​ទាំង​ស្រុង។ ហើយនេះគឺជាចំណង់ចំណូលចិត្តដែលខ្ញុំលះបង់ពេលទំនេររបស់ខ្ញុំ។ ជាអកុសល ខ្ញុំមិនស្គាល់អ្នកសរសេរកម្មវិធី Android ទេ ហើយខ្ញុំទាញចំណេះដឹងជាមូលដ្ឋានទាំងអស់របស់ខ្ញុំ ទាំងពីសៀវភៅ ឬពីអ៊ីនធឺណិត។ នៅក្នុងសៀវភៅ និងអត្ថបទទាំងអស់នោះនៅលើអ៊ីនធឺណិតដែលខ្ញុំបានអាន កន្លែងទំនេរតិចតួចណាស់ត្រូវបានបម្រុងទុកសម្រាប់បង្កើតមូលដ្ឋានទិន្នន័យសម្រាប់កម្មវិធីមួយ ហើយតាមពិតការពិពណ៌នាទាំងមូលគឺមកលើការបង្កើតថ្នាក់ដែលជាមរតក។ SQLiteOpenHelperនិងការបញ្ចូលកូដ SQL ជាបន្តបន្ទាប់ទៅក្នុងកូដ Java ។ ក្រៅពីការពិតដែលថាយើងទទួលបានលេខកូដដែលអាចអានបានតិចតួច (ហើយប្រសិនបើតារាងច្រើនជាង 10 លេចឡើងនៅក្នុងកម្មវិធីរបស់យើងបន្ទាប់មកការចងចាំទំនាក់ទំនងទាំងអស់នេះរវាងតារាងគឺជាឋាននរក) បន្ទាប់មកជាគោលការណ៍អ្នកអាចរស់នៅបាន ប៉ុន្តែអ្នកមិនចង់ ទៅទាំងអស់។
    ខ្ញុំភ្លេចនិយាយអ្វីដែលសំខាន់បំផុត យើងអាចនិយាយបានថា នេះគឺជាការធ្វើតេស្តប៊ិចរបស់ខ្ញុំនៅទីនេះ។ ហើយដូច្នេះយើងបានទៅ។

    អំពីសំណួរអស់កល្បជានិច្ច: ហេតុអ្វី?

    ហេតុអ្វីបានជាសៀវភៅ និងអត្ថបទស្តីពីការសរសេរកម្មវិធីសម្រាប់ Android មិនពិពណ៌នាអំពីឧបករណ៍សម្រាប់រចនាស្ថាបត្យកម្មមូលដ្ឋានទិន្នន័យ និងលំនាំណាមួយសម្រាប់ធ្វើការជាមួយមូលដ្ឋានទិន្នន័យនៅដំណាក់កាលនៃការបង្កើតរបស់ពួកគេ ខ្ញុំមិនដឹងដោយស្មោះត្រង់ទេ។ វាហាក់បីដូចជាការបន្ថែមទំព័រពីរបីទៅសៀវភៅ ឬសរសេរអត្ថបទដាច់ដោយឡែក (ដូចដែលខ្ញុំធ្វើឥឡូវនេះ) គឺងាយស្រួលដូចផ្លែប៉េសដែរ ប៉ុន្តែមិនមែនទេ។ នៅក្នុងអត្ថបទនេះ ខ្ញុំនឹងនិយាយដោយសង្ខេបអំពីឧបករណ៍ដែលខ្ញុំប្រើក្នុងការងាររបស់ខ្ញុំ និងលម្អិតបន្ថែមទៀតអំពីកូដដែលទទួលខុសត្រូវចំពោះការបង្កើតមូលដ្ឋានទិន្នន័យដំបូង ដែលតាមទស្សនៈរបស់ខ្ញុំមើលទៅអាចអានបាន និងងាយស្រួលជាង។


    ប្រសិនបើកម្មវិធីរបស់យើងមានច្រើនជាង 5 តារាង នោះវាមិនអាក្រក់ទេក្នុងការប្រើឧបករណ៍មួយចំនួនសម្រាប់ការរចនាដែលមើលឃើញនៃស្ថាបត្យកម្មមូលដ្ឋានទិន្នន័យ។ ដោយសារនេះជាចំណង់ចំណូលចិត្តសម្រាប់ខ្ញុំ ខ្ញុំប្រើឧបករណ៍ឥតគិតថ្លៃទាំងស្រុងដែលមានឈ្មោះថា Oracle SQL Developer Data Modeler (អ្នកអាចទាញយកវាបាន)។

    កម្មវិធីនេះអនុញ្ញាតឱ្យអ្នកគូរតារាងដោយមើលឃើញ និងបង្កើតទំនាក់ទំនងជាមួយពួកគេ។ កំហុសក្នុងការរចនាស្ថាបត្យកម្មមូលដ្ឋានទិន្នន័យជាច្រើនអាចត្រូវបានជៀសវាងជាមួយនឹងវិធីសាស្រ្តរចនានេះ (ខ្ញុំកំពុងប្រាប់អ្នករួចហើយថានេះជាអ្នកសរសេរកម្មវិធីមូលដ្ឋានទិន្នន័យដែលមានជំនាញវិជ្ជាជីវៈ)។ វាមើលទៅដូចនេះ៖

    ដោយបានរចនាស្ថាបត្យកម្មដោយខ្លួនឯង យើងបន្តទៅផ្នែកដែលធុញទ្រាន់បន្ថែមទៀត ដែលមាននៅក្នុងការបង្កើតកូដ sql សម្រាប់បង្កើតតារាង។ ដើម្បីជួយដោះស្រាយបញ្ហានេះ ខ្ញុំបានប្រើឧបករណ៍មួយឈ្មោះថា SQLiteStudio (ដែលអាចទាញយកបាននៅទីនេះ)។

    ឧបករណ៍នេះគឺជា analogue នៃផលិតផលល្បីដូចជា SQL Naviagator, Toad ជាដើម។ ប៉ុន្តែដូចដែលឈ្មោះបង្កប់ន័យ វាត្រូវបានរចនាឡើងដើម្បីធ្វើការជាមួយ SQLite ។ វាអនុញ្ញាតឱ្យអ្នកបង្កើតមូលដ្ឋានទិន្នន័យដោយមើលឃើញ និងទទួលបានកូដ DDL នៃតារាងដែលកំពុងត្រូវបានបង្កើត។ ដោយវិធីនេះ វាក៏អនុញ្ញាតឱ្យអ្នកបង្កើតទិដ្ឋភាព (View) ដែលអ្នកក៏អាចប្រើក្នុងកម្មវិធីរបស់អ្នកប្រសិនបើអ្នកចង់បាន។ ខ្ញុំមិនដឹងថាវិធីសាស្រ្តនៃការប្រើប្រាស់ទិដ្ឋភាពក្នុងកម្មវិធី Android ត្រឹមត្រូវប៉ុណ្ណានោះទេ ប៉ុន្តែខ្ញុំបានប្រើវានៅក្នុងកម្មវិធីរបស់ខ្ញុំមួយ។

    តាមពិតទៅ ខ្ញុំលែងប្រើឧបករណ៍ភាគីទីបីទៀតហើយ ហើយវេទមន្តចាប់ផ្តើមជាមួយ Android Studio។ ដូចដែលខ្ញុំបានសរសេរខាងលើ ប្រសិនបើយើងចាប់ផ្តើមបញ្ចូលកូដ SQL ទៅក្នុងកូដ Java នោះនៅពេលលទ្ធផល យើងនឹងទទួលបានការអានមិនសូវល្អ ដូច្នេះហើយ កូដដែលអាចពង្រីកបានតិចតួច។ ដូច្នេះហើយ ខ្ញុំដាក់សេចក្តីថ្លែងការណ៍ SQL ទាំងអស់នៅក្នុងឯកសារខាងក្រៅដែលខ្ញុំមាននៅក្នុងថត ទ្រព្យសកម្ម. នៅក្នុង Android Studio វាមើលទៅដូចនេះ៖


    អំពី db និងថតទិន្នន័យ

    នៅខាងក្នុងថតឯកសារ ទ្រព្យសកម្មខ្ញុំបានបង្កើតថតពីរ db_01និង data_01. លេខនៅក្នុងឈ្មោះថតត្រូវនឹងលេខកំណែនៃមូលដ្ឋានទិន្នន័យរបស់ខ្ញុំដែលខ្ញុំធ្វើការ។ នៅក្នុងថតឯកសារ ឌីប៊ីនៅខ្ញុំ ស្គ្រីប SQL នៃការបង្កើតតារាងត្រូវបានរក្សាទុក។ ហើយនៅក្នុងថត ទិន្នន័យទិន្នន័យចាំបាច់សម្រាប់ការបំពេញតារាងដំបូងត្រូវបានរក្សាទុក។


    ឥឡូវនេះសូមមើលកូដខាងក្នុងរបស់ខ្ញុំ DBHelperដែលខ្ញុំប្រើក្នុងគម្រោងរបស់ខ្ញុំ។ ទីមួយ អថេរថ្នាក់ និងអ្នកសាងសង់ (មិនមានការភ្ញាក់ផ្អើលនៅទីនេះទេ)៖

    ខ្សែអក្សរចុងក្រោយឋិតិវន្តឯកជន TAG = "RoadMap4.DBHelper"; ខ្សែអក្សរ mDb = "db_"; ខ្សែអក្សរ mData = "ទិន្នន័យ_"; បរិបទ mContext; int mVersion; DBHelper សាធារណៈ(បរិបទបរិបទ ឈ្មោះខ្សែអក្សរ កំណែ int) (ទំនើប(បរិបទ ឈ្មោះ ទទេ កំណែ); mContext = បរិបទ; mVersion = កំណែ; )
    ឥឡូវនេះវិធីសាស្រ្ត បង្កើតហើយនេះជាកន្លែងដែលរឿងគួរឱ្យចាប់អារម្មណ៍:

    @បដិសេធការលុបចោលសាធារណៈនៅលើCreate(SQLiteDatabase db) ( ArrayList តារាង = getSQLTables(); សម្រាប់ (តារាងខ្សែអក្សរ៖ តារាង)( db.execSQL(តារាង); ) ArrayList > dataSQL = getSQLData(); សម្រាប់(HashMap hm: dataSQL)(សម្រាប់ (តារាងខ្សែអក្សរ៖ hm.keySet())( Log.d(TAG, "insert into " + table + " " + hm.get(table)); long rowId = db.insert(table, null, hm.get(តារាង)); ) ))
    តាមឡូជីខល វាត្រូវបានបែងចែកជាពីរវដ្ត ក្នុងវដ្តទីមួយ ខ្ញុំទទួលបានបញ្ជីការណែនាំ SQL សម្រាប់បង្កើតមូលដ្ឋានទិន្នន័យ ហើយបន្ទាប់មកប្រតិបត្តិពួកវា ក្នុងវដ្តទីពីរ ខ្ញុំបានបំពេញតារាងដែលបានបង្កើតពីមុនជាមួយនឹងទិន្នន័យដំបូងរួចហើយ។ ដូច្នេះជំហានទីមួយ៖

    បញ្ជីអារេឯកជន getSQLTables() ( ArrayList តារាង = បញ្ជីអារេថ្មី។<>(); បញ្ជីអារេ ឯកសារ = បញ្ជីអារេថ្មី។<>(); AssetManager assetManager = mContext.getAssets(); ខ្សែអក្សរ dir = mDb + mVersion; try ( String listFiles = assetManager.list(dir); for (String file: listFiles)( files.add(file); ) Collections.sort(files, new QueryFilesComparator()); BufferedReader bufferedReader; String query; String line; សម្រាប់ (ឯកសារខ្សែអក្សរ៖ ឯកសារ)( Log.d(TAG, "ឯកសារ db គឺ " + ឯកសារ); bufferedReader = ថ្មី BufferedReader(ថ្មី InputStreamReader(assetManager.open(dir + "/" + ឯកសារ))); query = ""; while ((line = bufferedReader.readLine()) != null)( query = query + line; ) bufferedReader.close(); tables.add(query); ) ) catch (IOException e) (e.printStackTrace(); តារាងត្រឡប់មកវិញ; )
    អ្វីគ្រប់យ៉ាងគឺសាមញ្ញណាស់នៅទីនេះ យើងគ្រាន់តែអានមាតិកានៃឯកសារ ហើយភ្ជាប់មាតិកានៃឯកសារនីមួយៗទៅក្នុងធាតុអារេមួយ។ សូមចំណាំថាខ្ញុំកំពុងតម្រៀបបញ្ជីឯកសារ ដោយសារតារាងអាចមានសោបរទេស ដែលមានន័យថាតារាងត្រូវតែបង្កើតតាមលំដាប់ជាក់លាក់មួយ។ ខ្ញុំ​ប្រើ​លេខ​រៀង​ក្នុង​ឈ្មោះ​ឯកសារ ហើយ​ដោយ​មាន​ជំនួយ​ពី​វា ខ្ញុំ​តម្រៀប។

    ថ្នាក់ឯកជន QueryFilesComparator អនុវត្តការប្រៀបធៀប ( @Override public int ប្រៀបធៀប(String file1, String file2) ( Integer f2 = Integer.parseInt(file1.substring(0, 2)); Integer f1 = Integer.parseInt(file2.substring(0, 2)); ត្រឡប់ f2 .compareTo(f1); ))
    ជាមួយនឹងការបំពេញនៅក្នុងតុអ្វីគ្រប់យ៉ាងគឺកាន់តែរីករាយ។ តារាងរបស់ខ្ញុំមិនត្រឹមតែមានតម្លៃកូដរឹងប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងមានតម្លៃពីធនធាន និងគ្រាប់ចុច UUID ផងដែរ (ខ្ញុំសង្ឃឹមថាថ្ងៃណាមួយមកកំណែបណ្តាញនៃកម្មវិធីរបស់ខ្ញុំដើម្បីឱ្យអ្នកប្រើប្រាស់របស់ខ្ញុំអាចធ្វើការជាមួយទិន្នន័យដែលបានចែករំលែក)។ រចនាសម្ព័ន្ធនៃឯកសារដែលមានទិន្នន័យដំបូងមើលទៅដូចនេះ៖


    ទោះបីជាការពិតដែលថាឯកសាររបស់ខ្ញុំមានផ្នែកបន្ថែម sql មិនមានកូដ sql នៅខាងក្នុងទេ ប៉ុន្តែរឿងនេះ៖

    អាទិភាព
    pri_id:UUID:UUID

    pri_name:string:normal
    pri_color: ពណ៌: ពណ៌បៃតង
    pri_default: int: 1
    អាទិភាព
    pri_id:UUID:UUID
    pri_object:string:object_task
    pri_name:string:hold
    pri_color:color:ពណ៌​ខៀវ
    pri_default: int: 0
    អាទិភាព
    pri_id:UUID:UUID
    pri_object:string:object_task
    pri_name:string:សំខាន់
    pri_color:color:colorRed
    pri_default: int: 0
    អាទិភាព
    pri_id:UUID:UUID

    pri_name:string:normal
    pri_color: ពណ៌: ពណ៌បៃតង
    pri_default: int: 1
    អាទិភាព
    pri_id:UUID:UUID
    pri_object:string:object_project
    pri_name:string:hold
    pri_color:color:ពណ៌​ខៀវ
    pri_default: int: 0
    អាទិភាព
    pri_id:UUID:UUID
    pri_object:string:object_project
    pri_name:string:សំខាន់
    pri_color:color:colorRed
    pri_default: int: 0

    រចនាសម្ព័ន្ធឯកសារគឺដូចនេះ៖ ខ្ញុំធ្វើការហៅមុខងារ បំបែក (":")ទាក់ទងទៅនឹងបន្ទាត់ ហើយប្រសិនបើខ្ញុំយល់ថាទំហំរបស់វាគឺ 1 នោះគឺជាឈ្មោះតារាងដែលទិន្នន័យគួរតែត្រូវបានសរសេរ។ បើមិនដូច្នោះទេវាជាទិន្នន័យខ្លួនឯង។ វាលទីមួយគឺជាឈ្មោះវាលនៅក្នុងតារាង។ វាលទីពីរគឺជាប្រភេទដែលខ្ញុំកំណត់នូវអ្វីដែលខ្ញុំត្រូវសរសេរទៅកាន់វាលនេះ។ ប្រសិនបើវាជា UUID នោះខ្ញុំត្រូវបង្កើតតម្លៃ UUID តែមួយគត់។ ប្រសិនបើ string មានន័យសម្រាប់ខ្ញុំ វាចាំបាច់ក្នុងការទាញតម្លៃខ្សែអក្សរចេញពីធនធាន។ ប្រសិនបើពណ៌បន្ទាប់មកម្តងទៀត អ្នកត្រូវដកកូដពណ៌ចេញពីធនធាន។ ប្រសិនបើ int ឬ text នោះខ្ញុំគ្រាន់តែបំប្លែងតម្លៃដែលបានផ្តល់ឱ្យទៅជា int ឬ String ដោយមិនប្រើកាយវិការណាមួយឡើយ។ កូដខ្លួនឯងមើលទៅដូចនេះ៖

    បញ្ជីអារេឯកជន > getSQLData() ( ArrayList > ទិន្នន័យ = បញ្ជីអារេថ្មី។<>(); បញ្ជីអារេ ឯកសារ = បញ្ជីអារេថ្មី។<>(); AssetManager assetManager = mContext.getAssets(); ខ្សែអក្សរ dir = mData + mVersion; try ( String listFiles = assetManager.list(dir); for (String file: listFiles)( files.add(file); ) Collections.sort(files, new QueryFilesComparator()); BufferedReader bufferedReader; String line; int separator = 0 ; ContentValues ​​​​cv = null; វាល​ខ្សែអក្សរ; ឈ្មោះ​ខ្សែអក្សរTable = null; កញ្ចប់​ខ្សែអក្សរ = mContext.getPackageName(); ទង់ប៊ូលីន = មិនពិត; HashMap ហឹម; for (String file: files)( Log.d(TAG, "file db is " + file); bufferedReader = new BufferedReader(new InputStreamReader(assetManager.open(dir + "/" + file))); while ((បន្ទាត់ = bufferedReader.readLine()) != null)( fields = line.trim().split(":"); if (fields.length == 1)( if (flag == true)( hm = new HashMap<>(); hm put(nameTable, cv); data.add(hm); ) // ឈ្មោះតារាង ឈ្មោះតារាង = line.trim(); cv = new ContentValues(); បន្ត; ) else ( if (fields.equals("UUID"))( cv.put(fields, UUID.randomUUID().toString()); ) else if (fields.equals("color") || fields.equals( "string"))( int resId = mContext.getResources().getIdentifier(fields, fields, packageName); Log.d(TAG, fields + " " + resId); switch (fields)( case "color": cv. put(fields, resId); break; case "string": cv.put(fields, mContext.getString(resId)); break; default: break; )) else if (fields.equals("text"))(cv .put(វាល, វាល); ) else if (fields.equals("int"))( cv.put(fields, Integer.parseInt(fields)); )) flag = true; ) bufferedReader.close(); ) ) ចាប់ (IOException e) ( e.printStackTrace(); ) ត្រឡប់ទិន្នន័យ; )

    ថ្មីនៅលើគេហទំព័រ

    >

    ពេញនិយមបំផុត។