Tietokantojen ja tietuenäkymien käyttö



Samankaltaiset tiedostot
Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Kehitysympäristö LUKU. Developer Studio kehitysympäristön alkeet. Liikkuminen projektin työtilassa ja sen eri näkymissä

Tekstikontrollit LUKU. Tekstin ja sanomien esittäminen valintaikkunoissa. Tekstin muokkaaminen suorituksen aikana. Tiedon tarkistaminen syötön aikana

Yksittäisasennus eli perusasennus

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Uuden työtilan luonti

Visual C++ -ohjelman tekeminen ja suunnittelu

Usean näkymän luominen

Jypelin käyttöohjeet» Ruutukentän luominen

Tietokantatuen lisääminen

ActiveX-kontrollien käyttö

Muuttujien määrittely

Luettelo-, puu-, parannetun tekstiruutu- sekä HTML-näkymän käyttö

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Pikaopas. Ohjeiden etsiminen Hae ohjesisältöä napsauttamalla kysymysmerkkiä.

Pikaohje formaatin valmistamiseen

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

OHJE EXCEL-MAKRON LUOMISEKSI JA MAKRON KÄYTÖSTÄ

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

HELIA 1 (11) Outi Virkki Tiedonhallinta

EASY Tiedostopalvelin - mobiilin käyttöopas

Osoitin ja viittaus C++:ssa

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Jouni Huotari OLAP-ohjetekstit kopioitu Microsoftin ohjatun OLAP-kuution teko-ohjeesta. Esimerkin kuvaus ja OLAP-määritelmä

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN

SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010

TIETOJEN TUONTI TIETOKANNASTA + PIVOT-TAULUKON JA OLAP-KUUTION TEKO

Oppilaan pikaopas. Project 2013 käyttöliittymä ja näkymät

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Joukkokirje, osoitetarrat Työvälineohjelmistot 1(5)

Tietokannat II -kurssin harjoitustyö

MDI-sovellusten kehittäminen

Basware Supplier Portal

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Mainosankkuri.fi-palvelun käyttöohjeita

Dokumentit, näkymät ja kehykset

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Valintanauhan komennot Valintanauhan kussakin välilehdessä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

Ryhmäkirjeen hyödyntäminen

käännös käännösvaiheessa tarkasettaan linkitys

15. Ohjelmoinnin tekniikkaa 15.1

ECDL Tietokannat. Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7

SoleMOVE lähtevän harjoittelijan ohje

Transkribuksen pikaopas

Rakenteiset tietotyypit Moniulotteiset taulukot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Sen jälkeen Microsoft Office ja sen alta löytyy ohjelmat. Ensin käynnistä-valikosta kaikki ohjelmat

VHOPE-sovelluksen ja VHOPE-kirjastotiedostojen asentaminen

Ohjelmoinnin jatkokurssi, kurssikoe

Harjoitustyö: virtuaalikone

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Taulukot. Jukka Harju, Jukka Juslin

Automaster tai MBS. 2. ODBC - ajurin asennus (jos ei ole jo asennettu)

Siirtyminen Outlook versioon

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmoinnin perusteet Y Python

Tietokanta (database)

Visma Fivaldi -käsikirja Tehtävienhallinta- ohje käyttäjälle

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Tietokannat PERUSMATERIAALI Microsoft Access 2007 Kieliversio: suomi Materiaaliversio 1.0 päivitetty

Web Services tietokantaohjelmoinnin perusteet

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Opiskelun ja työelämän tietotekniikka (DTEK1043)

Excel-taulukkoon X- ja Y-sarakkeisiin tallennettujen koordinaattien muuntaminen paikkatietokohteiksi

Olio-ohjelmointi Syntaksikokoelma

Copyright Basware Corporation. All rights reserved. Pikaopas toimittajille Supplier Portal (Toukokuu 2013)

Tietokannat II -kurssin harjoitustyö

Sähköposti ja uutisryhmät

Maiju Mykkänen Susanna Sällinen

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

OpenOffice.org Impress 3.1.0

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Tulosta yrityksesi tuloslaskelma ja tase myöhempää tarkastusta varten. Ota varmuuskopio tilanteesta ennen tilimuunnosta.

Siirtyminen Access versioon

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Ohjelmoinnin perusteet Y Python

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Viva-16. Käyttöohje Veikko Nokkala Suomen Videovalvonta.com

Microsoft Projectin mukauttaminen

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Järjestelmänvalvontaopas

DNA Toimistoviestintä Microsoft - sähköposti

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Tekstinkäsittelyn jatko KSAO Liiketalous 1

Nspire CAS - koulutus Ohjelmiston käytön alkeet Pekka Vienonen

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

MicroStation V8i-käyttöympäristö

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

15. Ohjelmoinnin tekniikkaa 15.1

FOTONETTI BOOK CREATOR

Näin asennat MS-DOS käyttöjärjestelmän virtuaalikoneeseen

CISS Base Excel raporttien määritys Käyttäjän käsikirja. CISS Base Käyttäjän Käsikirja Econocap Engineering Oy 1

Autentikoivan lähtevän postin palvelimen asetukset

Sähköpostitilin määrittäminen Outlook 2010, kun ohjelma käynnistetään ensimmäistä kertaa.

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Sähköpostitilin määrittäminen Outlook 2016, kun ohjelma käynnistetään ensimmäistä kertaa.

HAME PostGIS-tietokanta

Transkriptio:

Tietokantojen ja tietuenäkymien käyttö OSA VI 579 LUKU 24 24 LUKU Tietokantojen ja tietuenäkymien käyttö ODBC-tietolähteen määrittäminen Liittyminen tietokantoihin MFC-sovelluksista Tietuejoukkojen kyseleminen ja tuloksien käsitteleminen Tietokannan tietueiden lisääminen, poistaminen ja muokkaaminen Record view tietuenäkymäpohjaisten projektien kehittäminen

580 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö Tietokantojen käyttö Liike-elämässä kerätään päivittäisen kaupankäynnin yhteydessä suuria määriä tietoa. Tiedot käsittelevät yrityksen asiakkaita ja toimittajia, myyntiä ja varaston vaatimuksia jne. Suuri enemmistö yrityksistä pitää nämä tiedot tietokannoissa ja tarkemmin tietokantojen hallintajärjestelmissä (DMS, Database Management System). Tietokantajärjestelmä on ohjelmisto, joka tallentaa tiedot hyvin järjestettyyn rakenteeseen ja tarjoaa tehokkaat menetelmät tiedon hakemiseen ja päivittämiseen. Tietokantoja on kahta tyyppiä relaatiotietokantoja ja oliotietokantoja. Näiden välinen ero liittyy niiden tapaan käsitellä tietoa. Relaatiotietokannat keskittyvät tuttujen, yksinkertaisten tietotyyppien käyttöön (merkit, merkkijonot, kokonaisluvut jne.) eivätkä ne salli uusien tietotyyppien luomista. Oliotietokannat sen sijaan käsittelevät tietotyyppejä korkeammalla tasolla ja sallivat määriteltävien tietotyyppien luomisen. Nämä oliot muistuttavat olio-ohjelmoinnissa käytettyjä olioita esimerkiksi oliotietokantaan tallennettava olio saattaisi olla henkilö tai kulkuneuvo. Tässä luvussa keskitytään relaatiotietokantojen käyttöön, koska niitä on käytetty kauemmin ja ne ovat yleisemmin käytössä. Relaatiotietokantojen käyttö Ennen tietokantaohjelmistojen tuloa sovellukset käyttivät omia tietorakenteitaan. Ainoastaan järjestelmän suunnitelleet ja ohjelmoineet kehittäjät tiesivät tarkkaan, miten tieto oli järjestetty. Tämä tarkoittaa sitä, että kun järjestelmän käyttäjät halusivat tietoa käsiteltävän määrätyllä tavalla, käyttäjän piti vaatia ohjelmiston lisäkehittämistä, mikä yleensä vei aikaa. Relaatiotietokannat poistivat suuren osan ongelmasta standardoimalla järjestelmän tietovarastoinnin suunnittelun. Tietokannan tieto järjestetään tauluihin, kenttiin (sarakkeisiin) ja riveihin. Tyypillisessä tietokannassa saattaisi olla Asiakas-taulu ja siinä kentät Nimi ja Puhelinnumero. Taulun alkiot esitetään riveillä (tietueissa), yksi kullakin. Asiakas-taulussa voisi olla oma rivi IT Press yhtiölle ja toinen Microsoftille. Näiden taulujen ja kenttien suunnittelua kutsutaan tietokantasuunnitelmaksi, joka määrittää kunkin kentän tietotyypin ja tavan, jolla taulut liittyvät toisiinsa.

Tietokantojen ja tietuenäkymien käyttö OSA VI LUKU 24 581 ODBC:n käyttö Voit hankkia relaatiotietokannan joltain useista toimittajista. Kullakin tietokannalla on oma sisäinen rakenteensa ja omat funktiokutsunsa. Tällöin yhden valmistajan tietokannan ymmärtämiseksi jouduttaisiin näkemään suhteellisen paljon vaivaa. Yhä useammin kuitenkin sovelluksilta vaaditaan tietokantariippumattomuutta. Jotta relaatiotietokantaa voitaisiin käyttää sen valmistajasta riippumatta, tarvitaan yhteinen ohjelmointitapa. Tällainen on olemassa ja se kulkee nimellä ODBC (Open Database Connectivity). ODBC:n avulla voidaan ohjelmoida yhteisen rajapinnan kautta erilaisia relaatiotietokantoja. Tätä varten on oltava olemassa välikerrosohjelmisto tulkkaamassa ODBC-standardifunktioita tietokannan ymmärtämiksi funktioiksi. Tämä ohjelmisto on nimeltään ODBCohjain (driver), jonka toimittaa tietokannan valmistaja tai ohjaimiin erikoistunut yritys. Nykyään ODBC:stä on tullut standardi ja kaikkiin tunnettuihin tietokantoihin on jo saatavilla ODBC-ohjaimet. Joudut asentamaan tällaisen käyttämällesi tietokannalle. Microsoft-sovellusten, kuten Office ja Visual Studio, asennusvaiheessa voit asentaa yleisimmät Microsoftin ODBC-ohjaimet muita tietokantoja käytettäessä kysy ODBC-ohjaimen saatavuutta kauppiaaltasi. Kuvassa 24.1 on esitetty, kuinka tietokanta liittyy sovellukseesi ODBC-ohjaimella. ODBC-sovellusten jakelu Jos kehität tietokantasovelluksia ODBC:llä, joudut toimittamaan C++-sovellustiedostosi lisäksi muutaman muunkin tiedoston. Nämä tiedostot löytyvät Visual C++ CD:n OS\Systemhakemistosta. Lisätietoja saat hakemiston REDISTRB.WRItiedostosta. ) * + J EA J = J = ) * +, * + D = E KUVA 24.1 Tietokantoihin liittyminen ODBC:llä, * + D = E = JD A = 7 I E C, * A N A I LA KI : ; J EA J = J = : ;, * + D = E ODBC-ohjaimelle annetaan komentoja ja ne välitetään tietokannalle SQL-kielellä. Tämä kieli on kehitetty tietokantojen käsittelyyn ja siitä on muodostunut nykyään de facto standardi. SQL-kielen murteita on lähes yhtä monta kuin erilaisia tietokantojakin, kun jokainen valmistaja on lisännyt siihen omat parannuksensa. Kieleen on kuitenkin määritelty vähimmäisvaatimukset, joita ODBC-ohjaimen tulee tukea. Tämä ei

