Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Database kysymys (C++)

Syntty [25.01.2009 22:35:35]

#

Eli, olen tässä nyt hiukan aikaa koodaillut tuolla Microsoftin Visual C++ 2008 Express Editionilla ja nyt haluaisin kysyä, että olisiko tuon Microsoft SQL Server Databasen tai Microsoft Access Databasen käyttö hyödyllistä pelissä esim. pelin tietojen tallentamiseen?

Jos siitä jotain hyötyä on niin voisiko joku laittaa linkin sivulle jossa olisi ohjeita jommankumman tai molempien käyttöön?

Metabolix [25.01.2009 22:39:06]

#

Koetko tarvitsevasi niitä johonkin? Tuskin kumpaakaan on ainakaan missään reaaliaikaisessa pelissä käytetty, tietenkin jotkin verkossa pelattavat manageripelit jne. ovat asia erikseen.

Kerro toki, jos keksit jotain, mitä olisi järkevää tallentaa tietokantaan.

Yleissääntö ohjelmoinnissa: jos kaikki sujuu helposti ja toimii nopeasti, on melko turhaa miettiä, "voisiko tässä käyttää menetelmää/ohjelmistoa X".

Pekka Karjalainen [26.01.2009 13:27:29]

#

Syntty kirjoitti:

Eli, olen tässä nyt hiukan aikaa koodaillut tuolla Microsoftin Visual C++ 2008 Express Editionilla ja nyt haluaisin kysyä, että olisiko tuon Microsoft SQL Server Databasen tai Microsoft Access Databasen käyttö hyödyllistä pelissä esim. pelin tietojen tallentamiseen?

Olen nähnyt pelin, jossa käytetään Metakit-nimistä tietokantakirjastoa pelitilanteiden tallentamiseen. Se toimii siinä pelissä hyvin pelin rakenteen ansiosta. Kyseessä on ohjelmaan upotettava tietokantakirjasto, eli hieman kuin sqlite, mutta ei samalla tavalla relaatiomalliin perustuva. Sivukin on:

http://www.equi4.com/metakit/

Oleellista tässä on, että nämä kirjastoina toimivat tietokantatoiminnot voi linkata itse sovellukseen. Niissä ei ole palvelinta, vaan ne kirjoittavat tiedon talteen tavalliseen tiedostoon. Jos käyttäisit Microsoftin DB-ohjelmia, niiden levittäminen ohjelmasi mukana on työlästä, jos MS:n lisenssi ylipäätänsä sallii sen. Eli MS:n ohjelmien käyttäminen ei vaikuta kovin mielekkäältä tässä tilanteessa. Serveripuolella ne olisivat mahdollisia.

Järkevin tapa esittää ja tallentaa pysyvä data riippuu kunkin pelin tarpeista. Tätä vastinetta ei pidä tulkita suosituksena Metakitin käyttöön. Kerroinpa vain, että joku on käyttänyt.

lainaus:

Jos siitä jotain hyötyä on niin voisiko joku laittaa linkin sivulle jossa olisi ohjeita jommankumman tai molempien käyttöön?

Suosittelen tietokannoista kertovan kirjan hankkimista ja lukemista, jos aihe kiinnostaa tarpeeksi. Perustiedot tietorakenteista ja algoritmeista on hyvä hankkia ennen kuin näihin asioihiin syventyy.

groovyb [30.01.2009 22:58:53]

#

microsoft sql server expressiä saa ihan vapaasti käyttää, ja on vapaasti myös jaossa.

http://www.microsoft.com/Sqlserver/2005/en/us/express.aspx

sql:stä löydät tutoriaaleja pilvin pimein, itse jo aiemmin postasin sqlesimerkin visual c++:lle.

komentoja löydät: http://www.sqlcommands.net

ja käyttöesimerkin: https://www.ohjelmointiputka.net/keskustelu/18133-cpp-ja-tietokannat


vaikka et pelissä tarvitse niin opitpahan käyttämään tietokantaa :)

ja muista että vc++:ssa korvaa pointteriasteriski ^ merkillä,
se ainakin oletuksena on joku managed CLI tai vastaava windows form applications puolella.

Luokka::Jotain^ MyJotain = gcnew Luokka::Jotain();

gcnew = new, automaagisella roskankeruulla.


tässä vielä esimerkki querystä vc++:lla ja windows Form application
tauluna Users (Name varchar,Country varchar)
ekalla rivillä Perttu,Suomi
toisella Liisa,Ruotsi

using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;

//System::Formin alle esittelyihin..

public: static System::Data::SqlClient::SqlConnection^ MyConnection = gcnew System::Data::SqlClient::SqlConnection();
public: static System::Data::SqlClient::SqlCommand^ MyCommand = gcnew System::Data::SqlClient::SqlCommand();

//näitä kutsut sitte jossain

private::Void ConnectionAndQuery()
{
String^ Data;
this->MyConnection->ConnectionString = "blahblah";

try
{
this->MyConnection->Open();
}
catch(Exception^ ex)
{
MessageBox::Show(ex->ToString());
}


this->MyCommand->CommandText = "SELECT Name,Country FROM Users WHERE Name = 'Liisa'";

//Tai "SELECT * FROM Users WHERE Name = 'Liisa'" -kun kerran kaikki data luetaan

SqlDataReader^ MyReader = this->MyCommand->ExecuteReader();

while(MyReader->Read())
{
Data = "MyReader[0]->ToString() + " From " + MyReader[1]->ToString();
}

MyReader->Close();
this->MyConnection->Close();

MessageBox::Show(Data);

}

Data = Liisa From Ruotsi

ja kappas ekalla rivillä olikin Perttu vaikka piti olla Pertti. no korjataan se

//Samat alkuhärpäkkeet...


System::Void Update()
{
this->MyConnection->ConnectionString = "Basgflasg";
this->MyConnection->Open();
this->MyCommand->CommandText = "UPDATE Users SET Name = 'Pertti' WHERE Name = 'Perttu'";
this->MyCommand->ExecuteNonQuery();
this->MyConnection->Close();
}

groovyb [31.01.2009 00:28:17]

#

ja unohdin, ms visual studion express versioilla tehtyjä ohjelmia voi vapaasti levittää. ms:n express sivujen lisenssiosiossa.

Metabolix [31.01.2009 14:03:08]

#

groovyb kirjoitti:

ja muista että vc++:ssa korvaa pointteriasteriski ^ merkillä,

VC++:lla voi onneksi tehdä muitakin kuin .Net-ohjelmia, ja tällöin syntaksikin vastaa aivan normaalia C++:aa.

groovyb [31.01.2009 17:17:04]

#

puhuinkin windows form applicationista, jossa vakiona on tollainen modattu syntaksi

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta