Olen aloittamassa projektia, jossa tarvittaisi jotain tietokantaa pienhkön datamäärän tallentamiseen. Olen tekemässä projektin Visual C++ 2005:lla.
En ole varma miten tietokanta homma kannattaisi ratkaista.. Olisiko kannattavaa vääntää sql:llä taulut ja systeemit, joita sitten kontrolloi ohjelmasta vai onko jotain muuta ratkaisua? Ja mitä tapahtuu, kun otan ohjelmani ja pamautan sen toiseen koneeseen? Pitääkö ladata jotain hienoja sql servereitä ja laatia taulut erikseen vai pystyykö homman hoitamaan niin että pelkkä ohjelman siirtäminen riittää?
Ja mikä on muutenkin visual c++:lla tehtyjen ohjelmien siirrettävyys? En ole paljoa ohjelmoinut muutakuin tekstieditorilla ja kääntänyt komentoriviltä suoraan ajettavalle koneelle..
Jos joku pystyisi hieman valoittamaan, miten projektin kanssa kannattaisi edetä etten saisi sitten myöhemmin turhia harmaita hiuksia ja itkuraivareita.. :)
SQLite on kevyeksi ja helppokäyttöiseksi itseään mainostava ei-palvelinpohjainen SQL toteutus: http://www.sqlite.org/
Visual C++:lla voi kirjoittaa siirrettäviä ohjelmia siinä missä pelkällä tekstieditorillakin kunhan varoo käyttämästä mitään epästandardeja rajapintoja. Siirrettävyys kannattaa aina välillä tarkistaa kääntämällä ohjelma jollakin toisella alustalla, tai ainakin toisella kääntäjällä.
Ja eikös Access ole joku m$:n oma tietokanta?
SQLite on tosiaan hyvin kevyt ja tuntuu sopivat todella hyvin tähän hommaan! Kiitoksia vinkistä.
Miten tuon projektin siirtäminen sitten käytännössä toimii? Pitääkö kohdekoneelle hakea joku kääntäjä jolla se sitten käännetään? Onko tähän puolestaan jotain hyvin kevyitä vaihtoehtoja tai jotain automatisointi vinkkejä (ohjelman loppukäyttäjät eivät todellakaan ole tietotekniikkaihmisiä, joten joutuisin kiertelemään sitten asentamassa ohjelmaa..) :)
haikkari kirjoitti:
Miten tuon projektin siirtäminen sitten käytännössä toimii? Pitääkö kohdekoneelle hakea joku kääntäjä jolla se sitten käännetään? Onko tähän puolestaan jotain hyvin kevyitä vaihtoehtoja tai jotain automatisointi vinkkejä (ohjelman loppukäyttäjät eivät todellakaan ole tietotekniikkaihmisiä, joten joutuisin kiertelemään sitten asentamassa ohjelmaa..) :)
Visual 2005 projektit taitavat vaatia toimiakseen Microsoftin .NET Framework 2:n (tjs.). Eli valmiiksi käännetyn ohjelman käyttäminen vaatii, että Frameworkin riittävän tuore versio on asennettuna sillä koneella, millä ohjelmaa käytetään.
Näin siis, jos käytät Visual Studion tarjoamia Formeja sun muita klikeitä. Ei niitä ole pakko käyttää. Jos ohjelmaa on tarkoitus käyttää vain tuoreimmissa Windowseissa, saahan niillä varsin vähällä vaivalla aikaiseksi graaffisen käyttöliittymän.
Kiitoksia avusta! Vielä yksi ongelma, minkä takia en oo päässy alottaa projektia.. Kävin lataamassa tosta SQLitestä ohjelmakoodin, exe-tiedoston ja dll-tiedoston. Miten saan sen nyt niin että voin käyttää sitä visual studiossa?
Oon kokeillu yksien ohjeiden mukaan tehdä .lib tiedostoa .def tiedostosta mikä tuli mukana, mutta lib komento ei tee mitään.. Siirsin .def tiedoston samaan kansioon lib-ohjelman kanssa ja ajoin sen komennolla "lib /def:sqlite.def", mutta ohjelma miettii hetken ja palauttaa komentorivin normaalisti. Kuitenkaan mitään lib tiedostoa ei ilmesty..
Kokeilin myös kikkailla exe- ja dll-tiedostot Visual Studion \VC\bin kansioon ja sqlite3.h tiedoston \VC\include kansioon. Silti ei toimi.. Include toimii kyllä ja compile onnistuu, mutta kun yritän buildata projektia se sanoo jotain jostain missing linkistä.. eli ilmeisesti ei löydä määritelmiä sqlite3.h tiedoston funktioille..
Jos tohon ongelmaan sais vielä ratkaisun niin sitten voisin jättää teidät gurut rauhaan (ainakin hetkeks) näiltä mun keltanokkakysymyksiltä.. :)
Osaisko kukaan auttaa tossa ^ ongelmassa niin pääsisin projektissa alkuun..? En tiedä yhtään miten saan sen .lib tiedoston tehtyä..
Käynnistä visual studio 2005 command prompt ja koita oikeilla hakemistopoluilla seuraavaa.
lib /DEF:d:\proj\sqldb\sqlite.def /OUT:d:\proj\sqldb\sqlite.lib
Lisäys: Visual Studiolla voi tehdä setup projektin johon voi lisätä kaikki ohjelman tarvisemat "lisä palikat" mukaan .NET Frameworkistä lähtien. Joten yksinkertaisuudessaan käyttäjä vaan klikkailee asennuksen läpi tuttuun windows tyyliin Next->Next->Next... Valmis (näin yksinkertaistettuna)
Ootko varmistanut, että LIB:n hakemistossa on oikea versio siitä mspdb:stä ? Toinen tietysti mikä tulee mieleen ois tarkastella onko kirjoitusoikeuksia kansioon.
Voit kääntää koko projektin tietysti uudelleen:
http://www.sqlite.org/cvstrac/wiki?p=HowToCompile
Kokeilin kääntöä sivun alalaidassa olevien ohjeiden mukaan ilman tclsqlite.c (Compiling SQLite with MS VC++ 5 for C newbies). Toimii ku junan vessa.
Tuohon kysymykseen VC++:n siirrettävyydestä vastaisin, että riippuu mitä kirjastoja käyttelet. Jos käytät C/C++/winkkarin(psdk), et tarvitse antaa mitään dll:iä matkaan. Syntyneestä exestä voi katsella mukana olevat kirjastot Dependency Walker:lla.
LaNu kirjoitti:
Visual 2005 projektit taitavat vaatia toimiakseen Microsoftin .NET Framework 2:n (tjs.). Eli valmiiksi käännetyn ohjelman käyttäminen vaatii, että Frameworkin riittävän tuore versio on asennettuna sillä koneella, millä ohjelmaa käytetään.
Vain jos käännät managed-koodia. VC++ 2005 kääntää halutessa ihan normaalia binäärikoodiakin joka ei vaadi .NETiä mihinkään. Ainoastaan saattaa tulla ongelma VCRT-kirjastojen kanssa, SP1 muutti kääntäjää siten että käytetään uusimpia versioita joita ei tule edes päivitysten mukana näköjään koneisiin. Piti käännöskoneelle jättää SP1 asentamatta ihan tuon takia kun merge moduletkin ovat kateissa ja muuta ihanaa :P
Vielä joudun kysäsemaan yhtä asiaa kun en pääse taas millään eteenpäin.. Eli sain synkattua SQLiten toimimaan Visual C++:san kanssa. MUTTA, se ei suostu toimimaan kun otan projektiksi windows forms application. Eli emptyproj:in kautta homma toimii hyvin ja kaikki on kunnossa, mutta Windows Forms application valittaa linkkerin erroreita. Eli compile toimii, mutta buildatessa tulee seuraavia virheitä:
error LNK2031: unable to generate p/invoke for "extern "C" int __clrcall sqlite3_open(char const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z); calling convention missing in metadata
error LNK2028: unresolved token (0A00000C) "extern "C" int __clrcall sqlite3_open(char const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
error LNK2019: unresolved external symbol "extern "C" int __clrcall sqlite3_open(char const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
Mikä klikkaa? Jos en käytä windows formsia niin toimii.. Oon yrittäny katsoa että kaikki asetuksetkin olis suht samat. Ainakin ne mitä ite joutui lisäilemaään ton SQLiten takia.. Jos joku pystyisi auttamaan, olisin hyvin hyvin kiitollinen!
Yllättäen jos käytät managed-koodia niin otat tietysti .NET-version SQLitestä eikä natiivia. Sitten toimii.
Hain nyt tuolta -> http://sqlite.phxsoftware.com/ ADO.NET sqliten. Siinä luki että se on vaihettavissa alkuperäsen sqlite3.dll kanssa. Tein niin, vaihdoin vielä .lib tiedostonkin uuteen ja katoin että kaikki asetukset on kunnossa, mutta silti tulee samaa virhettä.. Enpä enää tiedä mitä tehdä. Kohta taitaa jäätyä tämä projekti..
feenix kirjoitti:
Yllättäen jos käytät managed-koodia niin otat tietysti .NET-version SQLitestä eikä natiivia. Sitten toimii.
Eli miten pääsen nyt tän homman yli taikka ympäri? Homma siis toimii nyt ilman windowsin formeja. En vaan jaksaisi ruveta koodaamaan käyttistä alusta asti. Noita muutamia windowsin valmiita juttuja olis kiva käytellä. Mutta heti kun avaa projektin jossa on formi, homma kaatuu. Linkkeri huutaa virheitä. Ja SQL.NET hommakaan ei tuntunut tekevän mitään erilaista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.