582 SQL SQL (Structured Query Language) on relaatiotietokantojen tiedon lukemiseen, päivittämiseen ja hallitsemiseen käytetty standardi tekstipohjainen komentokieli. Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö estä ohjaimia tukemasta standardin ulkopuolisia komentoja, koska ODBC:n kautta voidaan välittää myös suoraan SQL-komentoja. Näiden käyttö estää kuitenkin sovelluksen kytkeytymisen muiden valmistajien tietokantoihin, mikä on eräs ODBC:n perustavoitteista. SQL-kielessä on kolmenlaisia komentoja: DDL, DML ja DCL. DDLkomennoilla (Data Definition Language) luodaan ja muokataan tietokantasuunnitelmaa. Esimerkkejä DDL-komennoista ovat CREATE DATABASE ja CREATE TABLE. DML-kielen (Data Manipulation Language) komennoilla kysellään ja muokataan alkioiden arvoja. Keskeisiä DML-komentoja on neljä: SELECT, INSERT, UPDATE ja DELETE. Kullekin annetaan parametrinä tiedot siitä, mihin tauluun (tauluihin) ja kenttään (kenttiin) toiminto vaikuttaa. DCL-kielen (Data Control Language) komennoilla voidaan käyttäjille myöntää erilaiset käsittelyoikeudet tietokantaan. Tietolähteen määrittäminen Ensimmäinen tehtävä ODBC:tä hyödynnettäessä on tietolähteen (data source) määrittäminen. Tietolähde kertoo ohjelmallesi, mistä löytyvät tietokantatiedostot ja millä ODBC-ohjaimella funktiokutsut tulkitaan. Tietolähteen määrittäminen tehdään ODBC Data Source Administrator ohjelmalla, joka löytyy Ohjauspaneelista. Oikean ODBC-hallintaohjelman käyttäminen Ohjauspaneelissasi (Control Panel) saattaa olla kaksi ODBCkuvaketta; käytä näistä 32- bittisten tietokantayhteyksien määrittämiseen sitä, jonka kuvakkeessa on luku 32. Toinen kuvake on tarkoitettu 16- bittisille tietokantayhteyksille. Seuraavaksi annetaan ohjeet myöhemmin käytettävän sovelluksen tarvitseman tietolähteen määrittämiseksi. Esimerkkisovellus käyttää tiedostoa stdreg32.mdb, joka on Visual C++ CD:ltä löytyvä Accessesimerkkitietokanta. Etsi tiedosto CD-levyltä ja kopioi se kovalevyllesi (seuraavassa esimerkissä oletushakemisto on C:\Databases\). ODBC-tietolähteen luominen ja määrittäminen 1. Valitse Käynnistä-valikosta Asetukset-valikko ja siitä Ohjauspaneeli (Start/Settings/Control Panel). 2. Kaksoisnapauta (tai valitse ja näppäile Enter) kuvaketta ODBCtietolähteet (ODBC Data Sources tai 32bit ODBC). Saat esiin kuvan 24.2 näköisen ODBC-tietolähteen hallinta ikkunan (ODBC Data Source Administrator).

Tietokantojen ja tietuenäkymien käyttö OSA VI LUKU 24 583 KUVA 24.2 ODBC Data Source Administrator ikkuna. 3. Valitse Käyttäjätietolähde välilehti (User DSN) ja napauta Lisää-painiketta (Add). Saat esiin kuvan 24.3 esittämän Luo uusi tietolähde valintaikkunan (Create New Data Source). Voit muuttaa olemassa olevan tietolähteen asetuksia valitsemalla tietolähteen Käyttäjätietolähteet luettelosta (kuva 24.2) ja napauttamalla Määritä-painiketta ( User Data Sources/ Configure). KUVA 24.3 Create New Data Source ikkuna. 4. Valitse sen ODBC-ohjaimen nimi, jolle haluat luoda tietolähteen. Muista, että tämän täytyy sopia yhteen tietokannan tyypin kanssa. Tässä esimerkissä valitset Microsoft Access Driver (*.mdb) ohjaimen. Napauta Valmis-painiketta (Finish) ja saat esiin ODBC Microsoft Access Setup ikkunan (kuva 24.4).

