Datu bāzes tehnoloģijas
Datorzinātnes un Informācijas tehnoloģijas fakultāte
Mācību kurss
Datu bāzes tehnoloģiju pamati
6. praktiskais darbs
Programmēšana datu bāzes serverī
Students: .................................
Pasniedzējs: .............................
20013. gads
ANOTĀCIJA
Darbā ir realizēta datu izgūšanu no ārējiem datu avotiem (MS Excel un MS Access), izmantojot ADO tehnoloģiju.
Darbā ir aprakstīta iespēja izveidot standarta, ka arī dinamiskas formas MS Access vidē. Tā pat ir aprakstīta iespēja, kā ar VisualBasic valodu ir iespējams uzrakstīt šāda veida programmas, jeb formas, kā pieslēgties dažādām datu bāzēm un ka ar ADO tehnoloģijas palīdzību ir iespējams veikt datu izgūšanu no pieslēgtajiem datu avotiem. Papildus ir pievienota iespēja izgūt meta datus.
Darbu izpildīju MS Access un MS Excel 2003 vidēs, ar Windows XP Proffesional operētājsistēmu.
Darba saturā ir 34 attēli, 3 tabulas, 5 nodaļas, secinājumi, saturs un literatūras avoti. Kopumā darbs ir izklāstīts 45 lappusēs.
SATURS
1. UZDEVUMA NOSTĀDNE 4
2. DATU AVOTI UN TO IZVEIDE 5
2.1. Datu bāze MS ACCESS vidē 5
2.2. Datu bāze MS Excel vidē 7
3. ADO TEHNOLOĢIJA un VBFA 8
3.1. VBFA 8
3.2. ADO 11
3.3. ADO objektu modelis 12
3.3.1. Objekts Connection 12
3.3.2. Objekts Command 13
3.3.3. Objekts Parameter 13
3.3.4. Objekts Recordset 13
3.3.5. Objekts Field 14
3.3.6. Objekts Error 15
3.3.7. Objekts Property 15
3.4. ADO izmantošanas iespējas 15
4. FORMU UN MODUĻU IZVEIDE 17
4.1. Galvenā forma 18
4.2. Pogu un teksta lauku apstrāde 24
4.2.1. Opciju poga 24
4.2.2. Poga „...” 25
4.2.3. Poga „Refresh Data” 27
4.2.4. Saraksta lauks „Field list” 28
4.2.5. Saraksta lauks „Table list” 29
4.2.6. Poga „Get Data” 30
4.2.7. Poga „Clear All” 30
4.3. Datu izgūšana 31
4.4. Datu attēlošana 32
5. DATU IZGŪŠANAS PIEMĒRI 36
5.1. Dati no MS Access datu bāzes 37
5.2. Dati no MS Excel elektroniskās grāmatas 41
SECINĀJUMI 44
IZMANTORIE AVOTI 45
1. UZDEVUMA NOSTĀDNE
o Izveidot vienu formu ar elementiem, kuros lietotājs var ievadīt kritērijus datu izlasei no ārējām datu bāzēm;
o Realizēt datu izgūšanu MS Access datu bāzēm, MS Excel grāmatām;
o Jāizveido lietojums (Forma - sākums, apmaiņa, forma - beigas), lai griestos, ievadītu SQL komandas un iegūtu atbildi no dažādiem datu avotiem;
o Jāizveido lietojums (Forma1 Forma2), lai no datu avotiem iegūtu meta datus (Tabulu nosaukumi, lauku nosaukumi);
o Izgūtos datus attēlot dinamiskā formā;
o Realizēt datu izgūšanu izmantojot SQL vaicājumu;
o Izmantot ADO objektu tehnoloģiju.
DATU AVOTI UN TO IZVEIDE
2.1. Datu bāze MS ACCESS vidē
Tā kā definētā datu bāzes struktūra atbilst tādai, kādu to izveidoju 2.laboratorijas darbā, ņemšu šo pašu, jau pirms tam izveidoto datu bāzi MS Access vidē ar Case rīka Power Designer 11 palīdzību.
Minētās datu bāzes nosaukums ir „Autostāvvietas” un tajā ir 3 tabulas ar sekojošiem kolonnu nosaukumiem:
o Autostāvvietas (skat. 2.1.1.att.)
▪ Autostāvvietas ID
▪ Autostāvvietas nosaukums
▪ Autostāvvietas telefons
▪ Autostāvvietas adrese
▪ Autostāvvietas E-pasts
▪ Vietu skaits
▪ Darbinieku skaits
▪ Dibināšanas datums
o Klienti (skat. 2.1.2.att.)
▪ Klienta ID
▪ Klienta vārds
▪ Klienta uzvārds
▪ Klienta adrese
▪ Klienta telefons
▪ Klienta dzimums
o Mašīnas (skat.2.1.3.att.)
▪ Mašīnas ID
▪ Mašīnas numurs
▪ Mašīnas marka
▪ Mašīnas izlaiduma gads
▪ Mašīnas krāsa
[pic]
Starp šīm tabulām, protams, ir arī attiecīgās saites (skat. 2.1.4.att.):
➢ Saite 1 pret daudziem starp Autostāvvietas un Klienti;
➢ Saite 1 pret daudziem starp Klienti un Automašīnas;
Kā redzams, šo datu bāzi un līdz ar to arī datu bāzes tabulas, var droši izmantot arī piektajā laboratorijas darbā, ko arī darīšu.
2.2. Datu bāze MS Excel vidē
Tā kā nevienā no iepriekšējiem darbiem nebija jāizveido tabulas MS Excel vidē, tad to izdarīsim tagad.
Nolēmu izveidot vienkāršu tabulu (par autostāvvietas automašīnām), jo šajā darbā ir svarīgi nevis mācēt izveidot lielu datu bāzi MS Excel vidē, bet gan svarīga ir spēja importēt šos datus uz MS Access, lai varētu no dotās tabulas izgūt datus.
Tātad, izveidoju vienkāršu tabulu (skat. 2.2.1.att.).
[pic]
2.2.1.att. Vienkārša tabula „AUTO” MS Excel vidē
Šai tabulai izveidoju sekojošus laukus:
o Automasinas_ID – automašīnas identifikācijas numurs (lauks ar tipu NUMBER);
o Marka – automašīnas marka (lauks ar tipu TEXT);
o Izlaiduma_gads – automašīnas izlaiduma gads (lauks ar tipu NUMBER);
o Krasa - automašīnas krāsa (lauks ar tipu TEXT).
Izveidotai tabulai devu arī nosaukumu. To var izdarīt iedalot visu izveidoto tabulu ar visiem tās laukiem un virs tabulas laukā „Name Box” ierakstot tabulas nosaukumu (skat.2.2.2.att.). Izveidotai tabulai devu nosaukumu AUTO.
[pic]
2.2.2.att. Tabulas nosaukuma definēšana
Tabulai dot vārdu var arī citā veidā: izvēloties MS Excel galvenajā izvēlnē Insert ( Name ( Define, kur atvērtajā logā ir jāuzraksta tabulas vārdu un tabulas teritorijas robežas.
ADO TEHNOLOĢIJA un VBFA
3.1. VBFA
Lai strādātu ar ADO(Active Data Object) objektiem, MS Access’ā, tiek izmatota programmēšanas valoda Visual Basic(VBA). Programmas kods tiek ierakstīts moduļos.
Ir pieci moduļu veidi:
1. Standartmoduļi - lieto funkcijas definēšanai.
2. Formu moduļi – moduļi kuri ir orientēti uz formas notikumiem.
3. Formas īpašība -norāda vai formai var būt piesaistīti moduļi.
4. Pārskatu moduļi - moduļi kuri ir orientēti uz pārskata notikumiem
5. Klases moduļi - lieto objektu, to īpašību un metožu veidošanai.
Moduli var iekļauj sevi:
• mainīgus(objektus)
• procedūras
• funkcijas
Ir divi veidi ka var definēt mainīgos Access programmā:
• standarta definēšana: Dim Mainigais As Datu_tips
• ar speciālus simbolus: Mainigais$ = Vērtība
1. tabula
VBA datu tipi
|VBA datu tipi |
|Datu tipa apzīmējums |Definētājsimbols |Datu tips |
|Byte |Nav |Baits |
|Integer |% |Vesels skaitlis |
|Boolen |Nav |Loģiskais tips |
|Long |& |Garais veselais skaitlis |
|Single |! |Reāls skaitlis |
|Double |# |Reāls skaitlis ar dubultprecizitāti |
|Currency |@ |Naudas |
|String |$ |Teksta virkne |
|Date |Nav |Datums |
|Variant |bez definējuma |Jebkurš tips |
Var ierobežot piekļuvi mainīgajiem. To var izdarīt ar specialiem parametriem:
• Privat - mainīgs ir pieejams tikai procedūrā, kur tas tiek izveidots
• Public - mainīgais ir pieejams arī citās procedūras.
Objektu definēšana ir līdzīga mainīgu definēšanai. Lai izveidotu jaunu objektu tiek lietota komanda New:
Set Mainīga New Objekta_tips
Piešķirt vērtību objektam var ar komandas Set palīdzību:
Set Mainīga = Vērtība
Konstantas var definēt ar komandas const palīdzību:
const Konstante = Vērtība
Procedūras definējums un izsaukums:
Sub Procedūras_nosaukums(Formālo_parametru_saraksts) Komandas
End Sub
Call Procedūras_nosaukums (Faktiskie_parametri)
Funkcijas definējums izsaukums:
Function Funkcijas_nosaukums (Formālo_parametru_saraksts)
Komandas
End Function
Mainīgā_nosaukums = Funkcijas_nosaukums(Faktiskie_parametri)
Masivu definēšana:
Dim Masīvs (Elementu_Skaits) As Elementu_tips - viendimensiju masīvs
Dim Masīvs (Elements_n To Elements_m) As Elementu_tips – masīva elementu definēšana no Elements_n līdz Elements_m
Dim Masīvs (Elementu_Skaits_n, Elementu_Skaits_m, Elementu_Skaits_k) As Elementu_tips – daudzdimensiju masīva definēšana.
Dinamisko masīvu definēšana:
Dim Masīvs() As Datu_tips – masīva definēšana
ReDim Preserve Masivs (Elementu_Skaits_n, Elementu_Skaits_m, Elementu_Skaits_k) – izveidot masīvu
ReDim Masivs (1, 2, 3) - izveidot masīvu
Saliktas datu struktūras definēšana:
Type Nosaukums
Mainīgā_nosaukums As Datu_tips
Mainīgā_nosaukums As Datu_tips
...
End Type
Iezīmes un pārejas:
On Error GOTO Iezīme
...
Iezīme:
...
Funkcija IIF:
IIF (nosacījums; nosacījums izpildās: vērtība; nosacījums neizpildās: vērtība)
Konstrukcija If ... Then ...Else ...End If:
If nosacījums Then
komandas izpildās, ja nosacījums izpildās
Else
komandas izpildās, ja nosacījums neizpildās
End If
Konstrukcija If ... Then ...ElseIf ...End If:
If nosacījums1 Then
darbības komandas izpildās jā nosacījums1 izpildās
ElseIf nosacījums2 Then
darbības komandas izpildās, ja nosacījums1 neizpildās, bet izpildās nosacījums2
End If
Konstrukcija Select Case ... End Select:
Select Case mainīgais
Case vērtība, vērtība
komandas izpildās jā mainīgais ir vienāds ar kādu no vērtībām
Case vērtība To vērtība
komandas izpildās jā mainīgais ir vienāds ar kādu vērību no intervāla
Case Else
Komandas izpildās ja ne izpildās iepriekšējas nosacījumi
End Select
Cikli For … Next tiek lietoti objektiem un kolekcijām
Cikls For Each elements In grupa
komandas
Exit For
komandas
Next elements
For Skaitītājs = Sākuma_vērtība To Beigu_vērtība Step Soļa_vērtība
komandas
If nosacījums
Exit For
End If
komandas
Next Skaitītājs
Cikli Do While ... Loop:
Do While nosacījums
komandas
If nosacījums
Exit Do
End If
komandas
Loop
Do
komandas
If nosacījums
Exit Do
End If
komandas
Loop While nosacījums
Lai piesaistītos Excel darba grāmatai, pievienojoties ir jānorāda papildus īpašība Exended Properties, kas norāda, ka pievienošanās notiek Excel datubāzei. Šeit atkarībā no faila, kuram mēs gribam pievienoties vajag norādīt šī faila identifikatoru. Identifikatori doti tabulā:
2.tabula
Piesaistes identifikatori
|Datubāze |Norādāmā vērtība |
|dBASE III |dBASE III; |
|dBASE IV |dBASE IV; |
|dBASE 5 |dBASE 5.0; |
|Paradox 3.x |Paradox 3.x; |
|Paradox 4.x |Paradox 4.x; |
|Paradox 5.x |Paradox 5.x; |
|Excel 3.0 |Excel 3.0; |
|Excel 4.0 |Excel 4.0; |
|Excel 5.0/Excel 95 |Excel 5.0; |
|Excel 97 |Excel 97; |
|Excel 2000 |Excel 8.0; |
|HTML Import |HTML Import; |
|HTML Export |HTML Export; |
|Text |Text; |
|ODBC |ODBC; |
| |DATABASE=database; |
| |UID=user; |
| |PWD=password; |
| |DSN=datasourcename; |
3.2. ADO
ADO (ActiveX Data Objects) ir Microsoft jaunākais augsta līmeņa Interfeiss, kurš ir domāts sniegt ārējo datu manipulēšanu (un piekļuvi pie tiem) iespējas klienta lietojumam. ADO ir programmas līmeņa interfeiss pie OLE DB (Object Linking and Embedding Data Bases). Šīs interfeiss ir ļoti ērts un spēcīgs. ADO un OLE DB kopā veido Universālu Datu Pieejas tehnoloģiju – UDA (Universal Data Access). Neskatoties uz to, ka ADO ir OLE DB augstāka programmas līmeņa interfeiss, ADO izmanto OLE DB kā datu gādnieku (uz doto momentu tas ir pārsvarā Relāciju Datu Bāzes provaideri, kaut gan jau sāk parādīties datu gādnieki nerelāciju datu avotiem un elektronisku pastu sistēmām). ADO tehnoloģija mantoja labākas īpašības no DAO, RDO un citam datu pieejas tehnoloģijām. Ir vērts atzīmēt, ka korporācija Microsoft atklāti apgalvo, ka tuvākajos laikos ADO aizvietos lielu daļu no tagad izmantojamiem datu pieejas tehnoloģijām, tajā skaita arī Microsoft produkti – DAO un RDO.
Modulis sastāv no:
1. apraksta daļas (declarations) – mainīgo un konstanšu definējumi. Manīgie var būt lokāli (private) un globāli (public).
2. apakšprogrammu (procedūru) definējumiem;
3. funkciju definējumiem.
Procedūras definējums:
Sub Procedūras_nosaukums
Komandas
End Sub
Procedūras izsaukums:
Call Procedūras_nosaukums (Faktiskie parametri)
Piemēram: Call Somefunc(mainiīgais1,mainīgais2,..., mainīgaisN)
Funkcijas definējums:
Function Funkcijas_nosaukums (Formālo_parametru_saraksts)
Komandas
End Function
Funkcijas izsaukums:
Mainīgā_nosaukums = Funkcijas_nosaukums(Faktiskie_parametri)
3.3. ADO objektu modelis
ADO sastāv no sekojošiem pamat komponentiem. To skaits ir daudz mazāks par DAO un RDO komponentu skaitu, kas padara ADO tehnoloģiju vienkāršāku, salīdzinājumā ar DAO, RDO u.c. Kā arī mazu ADO objektu un kolekciju skaitu dēl to ir viegli izmantot interneta lietojumos.
Ir četras kolekcijas:
▪ Fields;
▪ Parametrs;
▪ Errors;
▪ Properties.
Galvenā no tiem ir Properties, jo tā iekļauj sevi tos komponentus, kurus neizmantojot nav iespējams tikt pie ārējiem un iekšējiem datiem. Tie ir aprakstīti 2.tabulā:
3.tabula
ADO objektu apraksts
|Objekts |Apraksts |
|Connection |Ar šī objekta palīdzību tiek izveidots savienojums starp lietojumu un datu avotu. |
|Command |Izmantojot šo objektu, tiek izpildītas dažādas komandas, kuras datu avots ir spējīgs izpildīt. |
|Parameter |Ar šī objekta palīdzību tiek veidoti objekta Command parametri, lai izpildītu parametriskos vaicājumus. |
|Recordset |Ar šī objekta palīdzību notiek visa veida darbības ar datiem. |
|Field |Izmantojot objektu Field, iespējams strādāt ar objekta Recordset laukiem |
|Error |Ar šī objekta palīdzību iespējams apstrādāt kļūdas, kas radušās darbā ar datu avotu. |
|Property |Izmantojot objektu Property, iespējams definēt jaunas objekta īpašības. |
3.3.1. Objekts Connection
Kā parāda objekta nosaukums, izmantojot šo objektu, tiek izveidots savienojums (connection) starp lietojumu un datu avotu. Ar objekta metodes Execute palīdzību iespējams izpildīt dažāda veida komandas. Ja komandas rezultāts ir rindu kopa, automātiski tiek izveidots objekts Recordset, kas satur šo rindu kopu. Ja rezultāts ir sarežģītāks, nepieciešams izveidot jaunu objektu Recordset, jāsasaista tas ar attiecīgo objektu Connection un jāatver kursors.
Objekta īpašības ļauj definēt dažādus savienojuma parametrus: pievienošanās rindu (connection string), komandas izpildes un savienojuma nodibināšanas maksimālo pieļaujamo laika intervālu, savienojuma datu avotu, kursoru atrašanās vietu (klienta vai servera pusē), datu pieejas tiesības.
Objekta metodes paredzētas komandu izpildīšanai, savienojumu izveidošanai un pārtraukšanai, kā arī transakciju veikšanai.
Datu avota pieejas nodrošinātāju iespējams norādīt dažādos veidos: definējot īpašību Provider, veidojot atbilstošu pievienošanās rindu vai pat, izmantojot metodi Open. Nodrošinātājs pēc noklusēšanas ir MSDASQL (Microsoft OLE DB provider for ODBC).
Svarīgākās no objekta Connection īpašībām:
Pievienošanās rinda — ConnectionString
Nosaka kursoru atrašanās vietu — CursorLocation
Nosaka iespējas rediģēt datus — Mode
Nosaka izmantojamo OLE DB nodrošinātāju — Provider
Nosaka, vai vaicājums vēl tiek izpildīts — StillExecuting
Vaicājuma tips — Type
Svarīgākās no objekta Connection metodēm:
Transakcijas uzsākšana — BeginTrans;
Transakcijas apstiprināšana — CommitTrans;
Transakcijas atsaukšana — RollbackTrans;
Asinhroni izpildītu metožu Execute vai Open atcelšana — Cancel
Vaicājuma, SQL izteiksmes vai glabājamās procedūras izpildīšana — Execute
Savienojuma nodibināšana ar datu avotu — Open
Saglabā objekta Recordset (sk. tālāk) saturu failā — Save
3.3.2. Objekts Command
Ar objekta Command palīdzību tiek veidoti vaicājumi un citas komandas, ko var izpildīt datu avots. Šis objekts ADO modelī nav obligāts, jo daudzi datu avoti neuztur komandu izpildīšanu, taču šāds objekts eksistē, lai to varētu izmantot datu avoti, kas spēj izpildīt komandas.
Komandas var būt gan vienkārši SQL vaicājumi, gan datu avota glabājamo procedūru izsaukumi. Komandas var tikt izpildītas, izmantojot metodi Execute vai arī izveidojot objektu Recordset un sasaistot to ar attiecīgo objektu Command, kad tiek atvērts kursors.
Objekts Command satur objektu Parameter kolekciju. Ja datu avots spēj apstrādāt komandas ar parametriem, kolekcija Parameters saturēs vienu objektu Parameter katram parametram.
Svarīgākās no objekta Command īpašībām:
Norāda objekta aktīvo savienojumu ar datu avotu — ActiveConnection
Komandas teksts — CommandText
Komandas tips — CommandType
Nosaka komandas izpildes stāvokli — State
Svarīgākās no objekta Command metodēm:
Atceļ komandas izpildi — Cancel
Izveido objektu Parameter (sk. tālāk) — CreateParameter
Komandas izpildīšana — Execute
3.3.3. Objekts Parameter
Ar šī objekta palīdzību tiek veidoti objekta Command parametri, lai izpildītu parametriskos vaicājumus.
Svarīgākās no objekta Parameter īpašībām:
Nosaka parametra veidu — Direction
Objekta vērtība — Value
3.3.4. Objekts Recordset
Šis objekts ADO objektu modelī ir vissarežģītākais. Galvenokārt tas ir tādēļ, ka tas veic visas darbības, kas saistītas ar kursoru apstrādi. Lai gan tas ārēji izskatās līdzīgs attiecīgajiem objektiem iepriekš izstrādātajos objektu modeļos, tomēr tas satur virkni uzlabojumu, piemēram, ir likvidēti nevajadzīgi elementi un mainītas dažas noklusētās vērtības, kas bija nepieciešams sakarā nelietderīgu veco vērtību lietošanu jaunajās tehnoloģijās.
Tas sastāv no rindām un laukiem līdzīgi tabulai. Tas var saturēt arī datus no nerelāciju datu avota, jo ADO ir balstīts uz OLE DB, kas spēj piekļūt datiem jebkurā datu avotā, tai skaitā arī nerelāciju datu bāzēs. Izmantojot objektu Recordset iespējams veikt datu buferizāciju, rediģēšanu un veikto izmaiņu nosūtīšanu datu avotam. Rindu kopu, kuru satur objekts, iespējams gan pārlūkot, gan kārtot, kā arī veikt dzēšanas, pievienošanas un rediģēšanas operācijas.
Lai gan objekts Recordset ir cieši saistīts ar objektu Connection, ne vienmēr nepieciešams veidot objektu Connection, lai strādātu ar rindu kopu. Iespējams izveidot tikai objektu Recordset un ar to strādāt. Taču tas nenozīmē, ka objekts Connection netiek izveidots. Tas tiek izveidots, jo tomēr ir nepieciešams savienojuma ar datu avotu nodrošināšanai, taču tas nav tieši redzams un nav nepieciešamības to atsevišķi definēt un izveidot.
Svarīgākās no objekta Recordset īpašībām:
Tekošā ieraksta numurs — AbsolutePosition
Norāda aktīvo savienojumu ar datu avotu — ActiveConnection
Nosaka, vai tekošā ieraksta pozīcija atrodas pirms pirmā ieraksta — BOF
Nosaka, vai tekošā ieraksta pozīcija atrodas aiz pēdējā ieraksta — EOF
Ieliktnis, ar kura palīdzību iespējams identificēt katru ierakstu — Bookmark
Nosaka kursoru atrašanās vietu — CursorLocation
Nosaka kursora tipu — CursorType
Nosaka tekošā ieraksta modificēšanas iespējas — EditMode
Definē filtru — Filter
Nosaka maksimālo ierakstu skaitu — MaxRecords
Ieraktu skaits — RecordCount
Definē vienu vai vairākus laukus, pēc kuriem ieraksti tiek šķiroti — Sort
Nosaka objekta datu avotu — Source
Svarīgākās no objekta Recordset metodēm:
Jauna ieraksta pievienošana — AddNew
Atceļ izdarītās izmaiņas — Cancel
Izveido objekta dublikātu — Clone
Tekošā ieraksta vai ierakstu grupas dzēšana — Delete
Tekošā ieraksta modificēšana — Edit
Tekošā ieraksta pozīcijas maiņa — Move, MoveFirst, MoveLast, MoveNext, MovePrevious
Tiek atvērts kursors — Open
Objekta satura atjaunināšana, atkārtojot bāzes vaicājuma izpildi — Requery
Saglabā objekta saturu failā — Save
Objekta indeksa pārmeklēšana — Seek
Izdarīto ieraksta izmaiņu saglabāšana objektā — Update
Veic izdarīto izmaiņu saglabāšanu pakotnes veidā — UpdateBatch
3.3.5. Objekts Field
Izmantojot objektu Field, iespējams strādāt ar objekta Recordset laukiem. Iespējams nolasīt gan to vērtības, gan tipu un lielumu. Visi objekta Recordset objekti Field veido kolekciju Fields.
Svarīgākās no objekta Field īpašībām:
Lauka faktiskais garums — ActualSize
Lauka definētais garums — DefinedSize
Lauka vērtība pirms izmaiņu izdarīšanas — OriginalValue
Lauka tips — Type
Lauka vērtība — UnderlyingValue
3.3.6. Objekts Error
Ar šī objekta palīdzību iespējams apstrādāt kļūdas, kas radušās darbā ar datu avotu. Šis objekts arī nav obligāts, jo to nepieciešams lietot tikai tad, ja vienas darbības izpildes laikā var rasties vairākas kļūdas uzreiz. Šādas situācijas biežāk var rasties sistēmās, kas veidotas pēc klienta/servera principa. Piemēram, transakcija sastāv no vairākām komandām. Ja šīs transakcijas izpilde bijusi neveiksmīga, nepieciešams identificēt tās komandas, kuras ir izraisījušas kļūdas. Tāpēc informācija par transakcijas kā tādas neveiksmīgu izpildi nav pietiekama.
Svarīgākās no objekta Error īpašībām:
Kļūdas apraksts — Description
Kļūdas numurs — Number
Objekts vai lietojums, kas ģenerējis kļūdu — Source
3.3.7. Objekts Property
Katram objektam piemīt savas īpašības. Izmantojot objektu Property, iespējams definēt jaunas objekta īpašības. Ar šī objekta palīdzību OLE DB nodrošinātāji pievieno ADO objektu modeļa objektiem jaunas īpašības.
Svarīgākās no objekta Property īpašībām:
Īpašības tips — Type
Īpašības vērtība — Value
3.4. ADO izmantošanas iespējas
ADO tehnoloģija tika radīta kā universāls līdzeklis datu izguvei no visdažādākajiem datu avotiem. Tā dod iespēju piekļūt datiem gan relāciju, gan nerelāciju datu avotos. Galvenais priekšnoteikums datu izguves iespējamībai ir OLE DB nodrošinātāja eksistence attiecīgajam datu avotam, jo ADO izmanto OLE DB tehnoloģiju datu izguvei. Faktiski ADO ir OLE DB patērētājs.
ADO ir veidots kā iepriekšējo datu izguves tehnoloģiju labāko īpašību apvienojums. Tādēļ tas tāpat kā RDO uztur iespēju asinhroni izpildīt vaicājumus un nodibināt savienojumus ar datu avotiem, spēj apstrādāt notikumus un izpildīt glabājamās procedūras. Savukārt datu rediģēšana un pārmeklēšana tiek realizēta līdzīgi kā DAO. Arī ieliktņu realizācijas mehānisms ir līdzīgs DAO izmantotajam mehānismam. Protams, arī ADO spēj apstrādāt vairākas kļūdas, kas radušās vienas darbības rezultātā.
Galvenās ADO priekšrocības salīdzinājumā ar DAO un RDO tehnoloģijām ir spēja apstrādāt ne tikai relāciju datus, bet arī nerelāciju. Piemēram, daudzdimensiju datu bāzes datus, e-pasta sistēmu datus, CAD/CAM sistēmu datus un daudzu citu datu avotu datus. Mūsdienās nepieciešamība apstrādāt nerelāciju datus aizvien pieaug, jo informācijas plūsmas organizācijās un uzņēmumos kļūst aizvien sarežģītāka un nevienmērīgāka.
Vēl viena ADO tehnoloģijas priekšrocība ir tās optimizācija darbam Internet tīklā. Piemēram, objektu modeļa vienkāršība samazina nepieciešamos atmiņas resursus, kas ir kritisks raksturlielums Internet lietojumam ar potenciāli iespējamu lielu skaitu lietotāju.
Taču ADO tehnoloģijas pārsvars pār citām datu izguves tehnoloģijām ir izveidojies pamazām un ADO pirmās versijas nebija tik spēcīgas kā DAO tehnoloģija tai pat laikā. Tikai ADO 2.1 versija tika papildināta ar ADOX (ActiveX Data Objects Extensions for DDL and Security) — ADO tehnoloģijas paplašinājums, kas ļāva ne tikai izveidot jaunu datu bāzi un pievienot tai jaunas tabulas, bet arī regulēt lietotāju un to grupu atļaujas veikt dažādas operācijas ar datu bāzi. ADO 2.6 versija ir papildināta ar jaunu paplašinājumu — MD (Multidimensional), kas uztur darbu ar daudzdimensiju datu avotu.
Iespēja lietot šādus paplašinājumus paver iespējas ADO tehnoloģiju uzlabot un modernizēt atkarībā no nepieciešamības, nepārveidojot tehnoloģiju kā tādu.
FORMU UN MODUĻU IZVEIDE
Galveno formu un funkcijas es izveidoju atsevišķā MS Access projekta failā MY_db5.adp, kuru nepiesaistīju nevienam serverim. Pēc tam, kad projekta fails tika izveidots un saglabāts, datubāzes izvēlnē izvēlējos iedaļu Modules, kurā izvēlējos iespēju New. Pēc šīs darbības atveras jauns logs (skat. 4.1.att.)
[pic]
4.1.att. Visual Basic For Aplications logs
Visas funkcijas un procedūras es uzrakstīju ar iekšējo MS Access programmēšanas valodu VBFA (Visual Basic for Aplications).
Integrētā Visual Basic vidē ir iespējams veikt to pašu, ko jebkurā citā programmēšanas vidē. Kodu uz sintakses kļūdām pārbauda kompilējot. Lai kompilētu kodu no galvenās izvēlnes jāizvēlas Debug ( Compile (skat. 4. 2.att.). Pēc kompilācijas ar dzeltenu tiek attēlotas visas kļūdas un tiek izvadīts kļūdas ziņojums, kāpēc kļūda ir radusies.
[pic]
4. 2.att. Koda kompilēšanas darbība
Kad kodi ir nokompilēti, ir jāpalaiž izveidotais kods. To izdara izvēloties no augšējās rīku joslas Run ( Run Sub/UserForm, vai arī jānospiež taustiņš „F5” (skat. 4. 3.att.).
[pic]
4. 3. Koda palaišana
Tāpat kā citās programmēšanas vidēs, arī šeit ir iespējams pieslēgt arējas bibliotēkas. To dara no galvenās izvēlnes izvēloties Tools –> References. (skat. 4.4.att.)
[pic]
4.4.att. Ārējo bibliotēku pieslēgšana
Aplūkojot pieejamās bibliotēkas, secināju, ka visas nepieciešamās jau ir pieslēgtas.
4.1. Galvenā forma
Tagad, kas esam iepazinušies ar to, kā strādāt VBFA vidē, varam sākt galvenās formas izveidi.
Jau atvērtajā jaunajā VBFA logā ierakstam formas izveides kodu (skat. 4.1.1.att.).
[pic]
4.1.1.att. Galvenās formas izveides kods
Tagad sniegšu šī koda attēlojumu, kā arī centīšos to nedaudz komentēt.
Option Compare Database
‘Formas veidošana
Sub Jaunas_formas_veidosana()
Dim main_forma As Form
‘”Sablons_F" ir speciāli izveidota forma, lai norādītu formas noformējumu (arī satāvdaļas:Header,Footer, ...)
Set main_forma = createForm(, "Sablons_F")
main_forma.Caption = "mainform"
DoCmd.Save , "mainform"
DoCmd.OpenForm "mainform", acDesign
DoCmd.Maximize
‘formai noņemam navigācijas pogas, uzdodam formas platumu, noņemam skreollera pogas, ierakstu kontroles pogas, u.c.
.RecordSelectors = False
.NavigationButtons = False
.ScrollBars = Neither
.DividingLines = False
.AutoResize = True
.AutoCenter = True
.BorderStyle = 1
.ScrollBars = 0
.ControlBox = False
.width = 6150
‘uzstādam formai augstumu
Forms!mainform.Section(acDetail).height = 7500
‘Sākam elementu veidošanu formā
Dim elem_0 As Control
‘Formas virsraksts
Set elem_0 = CreateControl("mainform", acLabel, acDetail, "", "SQL REDAKTOR", _
1500, 150)
elem_0.Name = "Virsraksts"
‘Virsrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With elem_0
.width = 3300
.height = 500
.ForeColor = 12615680
.FontName = "Abduction II"
.FontSize = 14
End With
Dim opt_gr As Control
‘opciju grupas rāmītis
Set opt_gr = CreateControl("mainform", acOptionGroup, acDetail, "", "", _
260, 650, 5400, 300)
opt_gr.Name = "dbTypeFrame"
Dim m_elements_1 As Control
‘uzraksts
Set m_elements_1 = CreateControl("mainform", acLabel, acDetail, "", "Local Data Base", _
2500, 700)
‘Uzrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With m_elements_1
m_elements_1.Name = "T_1"
.ForeColor = 12615808
.FontName = "Umbra TL Baltic"
.FontSize = 8
.width = 1500
.height = 300
End With
Dim m_elements_2 As Control
‘opciju poga
Set m_elements_2 = CreateControl("mainform", acOptionButton, acDetail, "", "", _
2300, 700)
m_elements_2.Name = "OptionServer"
Dim m_elements_3 As Control
‘uzraksts
Set m_elements_3 = CreateControl("mainform", acLabel, acDetail, "", "Data Base", _
300, 900)
m_elements_3.Name = "T_2"
‘Uzrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With m_elements_3
.FontName = "tabor handwriting"
.ForeColor = 8388608
.FontSize = 12
.width = 1000
.height = 500
End With
Dim m_elements_4 As Control
‘teksta ievades lauks
Set m_elements_4 = CreateControl("mainform", acTextBox, acDetail, "", "", _
300, 1200, 4900, 300)
m_elements_4.Name = "path"
‘uzstādam, ka sakumā lauks nebūs aktīvs
With m_elements_4
.Enabled = no
End With
Dim poga_search As Control
‘poga „...”
Set poga_search = CreateControl("mainform", acCommandButton, acDetail, "", "", _
5300, 1200, 500, 320)
poga_search.Name = "Browse"
With poga_search
.Caption = "..."
.Enabled = no
End With
Dim poga_refresh As Control
‘poga „refresh data”
Set poga_refresh = CreateControl("mainform", acCommandButton, acDetail, "", "", _
1500, 2100, 1500, 320)
poga_refresh.Name = "refresh"
With poga_refresh
.Caption = "Refresh Data"
‘uzstādam, ka poga nav aktīva
.Enabled = no
End With
Dim poga_execute As Control
‘poga „Get data”
Set poga_execute = CreateControl("mainform", acCommandButton, acDetail, "", "", _
3200, 2100, 1500, 320)
poga_execute.Name = "execute"
With poga_execute
.Caption = "Get Data"
‘uzstādam, ka poga nav aktīva
.Enabled = no
End With
Dim meta As Control
‘uzraksts
Set meta = CreateControl("mainform", acLabel, acDetail, "", "META DATA", _
2400, 2600)
meta.Name = "meta"
‘Uzrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With meta
.ForeColor = 12615808
.FontName = "Ace Crikey"
.FontSize = 12
.width = 1500
.height = 300
End With
Dim metatab As Control
‘uzraksts
Set metatab = CreateControl("mainform", acLabel, acDetail, "", "Table list", _
1200, 3000)
metatab.Name = "metatab"
‘Uzrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With metatab
.FontName = "tabor handwriting"
.ForeColor = 8388608
.FontSize = 12
.width = 1000
.height = 300
End With
Dim listbox_1 As Control
‘saraksta izvēles lauks
Set listbox_1 = CreateControl("mainform", acListBox, scDetail, "", "", _
300, 3400, 2700, 1500)
listbox_1.Name = "tableList"
‘uzstādām, ka saraksts būs neaktīvs un lauka vērtības tips būs „Value list”, kā arī fontu un izmēru
With listbox_1
.Enabled = no
.FontName = "Caxton Bk TL"
.FontSize = 10
.RowSourceType = "Value list"
End With
Dim metafield As Control
‘uzraksts
Set metafield = CreateControl("mainform", acLabel, acDetail, "", "Field list", _
4000, 3000)
metafield.Name = "metafield"
‘Uzrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With metafield
.FontName = "tabor handwriting"
.ForeColor = 8388608
.FontSize = 12
.width = 1000
.height = 300
End With
Dim listbox_2 As Control
‘saraksta izvēles lauks
Set listbox_2 = CreateControl("mainform", acListBox, scDetail, "", "", _
3100, 3400, 2700, 1500)
listbox_2.Name = "fieldList"
‘uzstādām, ka saraksts būs neaktīvs un lauka vērtības tips būs „Value list”, kā arī fontu un izmēru
With listbox_2
.Enabled = no
.RowSourceType = "Value list"
.FontName = "Caxton Bk TL"
.FontSize = 10
End With
Dim m_elements_5 As Control
‘uzraksts
Set m_elements_5 = CreateControl("mainform", acLabel, acDetail, "", "SQL QUERY", _
2500, 5000)
m_elements_5.Name = "T_3"
‘Uzrakstam definējam augstumu, platumu, teksta krāsu, fontu un izmēru
With m_elements_5
.ForeColor = 12615808
.FontName = "Ace Crikey"
.FontSize = 12
.width = 1500
.height = 500
End With
Dim m_elements As Control
‘teksta ievades lauks
Set m_elements = CreateControl("mainform", acTextBox, acDetail, "", "", _
300, 5400, 5500, 1500)
m_elements.Name = "querry"
‘uzstādām ievades lauka fontu un izmēru
With m_elements
.FontName = "Caxton Bk TL"
.FontSize = 10
End With
Dim poga_clear As Control
‘poga „Clear all”
Set poga_clear = CreateControl("mainform", acCommandButton, acDetail, "", "", _
1500, 7000, 1500, 320)
poga_clear.Name = "clear"
With poga_clear
.Caption = "Clear All"
End With
Dim poga_exit As Control
‘poga „Exit”
Set poga_exit = CreateControl("mainform", acCommandButton, acDetail, "", "", _
3200, 7000, 1500, 320)
poga_exit.Name = "exit"
With poga_exit
.Caption = "Exit"
End With
'izveidojam notikuma procedūruu pogai „Exit”
Dim m_modulis As Module
Dim m_1 As Long
Set m_modulis = main_forma.Module
m_1 = m_modulis.CreateEventProc("Click", poga_exit.Name)
' Izpildāmā koda ierakstīšana notikumu procedūrā
m_modulis.InsertLines m_1 + 1, "DoCmd.Close , , acSaveYes"
ClickEventProc = True
'Izsaucam pogas "Clear" notikuma procedūru
m_1 = m_modulis.CreateEventProc("Click", poga_clear.Name)
m_modulis.InsertLines m_1 + 1, "call clear_button()"
ClickEventProc = True
'Izsaucam pogas "..." notikuma procedūru
m_1 = m_modulis.CreateEventProc("Click", poga_search.Name)
m_modulis.InsertLines m_1 + 1, "call browse_button()"
ClickEventProc = True
'Izsaucam pogas "Get Data" notikuma procedūru
m_1 = m_modulis.CreateEventProc("Click", poga_execute.Name)
m_modulis.InsertLines m_1 + 1, "call execute_button()"
ClickEventProc = True
'Izsaucam tabulas lauku saraksta dubultklikšķa notikuma procedūru
m_1 = m_modulis.CreateEventProc("DblClick", listbox_2.Name)
m_modulis.InsertLines m_1 + 1, "call fieldList_dbl_button()"
ClickEventProc = True
'Izsaucam opciju pogas notikuma procedūru
m_1 = m_modulis.CreateEventProc("GotFocus", m_elements_2.Name)
m_modulis.InsertLines m_1 + 1, "call OptionServer_button()"
ClickEventProc = True
'Izsaucam pogas "Refresh Data" notikuma procedūru
m_1 = m_modulis.CreateEventProc("Click", poga_refresh.Name)
m_modulis.InsertLines m_1 + 1, "call refresh_button()"
ClickEventProc = True
'Izsaucam tabulas saraksta klikšķa notikuma procedūru
m_1 = m_modulis.CreateEventProc("Click", listbox_1.Name)
m_modulis.InsertLines m_1 + 1, "call tableList_button()"
ClickEventProc = True
'Izsaucam tabulas saraksta dubultklikšķa notikuma procedūru
m_1 = m_modulis.CreateEventProc("DblClick", listbox_1.Name)
m_modulis.InsertLines m_1 + 1, "call tableList_dbl_button()"
ClickEventProc = True
End Sub
Pēc koda nokompilēšanas un palaišanas atveras galvenā formā, ko esam izveidojuši ar koda palīdzību (skat. 4.1.2.att.). Var redzēt, ka neviena no pogām, ar kuru palīdzību varētu sākt veikt darbu nav aktīva, kamēr netiks nospiesta opciju poga, lai tiktu izvēlēts darbs ar lokālo datu bāzi. Šāda aisardzība ir uzlikta tādēļ, ja lietotajs netīšām nevarētu sakt nepareizu darbību ar formu.
Veidojot galveno formu, esmu izveidojuši arī pogu notikumu procedūru izsaukumus. Pašas pogu un lauku notikumu procedūras iesvietoju citā modulī, ko aprakstīšu tālāk.
[pic]
4.1.2.att. Galvenā forma
4.2. Pogu un teksta lauku apstrāde
Ka jau minēju iepriekš, tad pogu izsaukšanas procedūras ir izveidotas formas veidošanas modulī. Tālāk aprakstīšu pašas pogu procedūras.
4.2.1. Opciju poga
Līdz ar opcijas pogas iezīmēšanu, formā notiek dažādas darbības:
Public Sub OptionServer_button()
Forms("mainForm").path = ""
‘pogas „Get data” un „Refresh data” joprojām ir neaktīvas
Forms("mainForm").controls("refresh").Enabled = False
Forms("mainForm").controls("execute").Enabled = False
‘saraksta izvēles lauki joprojām ir neaktīvi
‘dzēšam atsevišķu elementu saturu, ja kaut kas ir ievadīts
For i = Forms("mainForm").tableList.ListCount - 1 To 0 Step -1
Forms("mainForm").tableList.RemoveItem (i)
Next i
For i = Forms("mainForm").fieldList.ListCount - 1 To 0 Step -1
Forms("mainForm").fieldList.RemoveItem (i)
Next i
Forms("mainForm").tableList.Enabled = False
Forms("mainForm").fieldList.Enabled = False
Forms("mainForm")("querry") = ""
‘poga „...”un arī teksta logs kļūst par aktīviem, lai lietotājs var izvēlēties datu avotu, no kura tiks izgūti dati
Forms("mainForm").controls("Browse").Enabled = True
Forms("mainForm").controls("path").Enabled = TrueEnd Sub
Tātad, pēc tam, kad tiks izvēlēta opciju poga, aktivizēsies poga „...” un teksta lauks, kur tiks attēlots ceļš līdz datu bāzei (skat. 4.2.1.1.att.). Tagad var sākt strādāt ar „sql redaktoru”.
[pic]
4.2.1.1.att. Galvenās formas izmaiņas pēc opciju pogas izvēles
4.2.2. Poga „...”
Nospiežot doto pogu atveras faila atvēršanas dialoga logs, ar kura palīdzību lietotājs var nokļūt kādā mapē un atrast nepieciešamo datu avotu. Faila dialogs pēc noklusējuma parāda visus atbalstītos failus – MS Access datu bāzes un MS Excel grāmatas. Te var izvelēties arī iespēju apskatīt atsevišķi tikai pieejamos *.mdb failus, vai *.xls failus (skat. 4.2.2.1.att.).
[pic]
4.2.2.1.att. Datu avota izvēle
Kad ir izvēlēts fails, spiežam Open un fails tiek atvērts. Data base laukā ir norādīts ceļš līdz datu bāzei (skat. 4.2.2.2.att.).
[pic]
4.2.2.2.att. Ceļš līdz vēlamajai datu bāzei
Pogai „...” ir piekārtota notikumu apstrādes procedūra. Šajā gadījumā kā notikums ir ņemts peles klikšķis uz elementa:
Public Sub Browse_button()
Dim dialog As FileDialog
‘izveidots Mainīgais ar tipu FileDialog no bibliotēkas „Microsoft Office 11.0 Object Library”, kas atver faila atvēršanas dialoga logu
Dim i As Integer
Dim j As Integer
Set dialog = Application.FileDialog(msoFileDialogOpen)
‘Dialogam piešķitam failu atvēršanas dialoga tipu
dialog.Filters.clear
‘dzēšam visus filtrus, kuri atpazīst failu veidu pēc faila paplašinājuma
dialog.AllowMultiSelect = False
‘neļaujam atvērt vairākus failus vienlaicīgi
dialog.Title = "Open File..."
‘ iedodam dialoga logam nosaukumu
dialog.Filters.Add "All files", "*.mdb; *.xls", 1
‘Kā pamata filtrs tiek izveidots filtrs – All files. Šis filtrs atpazīst tikai *.mdb un *.xls failus
dialog.Filters.Add "MS Excel book", "*.xls", 2
‘Tiek izveidots filtrs, kurš atpazīst tikai *.xls failus
dialog.Filters.Add "MS Access database", "*.mdb", 3
‘Tiek izveidots filtrs, kurš atpazīst tikai *.mdb failus
dialog.FilterIndex = 1
‘pēc noklusējuma tiek uzstādīts pirmais filtrs (All files)
Forms("mainForm").path.Enabled = True
‘aktivizē datu bāzes īsceļa teksta lauks
If dialog.Show = -1 Then
‘ja tiek parādīts dialogs
Forms("mainForm").path = dialog.FilterIndex
‘teksta laukam ‘path’ piešķiram vērtību, kas ir vienāda ar izvelēta filtra numuru
Forms("mainForm").path.SetFocus
Forms("mainForm")!path = dialog.SelectedItems(1)
‘Piešķiram teksta laukam ‘path’ pilnu ceļu uz failu
Forms("mainForm").controls("refresh").Enabled = True
‘aktivizē pogu „Refresh data” un atstāj neaktīvu pogu „Get data”
Forms("mainForm").controls("execute").Enabled = False
‘saraksta izvēles lauki paliek neaktīvi
‘dzēšam atsevišķu elementu saturu, ja kaut kas ir ievadīts
For i = Forms("mainForm").tableList.ListCount - 1 To 0 Step -1
Forms("mainForm").tableList.RemoveItem (i)
Next i
For i = Forms("mainForm").fieldList.ListCount - 1 To 0 Step -1
Forms("mainForm").fieldList.RemoveItem (i)
Next i
Forms("mainForm").tableList.Enabled = False
Forms("mainForm").fieldList.Enabled = False
Forms("mainForm")("querry") = ""
End If
End Sub
Tātad, pēc tam, kad ir izvēlēts datu bāzes fails, teksta laukā ‘path’ parādās ceļā līdz datu bāzei. Lauku manuāli mainīt nav iespējams, tajā tikai var redzēt ceļu līdz datu bāzei. Tāpat aktivizējas arī poga „refresh data”, kuru nospiežos, tiks attēloti izvēlētā datu avota meta dati.
4.2.3. Poga „Refresh Data”
Nospiežot šo pogu tiek izgūti meta dati no izvēlētā datu avota. Tiek atteloti tabulu nosaukumi un lauki, kuri atrodas datu avotā. Poga kļūst aktīva tikai pēc tam kad ir izvēlēts attiecīgais datu avots, izmantojot pogu „...”. Nospiežot pogu „Refresh data” nostrādā notikumu apstrādes procedūra uz peles klikšķi uz elementa:
Public Sub refresh_button()
On Error GoTo errProc:
‘Ja ir kļūda, tad pāriet uz errProc
Dim database As New ADOX.Catalog
‘izveidots mainīgais ‘database’ ar tipu ADOX.Catalog
Dim table As New ADOX.table
‘izveidots mainīgais ‘table’ ar tipu ADOX.table, mainīgais ir ADOX tabula
Dim extension As String
Dim tmpString As String
Dim i As Integer
Dim server As String
‘izveidoti vairāki mainīgie ar tipu simbolu virkne (String)
For i = Forms("mainForm").tableList.ListCount - 1 To 0 Step -1
Forms("mainForm").tableList.RemoveItem (i)
Next i
‘ar ciklu tiek dzēsts tabulas saraksts saturs (tableList)
tmpString = Forms("mainForm").path
‘simbolu virknei ‘tmpString’ piešķir teksta lauka ‘path’ saturu
extension = Right(tmpString, 3)
‘simbolu virknei ‘extension’ piešķir datubāzes paplašinājumu
If (extension = "mdb") Then
database.ActiveConnection = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & tmpString & ";"
‘datu bāzei pārbauda datu bāzes nosaukuma paplašinājumu, ja tas ir mdb, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 netiek padoti papildus parametri. Kā standarta parametrs tiek padots ceļš līdz datu bāzei
For i = 0 To database.tables.Count - 1
Set table = database.tables(i)
Forms("mainForm").tableList.AddItem Item:=table.Name
Next i
Forms("mainForm").controls("execute").Enabled = True
Forms("mainForm").tableList.Enabled = True
‘pievieno tabulas tabulu sarakstam
Else:
If (extension = "xls") Then
database.ActiveConnection = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & tmpString & ";Extended Properties = Excel 8.0;"
‘pārbauda datu bāzes nosaukuma paplašinājumu, ja tas ir xls, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 tiek padosi papildus parametrs – Excel 8.0, kas norāda, ka datu bāze ir MS Excel grāmata. Kā standarta parametrs tiek padots ceļš līdz datu bāzei.
For i = 0 To database.tables.Count - 1
Set table = database.tables(i)
If Left(table.Name, 5) "Sheet" Then
Forms("mainForm").tableList.AddItem Item:=table.Name
End If
Next i
Forms("mainForm").controls("execute").Enabled = True
Forms("mainForm").tableList.Enabled = True
‘pievieno tabulas tabulu sarakstam
End If
End If
Exit Sub
errProc:
MsgBox "Unable to connect data source!", vbCritical, "Data source error"
Exit Sub
‘ja kļūda, tad tiek izvadīts paziņojums
End Sub
4.2.4. Saraksta lauks „Field list”
Tātad, saraksta lauks „Field list” satur izvēlētas tabulas lauku sarakstu. Izvēloties attiecīgo tabulu no Table list, tabulu lauku sarakstā, parādās attiecīgās tabulas Field list. Tabulas lauku saraksta notikumu apstrādes procedūra apstrādā dubultklikšķa notikumu uz jebkura saraksta elementa. Pēc dubultklikšķa attiecīgā lauka nosaukums parādās SQL vaicājuma ievades logā. Šādi tiek nodrošināts tas, ka lietotājam nav obligāti manuāli jāievada lauka nosaukums, rakstot vaicājumu. Lietotājam vienkārši ir jānovieto kursors SQL vaicājuma teksta lauka vēlamajā vietā un pēc tam ar dubultklikšķi jānoklikšķina uz attiecīgā lauka nosaukumu un lauka nosaukums parādīsies kursora vietā SQL vaicājuma laukā.
Private Sub fieldList_dbl_button()
Dim sqlString As String
‘pievieno lauka nosaukumu teksta logā, kur tiks ievadīts vaicājums
SQL = Forms("mainForm").fieldList.ItemData(Forms("mainForm").fieldList.ListIndex)
Forms("mainForm")("querry") = Forms("mainForm")("querry") & " " & SQL
End Sub
4.2.5. Saraksta lauks „Table list”
Šis formas elements satur izvēlētās datu bāzes tabulu sakrakstu. Izvēloties attiecīgo tabulu no Table list, Field list parādās tabulu lauk. Izvēloties citu tabulu mainās lauki. Tabulas saraksts nodrošina divu notikumu apstrādi – klikšķa un dubultklikšķa apstrāde un elementa. Ja klikšķina vienreiz, tad Field list parādās iezīmētās tabulas lauki, ja divreiz, tad attiecīgās tabulas nosaukums tiek pievienots SQL vaicājuma ievades teksta laukā.
Viens klikšķis:
Public Sub tableList_button()
Dim database As New ADOX.Catalog
‘izveido mainīgo ‘database’, kurš būs ADOX katalogs
Dim table As New ADOX.table
‘izveido mainīgo ‘table’, kurš būs ADOX tabula
Dim i As Integer, j As Integer
Dim extension As String
Dim tmpString As String
Dim server As String
‘izveido vairākus mainīgos ar tipu simbolu virkne
tmpString = Forms("mainForm").path
‘piešķir mainīgajam ceļu uz datu bāzi
extension = Right(tmpString, 3)
‘piešķir mainīgajam datu bāzes paplašinājumu
For i = Forms("mainForm").fieldList.ListCount - 1 To 0 Step -1
Forms("mainForm").fieldList.RemoveItem (i)
Next i
‘dzēš elementa Field list saturu
If (extension = "mdb") Then
database.ActiveConnection = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & tmpString & ";"
‘pārbaudīta datu bāzes nosaukuma paplašinājumu, ja tas ir mdb, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 netiek padoti papildus parametri. Kā standarta parametrs tiek padots ceļš līdz datu bāzei
Else:
If (extension = "xls") Then
database.ActiveConnection = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & tmpString & ";Extended Properties = Excel 8.0;"
‘pārbaudīta datu bāzes nosaukuma paplašinājumu, ja tas ir xls, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 tiek padosi papildus parametrs – Excel 8.0, kas norāda, ka datu bāze ir MS Excel grāmata. Kā standarta parametrs tiek padots ceļš līdz datu bāzei
End If
End If
‘Field list pievieno izvēlētās tabulas laukus
For i = 0 To database.tables(Forms("mainForm").tableList.ItemData(Forms("mainForm").tableList.ListIndex)).Columns.Count - 1
Forms("mainForm").fieldList.AddItem database.tables(Forms("mainForm").tableList.ItemData(Forms("mainForm").tableList.ListIndex)).Columns(i).Name, i
Next i
‘aktivizē Field list
Forms("mainForm").fieldList.Enabled = True
End Sub
Divi klikšķi
Public Sub tableList_dbl_button()
Dim sqlString As String
‘pievieno tabulas nosaukumu teksta logā, kur tiks ievadīts vaicājums
SQL = Forms("mainForm").tableList.ItemData(Forms("mainForm").tableList.ListIndex)
Forms("mainForm")("querry") = Forms("mainForm")("querry") & " " & SQL
End Sub
4.2.6. Poga „Get Data”
Nospiežot šo pogu tiek izgūti meta dati no datu avota. Meta dati tiek izgūti izmantojot SQL vaicājumu, kurš tiek nolasīts no SQL vaicājuma ievades lauka. Pēc noklusējuma poga ir neaktīva. Poga „Get data” kļūst aktīva tikai pēc tam, kad ir iegūti visi nepieciešamie meta dati – tabulas nosaukumi un tabulu lauku nosaukumi (Table list un Field list). Nospiežot pogu „Get data” nostrādā notikumu apstrādes procedūra uz peles klikšķi uz elementa. Pēc pogas nospiešanas uz ekrāna tiek izvadīta rezultātu forma, kura satur SQL vaicājuma rezultātu.
Public Sub execute_button()
Dim records As ADODB.recordSet
‘definē mainīgo ar tipu ADODB rakstu kopa
If (Forms("mainForm").querry "") Then
‘ja vaicājums ir ievadīts, tad tiek izpildītas
Set records = getExternalData.getDatabases(Forms("mainForm").path, Me.querry)
displayData.createResForm records
‘rakstu kopas mainīgajam ‘records’ piešķir rakstu kopu, kuru nolasa no datu bāzes Forms("mainForm").path. Tiek nolasīti tie raksti, kuri atbilst vaicājumam Forms("mainForm").querry
Else: MsgBox "Query not entered", vbCritical, "SQL error"
‘ja nav ievadīts vaicājums – izvada paziņojumu
End If
End Sub
4.2.7. Poga „Clear All”
Šīs pogas nospiešana dzēš saturu visos laukos un forma nonāk sākumstāvoklī (t.i. tiek dezaktivēti vairāki lauki, kā bija sakumā). Pogai ir viena notikumu apstrādes procedūra uz peles klikšķa uz elementa:
Public Sub clear_button()
Forms("mainForm").path = ""
‘dzēš teksta lauku ‘path’
Forms("mainForm").controls("refresh").Enabled = False
Forms("mainForm").controls("execute").Enabled = False
‘deaktivē pogas
For i = Forms("mainForm").tableList.ListCount - 1 To 0 Step -1
Forms("mainForm").tableList.RemoveItem (i)
Next i
For i = Forms("mainForm").fieldList.ListCount - 1 To 0 Step -1
Forms("mainForm").fieldList.RemoveItem (i)
Next i
‘dzēš elementus Table list un Field list
Forms("mainForm").tableList.Enabled = False
Forms("mainForm").fieldList.Enabled = False
‘deaktivē Table list un Field list
Forms("mainForm")("querry") = ""
‘dzēš vaicājumu
End Sub
Vēl ir poga „Exit”, kuru nospiežot, tiek aizvēra MS Access vide. Tā tika definēta formas izveides modulī, kur arī to aprakstīju.
Atlikušajā SQL ievades teksta laukā ir jāievada vaicājums, jo lai izgūtu datus no datu avotiem tiek izmantots SQL vaicājums, kurš tiek nolasīts tieši no šī teksta lauka.
Kad ir definēta notikumu apstrāde, tad var sākt datu izgūšanas funkciju rakstīšanu.
4.3. Datu izgūšana
Datu izgūšanas funkcijas izvietoju cita modulī, kurš nav saistīts ne ar formas izveidi, ne ar pogu apstrādi. Šāda moduļu izveides kārtība ļauj ērtāk orientēties izveidotajos failos un kodos.
Datu izgūšanas modulī izvietoju funkciju, kura iegūst ADODB rakstu komu, kura pēc tam tiks parādīta formā kā rezultāts. Funkcijai, kā parametrus, nodevu izvēlētās datu bāzes atrašanās ceļu, kā arī ievadīto vaicājumu.
Public Function getDatabases(path As String, SqlQuerry As String) As ADODB.recordSet
On Error GoTo errProc:
‘ja ir kļūda, tad pāriet uz errProc
Dim databaseConnection As New ADODB.Connection
‘piešķir mainīgajam ‘databaseConnection’ tipu ADODB savienojums
Dim recSet As New ADODB.recordSet
‘definēs mainīgo’ recSet’ ar tipu ADODB rakstu kopa
Dim extension As String
Dim server As String
‘definē mainīgos ar tipu simbolu virkne
extension = Right(path, 3)
‘piešķir mainīgajam’ extension’ datu bāzes faila paplašinājumu
If (extension = "mdb") Then
databaseConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & path & ";"
‘pārbauda datu bāzes nosaukuma paplašinājumu, ja tas ir mdb, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 netiek padoti papildus parametri. Kā standarta parametrs tiek padots ceļš līdz datu bāzei . Šajā gadījumā tiek nevis izveidots savienojums, bet gan tiek atvērts savienojums
Else:
If (extension = "xls") Then
databaseConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & path & ";Extended Properties = Excel 8.0;"
‘ pārbauda datu bāzes nosaukuma paplašinājumu, ja tas ir xls, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 tiek padosi papildus parametrs – Excel 8.0, kas norāda, ka datu bāze ir MS Excel grāmata. Kā standarta parametrs tiek padots ceļš līdz datu bāzei . Šajā gadījumā tiek nevis izveidots savienojums, bet gan tiek atvērts savienojums
Else: MsgBox "Unable to find data source!", vbCritical, "SQL error"
‘ja nevar atrast datu avotu, izvada paziņojumu
End If
End If
recSet.Open SqlQuerry, databaseConnection, adOpenKeyset, adLockOptimistic
‘atver rakstu kopu ‘recSet’
Set getDatabases = recSet
‘nodod funkcijai tās atgriežamo vērtību
Exit Function
errProc:
MsgBox "Incorrect SQL query!", vbCritical, "SQL error"
Exit Function
‘ja nepareizs vaicājums, tad izvada paziņojumu
End Function
4.4. Datu attēlošana
Datu izgūšanas modulī izvietoju divas funkcijas. Šis modulis palīdz izveidot dināmisku formu, kura spēj mainīt lauku skaitu, izmēru atkarībā no iegūto lauku skaita. Šeit arī ir izvietoti visas nepieciešamās formas apstrādes procedūras.
‘Funkcija izveido dinamisku formu ar visiem datu avota rakstiem
Public Function createResForm(records As ADODB.recordSet) As Form
On Error GoTo errProc:
‘ja ir kļūda, tad pāriet uz errProc
Dim resultForm As New Form
‘definē formu „resultform”
Dim controls As New Control
‘definē mainīgo ar tipu ‘controls’
Dim fieldNumber As Integer
‘definēt mainīgo, kurš satur jaunās formas lauku skaitu
Dim i As Integer
Dim height As Integer
‘definē mainīgo, kurš saturformas augstumu
Dim formName As String.
‘definē mainīgo, kurš satur formas nosaukum
Dim resultModule As Module
‘definē formas moduli resultModule
Dim rowNumber As Integer
fieldNumber = records.fields.Count - 1
‘piešķir mainīgajam ‘fieldNumber’ rakstu skaitu. Lauku skaits būs par vienu pozīciju mazāks, jo lauku skaita numerācija formā sākas no 0
Set resultForm = createForm
‘izveido rezultātu formu
formName = resultForm.Name
‘piešķir mainīgajam formas nosaukumu
‘definē dažādus formas parametrus
With resultForm
.Caption = "Result Form"
.RecordSelectors = False
.NavigationButtons = False
.DividingLines = False
.AutoResize = True
.AutoCenter = True
.BorderStyle = 1
.ScrollBars = 0
.ControlBox = False
End With
‘Ciklā izveido laukus, kuros glabāsies iegūtie dati. Katram laukam tiek izveidota atbilstoša iezīme
For i = 0 To fieldNumber
Set controls = CreateControl(formName, acLabel, acDetail, , records.fields(i).Name + ":")
controls.Name = "Label" & i
‘definē uzrakstu krāsu, fontu un izmēru
With controls
.ForeColor = 8388608
.FontName = "tabor handwriting"
.FontSize = 12
End With
Set controls = CreateControl(formName, acTextBox, , , , , , 2000)
controls.Name = "TextBox" & i
‘definē teksta lauku krāsu, fontu un izmēru
With controls
.FontName = "Caxton Bk TL"
.FontSize = 10
End With
Next i
‘ciklā nosaka izveidoto lauku un iezīmju izmēu un izvietojums rezultātu formā
For i = 0 To fieldNumber
If (i = 0) Then height = 400
resultForm.controls("Label" & i).Left = 1500
resultForm.controls("Label" & i).Top = height
height = resultForm.controls("Label" & i).Top + 350
resultForm.controls("TextBox" & i).Left = 1500
resultForm.controls("TextBox" & i).Top = height
height = resultForm.controls("TextBox" & i).Top + 500
Next i
‘piešķir funkcijai createResForm atgriežamo vērtību. Funkcijas atgriežamā vērtība ir ar tipu form un tāpēc tiek atgriezts mainīgais ar tipu form. Šeit – rezultātu forma
Set createResForm = resultForm
‘ izveido vadības pogas un iziešanas pogas.Definē nosaukumus, tipus, izmērus, izvietojumu
‘poga „First”
Set controls = CreateControl(formName, acCommandButton, acDetail, , , 1200, height + 500, 1000, 300)
controls.Name = "ToFirstRec"
controls.Caption = ""
‘poga „Previous”
Set controls = CreateControl(formName, acCommandButton, acDetail, , , 1200, height + 1000, 1000, 300)
controls.Name = "ToPreviousRec"
controls.Caption = ""
‘poga „Close”
Set controls = CreateControl(formName, acCommandButton, acDetail, , , 1950, height + 1500, 1000, 300)
controls.Name = "Leave"
controls.Caption = "Close"
‘piešķir mainīgajam ‘resultModule’ rezultātu formas moduli.
Set resultModule = resultForm.Module
‘notiek rezultātu formas moduļa apstrāde. Modulī tiek ierakstītas nepieciešamas koda rindiņas,tiek definēti mainīgie, tiek veidotas notikumu apstrādes procedūras.
resultModule.InsertLines 3, "Dim position as Integer, recNr as integer"
‘izveido procedūru, kura ielādē formu
rowNumber = resultModule.CreateEventProc("Load", "Form")
‘iekš procedūras izsauc procedūru ‘loadDatabase’ ar parmetrie position un me.name
resultModule.InsertLines rowNumber + 1, "loadDatabase position, me.name"
‘ notikuma notikumu apstrādes procedūra pogai ToNextRec (Next)-pāreja uz nākamo ierakstu
rowNumber = resultModule.CreateEventProc("Click", "ToNextRec")
resultModule.InsertLines rowNumber + 1, "position = position + 1"
resultModule.InsertLines rowNumber + 2, "loadDatabase position, me.name"
‘notikuma notikumu apstrādes procedūra pogai ToPreviousRec(Previous) - pāreju uz iepriekšējo ierakstu
rowNumber = resultModule.CreateEventProc("Click", "ToPreviousRec")
resultModule.InsertLines rowNumber + 1, "position = position - 1"
resultModule.InsertLines rowNumber + 2, "loadDatabase position, me.name"
‘notikuma notikumu apstrādes procedūra pogai ToFirstsRec(First) - pāreju uz pirmo ierakstu
rowNumber = resultModule.CreateEventProc("Click", "ToFirstRec")
resultModule.InsertLines rowNumber + 1, "position = 0"
resultModule.InsertLines rowNumber + 2, "loadDatabase position, me.name"
‘notikuma notikumu apstrādes procedūra pogai ToLastsRec(Lasts) - pāreju uz pēdējo ierakstu
rowNumber = resultModule.CreateEventProc("Click", "ToLastRec")
resultModule.InsertLines rowNumber + 2, "loadDatabase position, me.name, ""Last"""
‘ notikumu apstrādes procedūra pogai „Close”- aizver formu, nesaglabājot to.
rowNumber = resultModule.CreateEventProc("Click", "Leave")
resultModule.InsertLines rowNumber + 1, "DoCmd.Close ,,acSaveNo"
‘kad atver formu, definē formas izvietojumu un izmērus
DoCmd.OpenForm formName
DoCmd.MoveSize , , , height + 2500
DoCmd.MoveSize , , 5000
Forms(formName).Move 5100, 1000
Exit Function
‘ja ir kļūda, tad izvada paziņojumu par nespēju izveidot formu
errProc:
MsgBox "Unable to create form!", vbCritical, "Form creation error"
Exit Function
End Function
‘Funkcija nolasa ierakstus no datu avota.
Public Sub loadDatabase(position As Integer, formName As String, Optional Action As String)
‘ja kļūda, tad pāriet pie errProc
On Error GoTo errProc:
‘definē mainīgo ar tipu ADODB savienojums
Dim databaseConnection As New ADODB.Connection
‘definē mainīgo’ records’ ar tipu ADODB rakstu kopa
Dim records As New ADODB.recordSet
‘definē mainīgosar tipu String
Dim SqlQuerry As String
Dim i As Integer
Dim extension As String
Dim tmpString As String
Dim server As String
‘piešķir mainīgajam ‘SqlQuerry’ vaicājumu no galvenās formas
SqlQuerry = Forms("mainForm").querry
‘piešķir mainīgajam ‘tmpString’ ceļu uz datu bāzi.
tmpString = Forms("mainForm").path
‘piešķir mainīgajam ‘extension’ datu bāzes faila paplašinājumu
extension = Right(tmpString, 3)
‘pārbauda datu bāzes nosaukuma paplašinājumu, ja tas ir mdb, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 netiek padoti papildus parametri. Kā standarta parametrs tiek padots ceļš līdz datu bāzei . Šajā gadījumā tiek nevis izveidots savienojums, bet gan tiek atvērts savienojums
If (extension = "mdb") Then
databaseConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & tmpString & ";"
‘pārbauda datu bāzes nosaukuma paplašinājumu, ja tas ir xls, tad datu gādniekam Microsoft.Jet.OLEDB.4.0 tiek padosi papildus parametrs – Excel 8.0, kas norāda, ka datu bāze ir MS Excel grāmata. Kā standarta parametrs tiek padots ceļš līdz datu bāzei . Šajā gadījumā tiek nevis izveidots savienojums, bet gan tiek atvērts savienojums
Else:
If (extension = "xls") Then
databaseConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = " & tmpString & ";Extended Properties = Excel 8.0;"
‘ja nevar izveidot savienojumu ar datu bāzi, tad izvada paziņojumu
Else: MsgBox "Unable to find data source!", vbCritical, "SQL error"
End If
End If
‘atver rakstu kopu ‘records’
records.Open SqlQuerry, databaseConnection, adOpenKeyset, adLockOptimistic
‘koriģē cadības pogu izpildes darbības
If position < 0 Then position = 0
If position = records.RecordCount Then position = records.RecordCount - 1
If Action = "Last" Then position = records.RecordCount - 1
‘piešķir atbilstošās vērtības rezultātu formas laukiem
records.Move position
For i = 0 To records.fields.Count - 1
Forms(formName).controls("TextBox" & i) = records.fields(i).Value
Next i
‘definējam formas nosaukumā kopējo ierakstu skaitu un attēlojamā ieraksta numuru
Forms(formName).Caption = position + 1 & " record. Total: " & records.RecordCount
Exit Sub
‘ja ir kļūda, ka nevar nolasīt datus, tad izvada paziņojumu
errProc:
MsgBox "Unable to display table data!" & _
"Table might be empty!", vbCritical, "Form creation error"
Exit Sub
End Sub
Tagad, kad ir izveidota rezultātu forma, mēģināsim to vizuāli attēlot. Taču pagaidām nesniegšu lietotaja kontrolpiemēru, bet gan tikai formas vizuālo aprakstu (skat. 4.4.1.att.).
[pic]
4.4.1.att. Rezultātu forma un tās elementi
Vēl būtu pāpiebilst, ka programmas darbības nokompilešana ir veicama no galvenās formas ar funkciju „Jaunas_formas_veidosana”, kas atrodas modulī „Formas_izveide”, jo ta ir programmas galvenā funkcija un, ja logiski paromā, tad programma nevar strādāt ja kompilēšanu veic no kādas atsevišķas pogas. Dotā funkcija ir jāizvēlās no funkciju saraksa, kurš parādās, kar tiek nospiesta poga „run” (skat. 4.4.2.att.).
[pic]
4.4.2.att. Programmas nokompilēšanas funkcijas izvēle
DATU IZGŪŠANAS PIEMĒRI
Kad forma ir izveidota, ir jāpārlicinās vai datu izgūšana ir korekta, tas ir, vai tiek izgūti pareizie dati saskaņā ar ievadīto SQL vaicājumu. Manis izveidotais projekts MS Access vidē var izgūt datu 2 avotiem: MS Access datu bāzes un MS Excel grāmatas, tapēc arī pārbaudīsim abus avotus ar vairākiem vaicājumiem. Tāpat pārbaudīsim arī pieslēgšanās korektums un meta datu iegūšanas pareizību.
1 Dati no MS Access datu bāzes
Galvenajā formā, uzklikšķinot uz pogas „...” izvēlēsimies datu avotu db3.mdb, kurš bija izveidots 2 laboratorijas darba vajadzībām (skat. 5.1.1.att.), un nospiežam pogu Open.
[pic]
5.1.1.att. datu avota (*.mdb) izvēle
Kad tas ir izdarīts, tad redzams, ka formā ir attēlots ceļš uz izvēlēto datu bāzi, ka arī tika aktivizēta poga „Refresh Data” (skat. 5.1.2.att.).
[pic]
5.1.2.att. Formas izmaiņas pēc avota izvēles
Lai aplūkotu iespējamās tabulas un to laukus datubāzē, nospiedīsim pogu „refresh data”, lai varētu redzet metadatus. Pēc pogas nospiešanas, aktivizējas poga „Get Data” un arī laukos „Table list” un „Field list” parādās attiecīgie metadatni (skat. 5.1.3.att.).
[pic]
5.1.3.att. Formas izmaiņas pēc pogas „refresh data” nospiešanas. Meta datu attēlošana
Redzams, ka tagad var aplūkot visas pieejamās tabulas, kā arī to laukus. Tieši šādas tabulas un lauki bija izmantoti šaja datu bāzē. Lai turpinātu darbu, ievadīsim vaicājuma logā vaicājumu (skat. 5.1.4.att.).
[pic]
5.1.4.att. Vaicājuma ievade
Vaicājuma loģiskais teksts:
Izvadīt mašīnas marku, numuru, izlaiduma gadu un klientu ID tiem klientiem, kuru mašīnas ir melnā vai dzeltenā krāsā un ir izlaistas pēc 2000.gada (ieskaitot).
Vaicājums:
SELECT DISTINCT au.AUTO_marka, au.AUTO_nr, au.AUTO_izlg, au.KL_id
FROM AAUTO AS B, [SELECT A.AUTO_marka, A.AUTO_nr, A.AUTO_izlg, A.KL_id
FROM AAUTO A
WHERE A.AUTO_izlg >= 2000 AND (A.AUTO_krasa='melna' OR A.AUTO_krasa='dzeltena') ]. AS au
WHERE B.KL_id=au.KL_id;
Iegūto rezultātu varam pārbaudīt 2 laboratorijas darba failā, kur jau ir ievadīti dotie vaicājumi (skat. 5.1.5.att.).
[pic]
5.1.5.att. 1. vaicajums tabulas veidā
Lai iegūtu šādus ierakstus formas veidā, nospiedīsim pogu „Get data”. Parādīsies dinamiska forma ar rezultātiem (skat. 5.1.6.att.).
[pic]
5.1.6.att. 1. vaicājuma rezultāts
Kā redzams, tad šajā formā ir 5 ieraksti ( to var redzēt formas augšpusē), kā arī pirmais ieraksts, kur tiek attēlots, sakrīt ar vaicājuma izpildes rezultātu iepriekšējā attēlā. Šķirstot ierakstus, tika attēloti visi prasītie dati. Nospiežot pogu „close”, šī forma tiek aizvērta.
Šei es varētu minēt arī iespējamās kļūdas, kuras var rasties.
Var rasties kļūda, ja lietotājs ir nospiedis pogu „Get data”, bet nav ievadījis SQL vaicājumu (skat. 5.1.7.att.).
[pic]
5.1.7.att. ziņojums, ka nav ievadīts vaicājums
Kļūda var rasties arī tad, ja vaicājums ir nepareizi ievadīts. Tad izvada 2 kļūdu paziņojumus, ka vaicājums ir nepareizs, un, ka nevar izveidot formu. Formu nevar izveidot tādēļ, ka, forma ir jau izveidota, tajā nav tikai datu. Pēc šī kļūdas paziņojuma forma tiek iznīcināta (skat. 5.1.8. un 5.1.9.att.).
[pic]
5.1.8. att. Ziņojums, ka ir ievadīts nepareizs vaicajums
[pic]
5.1.9.att. Ziņojums, ka nevar izveidot formu
Tagad ievadīsim citu vaicājumu, kurš apvienotu 2 tabulas:
Vaicājuma loģiskais teksts:
Izvadīt klientu vārdus, uzvārdus, viņu automašīnu numuru un markas, kuru izlaidumu gads ir lielāks par 2002.gadu vai mazāks par 2005.gadu.
Vaicājums:
SELECT kl.KL_var, kl.KL_uzv, au.AUTO_nr, au.AUTO_marka
FROM AKlienti AS kl, AAuto AS au
WHERE kl.KL_id=au.KL_id And (au.AUTO_izlg>2002 Or au.AUTO_izlg1;
Rezultāts tabulā (skat. 5.2.5.att.):
[pic]
5.2.5.att. 2.vaicājums tabulas veidā
Iegūtais rezultāts formā (skat. 5.2.6.att.):
[pic]
5.2.6.att. 2.vaicājuma rezultāts
Tātad, līdz ar to varam redzēt, ka arī šeit formas darbība ir nostrādajusi pareizi. Tātad, uzstādītie uzdevumi ir veiksmīgi paveikti.
SECINĀJUMI
Pildot šo laboratorijas darbu es izmantoju jau gatavu 2.laboratorijas darbam izveidoto datu bāzi MS Access vidē, ka arī izveidoju nelielu tabulu MS Excel vidē. Tā ir neliela tādēļ, ka šī darba uzdevums bija nevis mācēt izveidot lielu tabulu Excelī, bet gan ADO tehnoloģijas izmantošana un spēja pieslēgties šai tabulai.
Godīgi sakot, šo darbu uzskatu par grūtāko, bet tā kā tas ir pēdējais darbs, tad ta tam arī vajadzētu būt. Grūtākais tādēļ, ka šeit es sastapos ar man nezināmu VisualBasic valodu, kuras apgūšana un izprašana, kaut arī nesagādāja lielas grūtības, tomēr bija diezgan laikietilpīga. Tā pat arī dotās valodas sintakses izprašana sagādāja grūtības. Ar grūtībām tiku galā izlasot vairākus interneta resursus, kuros esmu atradusi atbildes uz saviem jautājumiem. Tādā veidā lēnā garā esmu atrisinājusi praktiski visas problēmas, kuras man bija radušās.
Šajā laboratorijas darbā iepazinos ar to, kā izmantot un poielietot praktika ADO tehnoloģiju. Manuprāt, ir ļoti labi mācēt to darīt, jo ADO tehnoloģija ir ļoti perspektīva, tā vēl joprojām tiek attīstīta un pilnveidota. Pie tam, ir jāņēm vērā, ka pašlaik diezgan plaši tiek izmantotas un ADO+ tehnoloģijas, kuras ir pilnībā orientētas uz darbu tīklos.
Izlasot vairākus avotus, secināju, ka pats galvenais ADO tehnoloģijas mērķis ir pēc iespējas vairāk vienkāršot piekļūšanu dažādiem datiem, ko var izdarīt pateicoties OLEBD un ODBC tehnoloģijām, uz kuram tiek balstīta pati ADO tehnoloģija, jo tas nodrošina iespēju izveidot starpdatu savienojumu ar koda palīdzību.
Arī šajā darbā mācījos no savām kļūdām, ko biju pielaidusi pirmajā darbā, kad nolēmu no sākuma izveidot visu praktisko darba uzdevumu, un tikai tad sākt rakstīt darba aprakstu. Šoreiz pildīju darbu pa soļiem un aprakstīju katru savu soli, līdz tas bija pabeigts. Šajā ziņā grūtākais ir uzstādīt mērķi solim, kuru veikšu.
Rakstot galvenās un rezultējošās formas kodu, centos tās izveidot pēc iespējas pievilcīgākas programmas lietotajām, jo, jo ērtāk ir izmantojama programma, jo vairāk cilvēku var izprast tās lietošanas īpašības. Tāpat centos novērt vairāku kļūdu rašanos, taču tas nemaz nebija tik viegli, jo VBA vidē Debuger nav gana labs, kāds tas ir citas programmēšanas vidēs. Līdz ar to tas ne vienmēr parāda kļūdas patieso iemeslu, kura ir darusies koda izpildes laikā. Pilnīgi visa formas darbība ir realizēta VBA programmēšanas vidē.
Pašu programmu, „SQL REDACTOR”, izveidoju kā projekta failu, kuru atstāju nepieslēgtu serverim, jo man to neizdevās uzstādīt. Programmas darbībai izveidoju 4 moduļus.
Man ir ļoti žel, ka izlasot vairākus avotus, un veicot simtiem mēģinājumu, man tā arī neizdevās izgūt datus no OLAP kuba. Uzskatu, ka manu neveiksmi ir pavadījusi neizpratne par to, kuram datu gādniekam ir jāpieslēdzas, lai izmantotu šos datus. Sākuma biju paredzējusi izgūt datus arī no tā. Tā pat bija iecere veikt datu izgūšanu no SQL servera datu bāzes, taču, man par nelaimi, man ta arī neizdevās uzstādīt SQL serveri. Ielādēju servera instalāciju no vairākām mājaslapām, vairākas reizes esmu instalējusi, bet uzstādīt serveri man tā arī neizdevās. Biju jau izlasījusi vairākas mājaslapas un pat zināju, ka importēšu datus uz serveri, lai nav jāraksta vairākas tabulas no jauna. Taču serveris neuzstādījās.Līdz ar to, man neizdevās izpildīt arī šo, manis uzstādīto mērķi. Iespējams ta nebija mana, bet datora vaina. Datu izgūšana no MS Access un MS Excel, ka arī meta datu izgūšana ir bijusi veiksmīgāka.
Neskatoties uz visu darbs bija diezgan interesants, sevišķi kad viss strādā un, palaižot programmu, var priecāties par to, kas ir izdevies. Un, protams, arī vīlties sevī, ja kaut kas nav izdevies. Viennozīmīgi uzskatu, ka iegūtās zināšanas nākotnē man varētu noderēt, taču domāju, ka visnepieciešamākais tomēr būs ADO objektu pielietojums, ja datu apstrāde tagad man liekas ļoti sarežģīta, ja tos neizmanto.
IZMANTORIE AVOTI
Avoti latviski:
1. Prof. Jānis Eiduks. Lekciju konspekti studiju priekšmetā „Datubāzu vadības sistēmas”.
Avoti angliski:
2. Cary N. Prague and Michael R. Irwin, „Access 2002 Bible”, Hungry Minds, 2002
3. David Sceppa, „ADO Programming”, Microsoft Press, New York, 2000
4. MS Access HELP faili
5. MS Excel HELP faili
6. Steven Roman, „Access Database Design & Programming”, O’Reilly, 1999
7. VisualBasic HELP faili
Avoti krieviski:
8. Вероника Михеева, Ирина Харитнова, Microsoft Access 2002. – СПб,:БХВ – Петербург, 2002. 1040с.: ил.
9. И. ХАРИТОНОВА Acces2000 - Санкт-Петербург 2002 г.
10. Microsoft Excel 97 Шаг за шагом Москва Эком 1997 – 448 с.
Interneta resursi:
-----------------------
2.1.1.att. Tabulas AAS dati
2.1.2.att. Tabulas AKlienti dati
2.1.3.att. Tabulas AAUTO dati
2.1.4.att. Saites starp tabulām MS Access vidē
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.