Ensinnäkin kiitoksia Antille tunnuksen nopeasta aktivoinnista!
Omasta ohjelmointitaustastani sen verran, että olen jonkin verran säätänyt PHP-, C++- ja Java-ohjelmointikielillä. Perusteet on kaikista jokseenkin hallussa, mutta mikään noista kielistä ei oikein tunnu soveltuvan graafisten Windows-ohjelmistojen tekemiseen. C++ ja Java soveltuvat varmasti loistavasti tarkoitukseen, jos on viitseliäisyyttä perehtyä tarkemmin.
Tuossa pari päivää sitten tuli vastaan Microsoftin Visual Basic Express Edition Beta 2 -ohjelmisto, joka tuntuu soveltuvan tarkoitukseeni varsin mainiosti, eikä vähiten ohjelman ohessa tarjottavien loistavien videotutoriaalien ansiosta.
Tarkoituksenani on tehdä tuttavalle pieni graafinen Windows-ohjelma, jonka tekemisen ainoana kompastuskivenä on oikeanlaisen tietokantaratkaisun päättäminen. Tuossa jo aiemmin mainitsemassani Bob Taborin video-opassarjassa tehdään tietokantaharjoituksia käyttäen Microsoftin SQL Server 2005 Express Edition -ohjelmistoa. Jos kaikki olisi mennyt kuten olisin halunnut, olisin todennäköisesti jo saanut ohjelmani tehtyä ajat sitten, mutta tuo ohjelmisto ei asennu koneelleni – ei sitten kirveelläkään! Olen yrittänyt asentaa ohjelmistoa saman asennusohjelman kautta kuin asensin tuon varsinainen kehitysympäristönkin, mutta asennuksen loppupuolella tulee virheilmoitus “Microsoft SQL Server 2005 CTP Setup has encountered a problem and needs to close...ö. Muillakin on ilmennyt samaa ongelmaa (googletuksen perusteella), mutta korjausehdotuksiksi tarjotut rekisterimuokkaukset ja kaikkien .Net-ohjelmistojen poisto ja uudelleenasennus eivät omassa tapauksessani ole auttaneet. Olisiko kellään tarjota vinkkejä tähän paljon päänvaivaa tuottaneeseen asennusongelmaan?
Tällä hetkellä etenemisvaihtoehtoja on neljä:
1.Saada olemassaoleva ohjelmisto asentumaan.
2.Odottaa uutta versiota SQL Server -ohjelmistosta, joka toivottavasti suostuisi asentumaan taidoillani ja tietokonelaitteistollani.
3.Keksiä joku uusi tietokantaratkaisu.
4.Antaa koko homman olla. :)
Eli jos tuota varsinaista tietokantaohjelmistoa ei saa asennettua, pitää keksiä joku vaihtoehtoinen tapa. Ohjelman tietokannasta ei ole tulossa mikään järjettömän suuri ja monimutkainen; yksi taulu, jossa on alle kymmenen saraketta ja johon talletettava tieto on lopulta täysin staattista (kun kaikki tarvittava on lisätty ja muokattu). Rivejä tulisi korkeintaan muutamia satoja. Kertokaa jotain vaihtoehtoisia tapoja tuollaisen tietokannan tekemiseen ja jos mahdollista, laittakaa linkkejä niiden käytöstä kertoviin tutoriaaleihin (aika heikosti olen löytänyt oppaita parin päivän googletuksella) tai kertokaa itse, miten pääsen sen kanssa liikkeelle. Suotavaa olisi kuitenkin, että “loppukäyttäjänö ei tarvitsisi asennella mitään ylimääräistä koneelleen. Ja tuosta pääsen vielä yhteen mieltäni askarruttaneeseen kysymykseen: jos saan tuon SQL-serverin jotenkin toimimaan ei kai loppukäyttäjän tarvitse omalle koneelleen kyseistä ohjelmistoa asentaa, jotta sillä tehtyjä tauluja pystyisi käyttämään? Jos noin ison ohjelmiston joutuu asentamaan tällaisen pikkurävellyksen takia, ei sen käytössä sitten ole mitään järkeä tässä tapauksessa. :D
Ilmeisesti ainakin Microsoftin Officen mukana tulevan Accessin avulla pystyisi jonkinlaisen tietokannan väsäämään myös Visual Basicin kanssa käytettäväksi? Onko tuo miten hyvä ratkaisu ja vaatiiko se loppukäyttäjän koneelta Accessin? Tuossakin on vaan se homma, että itse en omista Microsoftin Officea, joten joutuisin väsäämään tietokannan ja koulut koulussa.
Kertokaa vaan juttuja kaikista mieleen tulevista ratkaisuehdotuksista. Kiitoksia avusta etukäteen. :)
Pitkään kysymykseen lyhyt ja ytimekäs vastaus:
jos käytät jotain oikeaa SQL-palvelinohjelmistoa kehitysvaiheessa, täytyy softan päästä siihen käsiksi myös käyttövaiheessa. SQL-palvelimen ei kuitenkaan välttämättä tarvitse sijaita käyttäjän koneella, siihen voidaan ottaa yhteys netinkin yli, mutta Microsoft SQL Server 2005:sen käyttö tuollaisessa pikkusoftassa on vähän sama kuin ampuisi kärpästä tykillä :)
Ehdotus: Tallenna data tavalliseen tekstitiedostoon kentät eriteltynä jollakin rietyllä merkkijonolla. Jos kuitenkin haluat käyttää oikeita SQL-kyselyitä, voit tallettaa datan myös Excel-tiedostoon, josta dataa voidaan *en muista millä* ajureilla hakea ihan normi SQL-lauseilla.
Kyllä Visual Basicilla voi perustaa esim. Access-tietokannan ilman Officen Accessia, suorittaa SQL-kyselyjä jne. Mutta onko nuo tiedot oltava välttämättä tietokannassa vai riittääkö esim. binääritiedosto, jonka käsittely voi olla helpompaa ja toteutus paljon kevyempi.
setä kirjoitti:
Kyllä Visual Basicilla voi perustaa esim. Access-tietokannan ilman Officen Accessia, suorittaa SQL-kyselyjä jne. Mutta onko nuo tiedot oltava välttämättä tietokannassa vai riittääkö esim. binääritiedosto, jonka käsittely voi olla helpompaa ja toteutus paljon kevyempi.
Ei ole mitään väliä, missä tieto sijaitsee, kunhan homman vaan saa tehtyä siten että loppukäyttäjä pystyy lisäämään sitä helposti.
Kerro lisää tuosta "binääritiedostoratkaisusta".
Itse käytän VB5 ja VB6 Pro versioita ja VB.NET on aika tuntematon. Binääritiedostoon voit määrittää tietueen kentät kuten tietokantaankin Type-määrityksellä, jossa luetellaan kenttien muuttujanimet ja tyypit. Tiedot tallennetaan Put-lauseella ja luetaan Get-lauseella. Tiedostonkäsittelystä varmaan löytyy ohjeita. Tietueen osoite on tavuosoite eli ensimmäinen tietue alkaa osoitteesta 1, seuraava 1 + ensimmäisen tietueen pituus jne. Alussa luetaan tiedosto läpi ja tallennetaan tietue-osoitteet esim. ListBoxin ItemDataan ja ListBoxiin sitten jonkin kentän tieto jota voidaan käyttää hakusanana. Kovin tarkkaan en nyt voi kuvailla toimintoja kun ei ole tietoa millaista tietoa tallennat ja kuinka sitä halutaan lukea.
Olisiko kellään heittää linkkiä johonkin asiaa käsittelevään tutoriaaliin?
edit: Voi helkkari, oon missannut kokonaan tuon kehitysympäristön oman dokumentoinnin. :D Tuolla näyttäis olevan jotain juttuja näistä tietokannoistakin.
Lisätään nyt vielä yksi tyhmä kysymys lisää tähän triidiin:
Miten ihmeessä onnistuu tätä vastaavan systeemin tekeminen: http://jaakko.loota.fi/temp/control.png
Eli tuollainen "taulukko", jossa pystyy järjestämään kohteet jonkun sarakkeen ominaisuuden mukaan yms.
no joko koodaamalla sen itse tai käyttämällä valmista kontrollia.
1) Itse koodaamalla
taulukossa data ja se järjestellään vaikka aakkosten mukaan nousevasti/laskevasti)
2) valmis kontrolli
vb:ssä taitaa olla noissa ruudukkokontrollissa ominaisuus jota asettamalla saa sen järjestyksen menemään nousevasti/laskevasti, riippuu kontrollista, yleensä joku sort-ominaisuus tai metodi. Joskus hiiren painallus pitää saada jotenkin kiinni kontrollissa ja survaista koodi sinne.
Oma ehdotukseni on Access kanta. Hyvä pienille ja miksei vähän suuremmillekkin tietokannoille. Tutustu DataSet luokkaan sekä listview ja dataview kontrolleihin ja niiden käyttöön yhdessä DataSetin kanssa.
Kysyit tuosta "systeemin tekemisestä" niin se onnistuu esim. mainitsemallani listview kontrollilla ja nähtävästi myös dataview kontrollilla.
ListView jonka View arvo on Details sitten voit lisätä sarakkeet Columns kohtaan...
DataSetissä on kaikki tarvittava .Select avulla voi suorittaa sql-kyselyitä
Listaan voit lisätä esimerkiksi näin
For each d as datarow in Tiedot.Select() Dim item as New ListViewItem a.text = "Ensimmäinen sarake" a.SubItems.Add("Toinen sarake") a.SubItems.Add("Kolmas sarake") listview.Items.Add(a) Next
Tossa beta versiossa tosiaan on ongelmia ja kannattaakin hommata täys versio Expressin hinta tulee olemaan sitten jotain sellasta jonka voi maksaakkin... Mulla oli nimittäin sama ongelma... kokeile ladata jostain RC1... Sitten vielä kannattaa päivittää .NET Framework 2 ei beta sdkohon jotta ohjelmat käännetään uusimmalla kääntäjällä (kuten Framework 1.0/1.1, kakkosessakin itse ide on vain maksullinen)...
Joo, paljon kiitoksia avustuksesta kaikille!
Tuokin kontrolli varmaan esitellään jossain video-oppaan myöhemmässä osassa, mutta en ole malttanut ladata ja katsoa niitä vielä. :)
Olin melko varma, että tuollainen kontrolli löytyy Toolboxista jostain, mutta helpotti huomattavasti hommaa, kun sai tuon nimen suoraan eikä tarvinnut käydä kaikkia mahdollisia kontrolleja yksi kerrallaan läpi. :)
Heti kun löysin taas aikaa tälle projektille, törmäsin jälleen kerran mulle ylitse pääsemättömään ongelmaan: tiedon tallentaminen Access-kantaan ei onnistu. Tässä vaiheessa haluan vielä huomauttaa, että käytössä on Microsoft Visual Basic 2005 Express Edition -ohjelmisto.
Tieto tallentuu kannan tietoja muistissa pitävään DataSet-luokan olioon niin kuin pitääkin, mutta muistista varsinaiseen tietokantaan tallentaminen ei onnistu. Hommaa olen kokeillut toteuttaa ensinnäkin valmiilla Datagrid-"kontrollilla". Tieto ei tallennu kantaan asti, vaikka kontrollin luoman työkalupalkin Save-nappia painelisi maailman loppuun asti. Lisätty tieto pysyy taulukossa niin kauan kuin ohjelma on päällä. Tietoa pystyy kuitenkin lisäämään pysyvästi, jos sitä lisää käsin Database Explorerin kautta valitsemalla käytettävän taulun kohdalta "Show table data". Tuon perusteella voi kai siis olettaa, että tietokanta ei ole mitenkään kirjoitussuojattu ulkopuolisilta ohjelmilta tms.?
Toisaalta olen kokeillut lisätä tietoa myös rehellisesti koodaamalla. Siinä ilmenee tietenkin sama ongelma, mutta haluaisinkin kysyä, että mitä mieltä olette käyttämästäni tavasta tehdä ko. operaatio, vai olisiko tiedon lisäämiseen koodipuolelta jokin parempikin keino? (Funktio on sovellettu noista ensimmäisessä viestissäni mainitsemistani video-oppaista.)
Private Sub AddType() ' Luokaan kyselylomakeolio. Lomakkeessa käyttäjä ' määrittää tietokantaan lisättävän tyypin nimen. ' Tämän jälkeen olisi tarkoitus lisätä tietoa Rautatyypit ' -nimiseen tauluun. Taulussa on kaksi saraketta: ' TyyppiId ja Tyyppi Dim typeDialog As New TypeDialog() Dim result As DialogResult result = typeDialog.ShowDialog If result = Windows.Forms.DialogResult.OK Then Try Dim type As RautaDb_A2002DataSet.RautatyypitRow type = myDataSet.Rautatyypit.NewRautatyypitRow type.Tyyppi = typeDialog.Type myDataSet.Rautatyypit.AddRautatyypitRow(type) Dim rowsAffected As Integer = 0 rowsAffected = RautatyypitTableAdapter.Update(type) MessageBox.Show("Muokattuja rivejä: " & rowsAffected.ToString) Catch ex As Exception End Try End If End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.