584 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö KUVA 24.4 ODBC Microsoft Access Setup valintaikkuna. Tietokantayhteyden vianhaku Jos tietokantayhteydessä on ongelmia, kokeile tietolähteen tyypin vaihtamista. Jos esimerkiksi olet valinnut käyttöön Käyttäjätietolähteen (User DSN), voit kokeilla sen vaihtamista Järjestelmätietolähteeksi (System DSN) ja päinvastoin. 5. Syötä tietolähteen nimi Data Source Name tekstiruutuun, tässä Student Registration. Voit käyttää mitä tahansa nimeä, mutta kahden saman nimen käyttöä tietolähteissä ei suositella. 6. Voit myös kertoa tarkemmin tietolähteestä Descriptionruudussa. Tässä kuvaus voisi olla Course enrollment and administration. 7. Napauta Select-painiketta ja saat esiin Select Database ikkunan. 8. Syötä tietokannan nimi Database Name ruutuun tai valitse tiedosto Directories-kansioluettelosta. Tässä esimerkissä valitaan stdreg32.mdb. Napauta OK-painiketta ja valitun tietokannan nimi ja sijainti näkyvät Setup-ikkunassa. 9. Sulje ODBC Microsoft Access Setup ikkuna ja nyt User Data Sources luettelossa pitäisi olla myös tietolähteen Student Registration. 10. Sulje ODBC-tietolähteen hallinta ikkuna (ODBC Data Source Administrator) OK:lla ja Ohjauspaneeli. Huomaa, että kuvan 24.4 valintaikkuna esittää Microsoft Accessin ODBC-määritysasetukset. Muilla tietokannoilla on omat, mahdollisesti erilaiset asetusikkunansa. Huomaa myös, että voit määrittää kahdenlaisia tietolähteitä: käyttäjätietolähteitä (User DSN, oletus) ja järjestelmätietolähteitä (System DSN). Käyttäjän tietolähde on ainoastaan sen lisänneen käyttäjän käytössä, järjestelmätietolähteet sen sijaan kaikkien tietokoneelle kirjautuneiden.

Tietokantojen ja tietuenäkymien käyttö Tietokantaa tukevan sovelluksen luominen Tietokantaa käsittelevän sovelluksen kirjoittaminen riippuu paljon asetetuista reunaehdoista. Tuleeko sovelluksen esimerkiksi kyetä käsittelemään useampaa kuin yhtä tietokantaa ja tuleeko myös eri tiedostotyyppejä osata käsitellä? Näiden vaihtoehtojen puntaroiminen kannattaa tehdä etukäteen, sillä helpoin tapa saada sovellukseen tietokantatuki on luoda se AppWizardilla. Kuten AppWizardista muistat, sillä tehtyjä valintoja voi muuttaa ainoastaan suoraan koodia muokkaamalla tai luomalla sovellus uudelleen. OSA VI LUKU 24 585 Tietokantatuen lisääminen AppWizardilla Voit valita AppWizardin vaiheessa Step 2 yhden neljästä tietokantatukea koskevasta valinnasta (kuva 24.5). KUVA 24.5 AppWizardin tietokantaasetukset. Ensimmäinen valinta (None) lienee selvä tietokantatukea ei sovellukseen tule. Toinen (Header Files Only) lisää yksinkertaisesti projektiisi includelauseet luokkia CDatabase ja CRecordset varten. Näiden luokkien avulla kytkeydytään tietokantaan ja käsitellään sen tietoja. Sekä kolmas (Database View Without File Support) että neljäs (Database View With File Support) valinta vaativat tietolähteen määrittämisen projektiin ja ne luovat automaattisesti lisävalintoihin perustuvat luokat. Näiden ero on tiedostotuessa with file support - valinta lisää sovellukseen File-valikon ja without file support valinta ei lisää. Tietokantatuen lisääminen olemassaolevaan projektiin Saat lisättyä AppWizardilla ilman tietokantatukea luotuun projektiin tuen tietokannoille lisäämällä vain kaksi määrittelytiedostoa #include-lauseilla stdafx.htiedostoon: afxdb.h ja afxdao.h.

586 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö Tee siis AppWizardilla SDI-sovellus nimeltään UsingDB ja valitse vaiheessa Step 2 Database View Without File Support valintapainike. Toimi tämän jälkeen seuraavien ohjeiden mukaan. Tietolähteeseen kytkeytyminen AppWizardilla 1. Valitse AppWizardin vaiheessa Step 2 Database View Without File Support valintapainike, ellei sovellus tarvitse File-valikkoa ja Database View With File Support, jos tarvitsee. Tässä esimerkissä valitaan Database View Without File Support. Huomaa, että tämä valinta pakottaa sovelluksen SDI-tyyppiseksi. 2. Napauta Data Source painiketta ja saat esiin kuvan 24.6 esittämän Database Options valintaikkunan. KUVA 24.6 Database Options asetusikkuna. Snapshot ja Dynaset Snapshot (otos) on tietuejoukko, joka tallentaa kaikki tietokentät eikä huomioi muiden käyttäjien tekemiä päivityksiä. Dynaset (dynaaminen tietuejoukko) puskuroi ainoastaan avainkentän. Dynaset-joukon tietueiden läpikäynti huomioi muiden käyttäjien tekemät päivitykset ja poistot. 3. Valitse valintapainikkeilla sopiva liityntätapa tietokantaan, tässä ODBC. 4. Valitse tietolähteen nimi Datasource-yhdistelmäruudussa. Tässä esimerkissä tähän valitaan Student Registration. Ellei valinta tule esiin, joudut luomaan ja määrittämään tietolähteen (käsiteltiin hieman aiemmin tässä luvussa). 5. Valitse tietuejoukon tyyppi Recordset type valintapainikkeilla. Tässä tyyppi on Snapshot. 6. Napauta OK. Saat tällöin esiin kuvan 24.7 esittämän Database Tables valintaikkunan. 7. Valitse se taulu tai ne taulut, joista haluat luoda tietuejoukon (recordset). Tässä esimerkissä valitaan taulu Student. 8. Napauta OK. Nyt olet lisännyt projektiin tietokantatuen ja voit jatkaa AppWizardin muiden vaiheiden kanssa.

Tietokantojen ja tietuenäkymien käyttö OSA VI LUKU 24 587 KUVA 24.7 Select Database Tables valintaikkuna. Tietokantaan kytkeytyminen Tietokantaan kytkeytymisestä ja sen tietojen käsittelystä huolehtii yhdessä kaksi MFC:n luokkaa: CDatabase ja CRecordset. CDatabase vastaa yhteyden avaamisesta tietokantaan. Voit kytkeytyä CDatabaseolioiden avulla sovelluksestasi useisiin tietokantoihin tai samaan tietokantaan useasti. Koska tietokantayhteyden avaaminen on pitkä ja järjestelmäresursseja kuluttava prosessi, vanhan yhteyden uudelleenkäyttäminen on suositeltavampaa kuin uuden yhteyden avaaminen jokaiselle tietuejoukolle. Eräs tapa toteuttaa tämä on upottaa CDatabase-olio yhteyden luovaan dokumenttiluokkaasi ja tehdä sitten GetDatabase()-funktio, joka palauttaa osoittimen CDatabase en. Voit välittää osoittimen CDatabase-olioon CRecordset-luokan muodostimessa asettaaksesi tietuejoukon käyttämään nykyistä yhteyttä. Tiettyyn tietokantaan kytkeydytään CDatabase::OpenEx funktiolla, jonka prototyyppi on esitetty listauksessa 24.1. LISTAUS 24.1 LST24_1.CPP OpenEx-funktiolle syötettävät parametrit DAO (Data Access Objects) Vaihtoehto CDatabase- ja CRecordset-luokkien käytölle on käyttää CDaoDatabase- ja CDaoRecordset-luokkia. Näiden parien ero on se, että DAO-luokat toimivat ainoastaan yhdessä Microsoft Jet-tietokantakoneiston kanssa, mutta ei-dao-luokat perustuvat ODBC:n kautta ohjattuihin tietokantoihin. 1 virtual BOOL OpenEx( LPCTSTR lpszconnectstring, 2 DWORD dwoptions = 0); Yleensä annetaan ainoastaan ensimmäinen parametri. lpszconnectstring on osoitin merkkijonoon, jossa on tietolähteen nimi ja kyseisessä tietokannassa mahdollisesti tarvittavat lisätiedot kuten käyttäjänimi ja salasana. ODBC-tietolähteethän määritetään Ohjauspaneelin hallintaohjelmasta, kuten edellisestä kappaleesta muistat. Toinen parametri, dwoptions on bittikuvio, jolla määritetään kytkeytymisvalinnat (esitetty taulukossa 24.1). Oletusarvo 0 avaa tietokannan kirjoitusoikeuksin, ei lataa ODBC-kursorikirjastoa ja näyttää kytkeytymisikkunan ainoastaan, jos yhteysmerkkijonossa ei ole riittävästi tietoa yhteyden muodostamiseksi.

588 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö TAULUKKO 24.1 CDatabase::OpenEx()-funktion dwoptions-parametrin mahdolliset asetukset Asetus openreadonly usecursorlib noodbcdialog forceodbcdialog Kuvaus Avaa tietolähteen kirjoitussuojattuna. Lataa ODBC:n DLL-kursorikirjaston. Tämä korvaa joitakin ODBC:n toimintoja. Esimerkiksi dynaamisia tietuejoukkoja (dynaset) ei voida tällöin enää käyttää. ODBC-kytkeytymisikkunaa ei esitetä. ODBC-kytkeytymisikkuna esitetään. OpenEx()-funktiota voitaisiin käyttää esimerkiksi seuraavasti: CDatabase db; Db.OpenEx( ODBC;DSN=Student Registration; UID=TinyTim;PWD=CASTLE, CDatabase::openReadOnly CDatabase::noOdbcDialog)); Mainitsin aiemmin tässä luvussa, että SQL-lauseita voidaan antaa myös suoraan tietokannalle. Tästä on hyötyä, jos tietokantasi sisältää laajennuksia ODBC:n SQL-standardiin voit esimerkiksi kutsua tietokantaan tallennettuja proseduureja. SQL-komennot annetaan suoraan CDatabase-luokan ExecuteSQL-funktiota käyttäen. Tälle funktiolle annetaan parametrinä osoitin komentolauseet sisältävään merkkijonoon. Tietokannan arvojen kyseleminen CRecordset-luokka huolehtii tietokannan tauluissa ja kentissä olevan tiedon käsittelystä. CRecordseton abstrakti luokka, joten joudut johtamaan omat luokkasi siitä. SQL-kyselyt suoritetaan CRecordsetluokan kautta. Kyselyn tulokset tallennetaan tietuepuskureihin. Tämä luokka ylläpitää osoitinta nykyiseen tietueeseen ( kursori ) ja mahdollistaan tietueiden läpikäynnin jäsenfunktioillaan Move, MoveNext, MovePrev, MoveFirst ja MoveLast. Johdetussa CRecordset-luokassa on jäsenmuuttuja kullekin kyselyn (query) kentälle. Näiden muuttujien arvo muuttuu tietuetta vaihdettaessa uuden tietueen vastaavan kentän arvoksi. UsingDB-projektissa on AppWizardin tekemä CRecordset-luokasta johdettu luokka CUsingDBSet. CUsingDBSet-luokan määrittely ja toteutus on esitetty listauksessa 24.2.

Tietokantojen ja tietuenäkymien käyttö LISTAUS 24.2 CUsingDBSet-luokan määrittely OSA VI LUKU 24 589 1 class CUsingDBSet : public CRecordset 2 { 3 public: 4 CUsingDBSet(CDatabase* pdatabase = NULL); 1 5 DECLARE_DYNAMIC(CUsingDBSet) 6 7 // Field/Param Data 8 //{{AFX_FIELD(CUsingDBSet, CRecordset) 9 long m_studentid; 2 10 CString m_name; 11 int m_gradyear; 12 //}}AFX_FIELD 13 14 // Overrides 15 // ClassWizard generated virtual function overrides 16 //{{AFX_VIRTUAL(CUsingDBSet) 17 public: 18 virtual CString GetDefaultConnect(); 19 virtual CString GetDefaultSQL(); 20 virtual void DoFieldExchange(CFieldExchange* pfx); 21 //}}AFX_VIRTUAL 22 23 // Implementation 24 #ifdef _DEBUG 25 virtual void AssertValid() const; 26 virtual void Dump(CDumpContext& dc) const; 27 #endif 28 }; 29 CUsingDBSet::CUsingDBSet(CDatabase* pdb) 30 : CRecordset(pdb) 31 { 32 //{{AFX_FIELD_INIT(CUsingDBSet) 33 m_studentid = 0; 3 34 m_name = _T(""); 35 m_gradyear = 0; 36 m_nfields = 3; 37 //}}AFX_FIELD_INIT 38 m_ndefaulttype = snapshot; 39 } 40 41 CString CUsingDBSet::GetDefaultConnect() 4 42 { 43 return _T("ODBC;DSN=Student registration"); 44 } 45 46 CString CUsingDBSet::GetDefaultSQL() 5 47 { 48 return _T("[Student]"); 49 } 1 Voit vaihtoehtoisesti välittää osoittimen CRecordsetissä olevaan CDatabase-olioon. 2 ClassWizardin lisäämät muuttujat tietuejoukon jokaiselle kentälle. 3 ClassWizardin lisäämä alustus tietuejoukon kentille ja CRecordset-olion m_nfieldsmuuttujalle. 4 Sovellusrunko kutsuu tätä tietuejoukkoa avatessa tarjotakseen yhteysmerkkijonon. 5 Sovellusrunko kutsuu tätä tietuejoukkoa avatessa tarjotakseen taulun nimen.

590 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö Huomannet, että dokumenttiluokassa on CUsingDBSet-tyyppinen jäsenmuuttuja m_usingdbset ja että näkymäluokassa CUsingDBView on jäsenmuuttuja m_pset osoittamassa dokumentin recordset-olioon. Näkymäluokan osoitin, m_pset, alustetaan OnInitialUpdatefunktiossa. CUsingDBSet-luokan määrittely on koottu AppWizardissa tehtyjen valintojen mukaan. AppWizardissa valittiin Student-taulu, jossa on kolme kenttää: StudentID, Name ja GradYear. Huomaat, että luokassa on kolme vastaavaa jäsenmuuttujaa (rivit 9 11). Muuttujien tietotyypit ja nimet on saatu suoraan tietokannalta. Nämä muuttujat alustetaan alkuarvoihinsa muodostimessa (rivit 33-35). Muodostin alustaa myös m_nfields muuttujan arvoon 3 (rivi 36). Kyseinen muuttuja kertoo, kuinka monta kenttää on käytettävissä. CUsingDBSet-luokan muodostimelle voidaan syöttää sitä alustettaessa osoitin CDatabase-olioon (rivi 29); mikäli tämä on NULL (kuten esimerkissä), kantaluokka CRecordset luo CDatabase-olion ja kutsuu CDatabase::Open funktiota tietokantayhteyden avaamista varten. Ennen CDatabase::Open funktion kutsumista kutsutaan virtuaalifunktiota GetDefaultConnect (rivillä 41), joka palauttaa yhteysmerkkijonon (rivi 43). Tämä ilmoittaa tietokantaoliolle, mihin tietolähteeseen kytkeydytään. Rivin 46 GetDefaultSQL-funktiota kutsutaan CRecordset::Openfunktiosta. CRecordset::Open muodostaa SQL:n SELECT-oletuslauseen ja suorittaa kyselyn tietokantaan. Tässä tapauksessa muodostettu SQL-lause on muotoa SELECT * FROM Student, joka hakee Student-taulun kaikki rivit ja tallentaa ne tietuepuskuriin. Kun yhteys on avattu (Open suoritettu), pääset käymään läpi tietueita ja tutkimaan kenttien tietoa. CRecordset-luokassa on myös funktio Requery, joka suorittaa kyselyn uudelleen ja päivittää puskurin tietueet ilman yhteyden sulkemista ja avaamista uudelleen. Käytettävissäsi on kaksi lippua kertomaan, onko käsiteltävä tietue (kohdistin) tietuejoukon alussa tai lopussa. Voit testata näitä lippuja kutsumalla IsBOF- (alussa) ja IsEOF-funktioita (lopussa). Listauksessa 24.3 on esitetty esimerkkikoodi, joka käy läpi kaikki tietueet tiedoston loppuun asti.

Tietokantojen ja tietuenäkymien käyttö LISTAUS 24.3 LST24_3.CPP Tietuejoukon läpikäynti OSA VI LUKU 24 591 1 void CMyView::OnIterateSet() 2 { 3 // ** avaa tietuejoukko 4 CMyRecordSet rs(null); 1 5 rs.open(); 2 6 7 // ** tarkista, onko se tyhjä 8 if(rs.isbof()) 3 9 return; 10 11 // ** Käy läpi kaikki tietueet 12 // ** ja kutsu tietueiden käsittelyfunktiota 13 while(!rs.iseof()) 4 14 { 15 DoSomeFunction(&rs); 16 rs.movenext(); 17 } 18 } 1 Luo CRecordset-luokasta johdetun olion. 2 Avaa tietuejoukkoyhteyden, 3 Tarkistaa, ettei tietuejoukko ole tyhjä (siis ilman tietueita). 4 Käy läpi tietueita, kunnes päästään tietuejoukon loppuun. Tietokannan arvojen päivittäminen Tietokantakyselyn tekeminen ja arvojen lukeminen on toki hyödyllistä, mutta sillä ei pääse vielä kovin pitkälle. Tarvitaan myös mahdollisuus tietueiden lisäämiseen, poistamiseen ja muokkaamiseen. Onneksi CRecordset osaa huolehtia miltei kokonaan näistä toimista. Uusi tietue lisätään kolmessa vaiheessa. Aluksi kutsutaan AddNewfunktiota, joka asettaa tietuejoukon (recordset) Add-tilaan ja nollaa kenttien arvot. Seuraavaksi uuden tietokantaan lisättävän tietueen kenttien arvoiksi kirjoitetaan halutut arvot eli käytännössä recordsetluokkasi jäsenmuuttujiin. Lopuksi kutsutaan Update-funktiota, joka luo tietokantaan uuden tietueen ja lopettaa tietuejoukon Add-tilan. Huomaa, että snapshot-tyyppisillä tietuejoukoilla joudut kutsumaan Requery-funktiota, ennen kuin pääset käsittelemään juuri lisättyä tietuetta. Tietokantapoikkeukset Kannattaa muistaa, että useat CRecordsetin funktiot, kuten Open(), AddNew(), Edit() ja Update(), saattavat heittää ongelmatilanteessa CDBException-poikkeuksen. Näitä funktioita kutsuttaessa kannattaa siis sijoittaa ne try/ catch-lauseiden väliin. Tietokantapoikkeuksia debugattaessa saadaan lisätietoja valitsemalla Tools-valikon MFC Tracer -komennolla saadusta valintaikkunasta Database Tracing. Olemassa olevan tietueen muokkaaminen vaatii myös neljä vaihetta. Aluksi nykyiseksi tietueeksi asetetaan muokattava tietue. Seuraavaksi kutsutaan Edit-funktiota, joka asettaa tietuejoukon Edit-tilaan. Seuraavaksi päivitetään kenttien arvot ja lopuksi kutsutaan Updatefunktiota, joka tallentaa arvot tietokantaan, päivittää tietuejoukon ja lopettaa Edit-tilan.

592 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö Tietueen tuhoaminen onnistuu yhdellä kertaa Delete-funktion kutsuminen riittää. Tietue poistetaan tällöin tietuejoukosta sekä tietokannasta. Joudut vaihtamaan tuhoamisen jälkeen lisäksi käsiteltävää tietuetta, koska nykyisen (tuhotun) tietueen käsittely-yritys saisi aikaan virhetilanteen. Kenttien sitominen tietokannan tauluihin Aina kun tietoa päivitetään tai vieritetään, joudutaan siirtämään tietoa tietuepuskurin ja tietokannan välillä. Olet jo huomannut, että recordset-luokassa on jäsenmuuttuja jokaiselle kyselyn kentälle. Mihin jäsenmuuttujaan kukin kenttä liittyy, määräytyy DoFieldExchangefunktiossa. UsingDB-esimerkin CUsingDBSet-luokan DoFieldExchange-funktio on esitetty listauksessa 24.4. Kentän tietoja tallennettaessa tai luettaessa kutsutaan automaattisesti DoFieldExchange-funktiota. MFC:n RFX-alkuisten (Record Field exchange) makrojen avulla käsitellään kunkin tietyn tyyppisen tietokannan taulun kentän tiedon siirtäminen tietuejoukon jäsenmuuttujaan ja päinvastoin. RFX-makron toinen parametri on tietokannan taulun kentän nimi ja kolmas sen tallettavan jäsenmuuttujan nimi. Huomaa listauksessa rivien 3 ja 8 erikoiset kommentit. ClassWizard tarvitsee niitä, joten älä poista niitä. LISTAUS 24.4 LST24_4.CPP DoFieldExchange-funktio 1 Sovellusrunko kutsuu DoFieldExchange()-funktiota tietuejoukon kenttien arvojen lukemiseksi tai päivittämiseksi. 2 Ilmaisee, että seuraavat jäsenet ovat tulostus- eikä syöttöparametrejä. 3 Vaihtaa tiedot tietuejoukon jäsenmuuttujien ja tietokannan taulujen välillä. 1 void CUsingDBSet::DoFieldExchange(CFieldExchange* pfx) 1 2 { 3 //{{AFX_FIELD_MAP(CUsingDBSet) 4 pfx->setfieldtype(cfieldexchange::outputcolumn); 2 5 RFX_Long(pFX, _T("[StudentID]"), m_studentid); 3 6 RFX_Text(pFX, _T("[Name]"), m_name); 7 RFX_Int(pFX, _T("[GradYear]"), m_gradyear); 8 //}}AFX_FIELD_MAP 9 }

Tietokantojen ja tietuenäkymien käyttö Record View näkymän luominen ja käyttö Jos valitset AppWizardilla projektia luodessasi mukaan tietokantatuen, johdetaan näkymäluokkasi automaattisesti CRecordView-luokasta. CRecordView on paperilomakkeeseen perustuvan CFormView-luokan aliluokka. Lomaketta edustaa reunukseton ja otsikoton valintaikkuna, joka täyttää näkymäikkunan työalueen. CRecordView-luokka lisää mahdollisuuden yhdistää lomakenäkymä CRecordset-aliluokan edustamiin tietokannan tietueisiin. Valintaikkunaan lisätyt kontrollit voidaan suoraan linkittää tietokannan kenttien päivittämiin jäsenmuuttujiin. AppWizard lisää sovellukseen myös Record-valikon sekä työkalurivin kuvakkeet, joilla käyttäjä voi käydä läpi tietueiden tietoja ja näin päivittää näkymää tietuekohtaisesti. OSA VI LUKU 24 593 Record View valintaikkunapohjan muokkaaminen Record View valintaikkunat saattavat erottautua tavallisista valintaikkunoista reunusten ja otsikkopalkin puuttumisen vuoksi, mutta kontrollit niihin lisätään ja niitä muokataan resurssieditorissa silti tuttuun tapaan. Tavallisesti jokaista lomakkeessa olevaa tietokenttää kohden lisätään yksi kontrolli. Nämä kontrollit liitetään sitten CRecordset-aliluokan jäsenmuuttujiin. UsingDB-esimerkissä tulee tietuelomakenäkymään lisätä kaksi kenttää: oppilaan nimi sekä valmistumisvuosi. Suunnittele UsingDBtietuenäkymä seuraavien ohjeiden mukaisesti. Record view näkymän suunnitteleminen valintaikkunapohjalle 1. Laajenna ResourceView-sivulla Dialog-kansiota ja kaksoisnapauta IDD_USINGDB_FORM-alkiota. Saat esiin valintaikkunapohjan resurssieditoriin. 2. Napauta TODO: Place Form Controls Here tekstiä ja poista se Delete-näppäimellä. 3. Valitse Controls-työkalupaletista Static Text kuvake ja lisää teksti lomakkeen vasempaan yläkulmaan (kts. kuva 24.8). 4. Syötä teksti (caption), tässä Student &Name.

594 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö 5. Valitse työkalupaletista Edit Box tekstiruutu ja lisää se Student Name tekstin oikealle puolen. 6. Anna ID-yhdistelmäruutuun tekstiruudun tunnukseksi IDC_NAME. 7. Valitse työkalupaletista Static Text ja lisää teksti Student Name tekstin alle. 8. Syötä teksti (caption), tässä Graduation &Year. KUVA 24.8 UsingDB-esimerkin tietuenäkymäikkuna. 9. Valitse työkalupaletista Edit Box tekstiruutu ja lisää se Graduation Year tekstin oikealle puolen. 10. Anna ID-yhdistelmäruutuun tekstiruudun tunnukseksi IDC_YEAR. Nyt valintaikkunasi tulisi näyttää kuvan 24.8 mukaiselta.

Tietokantojen ja tietuenäkymien käyttö Tekstiruutujen liittäminen tietuejoukon kenttiin Jokainen tietuenäkymäikkunan tekstiruuduista voidaan liittää johonkin tietokannan kenttään. Tämä tehdään liittämällä tekstiruutuun suoraan tietuejoukon jäsenmuuttujaan osoittava muuttuja. CUsingDBViewnäkymäluokan m_pset-jäsenmuuttujassa on osoitin CUsingDBSetolioon. ClassWizardin avulla m_psetin jäsen voidaan liittää tekstiruutuun. Tietueikkunan Name- ja Year-tekstiruudut liitetään oppilastietokannan kenttiin seuraavien ohjeiden mukaan. OSA VI LUKU 24 595 Kontrollien liittäminen tietuejoukon kenttiin ClassWizardilla 1. Laajenna ResourceView-sivulla Dialog-kansio ja kaksoisnapauta IDD_USINGDB_FORM-alkiota. Saat esiin valintaikkunapohjan resurssieditoriin. 2. Valitse ensimmäinen tekstiruutukontrolli ja käynnistä ClassWizard näppäilemällä Ctrl+W tai valitsemalla pikavalikosta ClassWizard. 3. Valitse Member Variables välilehti. 4. Valitse Control IDs luetteloruudusta tekstiruudun ID-tunnus (tässä IDC_NAME) ja napauta Add Variable painiketta. Saat esiin Add Member Variable valintaikkunan. Voit lisätä kontrolliin jäsenmuuttujan myös kaksoisnapauttamalla kontrollin IDtunnusta. 5. Avaa Member Variable Name yhdistelmäruudun luettelo ja saat esiin luettelon tietuejoukon muuttujista (kuva 24.9). Valitse tekstiruutuun liitettävän muuttujan nimi tässä esimerkissä m_pset->m_name.

596 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö KUVA 24.9 Tietuejoukon muuttujan liittäminen tekstiruutuun. 6. Valitse Category-yhdistelmäruutuun tässä esimerkissä Value. 7. Valitse muuttujan tyyppi Variable Type ruutuun. Tässä esimerkissä tyyppi on CString. 8. Napauta OK. 9. Valitse Control IDs luetteloruudusta IDC_YEAR ja napauta Add Variable painiketta. 10. Avaa Member Variable Name yhdistelmäruudun luettelo ja valitse luettelosta m_pset->m_year. 11. Valitse Category-yhdistelmäruutuun tässä esimerkissä Value. 12. Valitse muuttujan tyyppi Variable Type ruutuun. Tässä esimerkissä tyyppi on int. 13. Sulje Add Member Variable ikkuna OK:lla. 14. Sulje ClassWizard OK:lla. Käännä ja aja projektisi. Sovelluksen tulisi automaattisesti kytkeytyä Student Registration tietolähteeseen ja Record View näkymän ensimmäisellä piirtokerralla esillä tulisi olla Student-taulun ensimmäinen tietue. Kokeile tietueiden läpikäymistä. Kuva 24.10 esittää UsingDB-esimerkin toiminnassa.

Tietokantojen ja tietuenäkymien käyttö OSA VI LUKU 24 597 KUVA 24.10 UsingDB-esimerkki. KATSO MYÖS Lisätietoja valintaikkunoiden suunnittelusta luvusta 3. Lisätietoja CFormView-luokasta luvusta 18.

598 Sovelluksen tietojen ulkoistaminen Tietokantojen ja tietuenäkymien käyttö