Sida 1 av 3

C++ och databaser

Postat: 25 augusti 2007, 13:09:45
av squiz3r
Hej, Jag har börjat på en C++ kurs i skolan, (Jag har bara varit på en lektion så jag är nybörjare). Men så undrar jag om man kan ha en databas, typ som en variabel men att den inte försvinner när man stänger av programmet? Det borde ju gå, det är ju rätt många spel som är gjorda i C++ och där kan man ju spara..

Tacksam för all hjälp! :)
Mvh. Danile Andersson

Postat: 25 augusti 2007, 13:12:35
av sodjan
Sannolikt helt vanlig file I/O.
Kolla dokumentationen.

Postat: 25 augusti 2007, 13:19:05
av maha
Ett smidigt sätt är att använda t.ex. INI-filer. Finns massor med färdiga lättanvända funktioner för det. Eller så kan du spara data i Windows register. T.ex. programinställningar. Men som Sodjan sa, helt vanlig file I/O är nog rätt ställe att starta på. Finns MASSOR med information på nätet om läsning och skrivning av filer.

Postat: 25 augusti 2007, 13:26:43
av squiz3r
Okej. Tack! Nu när jag viste vad jag skulle söka på var det lättare :) Jag har börjat med detta nu: http://www.cplusplus.com/doc/tutorial/files.html

Mvh. Daniel Andersson

Postat: 25 augusti 2007, 13:31:38
av Icecap
Jag använder INI-filer, oftast i ett binärt format.

Kod: Markera allt

char Statistic_File[MAX_PATH]; // Name of the file
...

När namnet ska fastställas:
// Set statistic file name with the extension of ".TXT"
sprintf(Statistic_File   , _argv[0]);
sprintf(strrchr(Statistic_File   ,'.') + 1,"txt");
Nu innehåller 'Statistic_File' samma path och namn som programmet heter men med ".TXT" som extension mot ".EXE" för programmet
...

När data ska sparas:
DWORD Did_Write;
HANDLE Stat_File = CreateFile(Statistic_File,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(Stat_File != INVALID_HANDLE_VALUE)
  {
//  SetFilePointer(Stat_File,0,0,FILE_END); // Move to the end of the file in order to append, ONLY USED WHEN APPENDING TO A FILE!!!!
  WriteFile(Stat_File,&Buffer,strlen(Buffer),&Did_Write,0);
  CloseHandle(Stat_File);
  }
Sedan .... din signatur....
Heter du verkligen Danile? Är det inte Daniel?

Postat: 25 augusti 2007, 13:49:55
av squiz3r
"Sedan .... din signatur....
Heter du verkligen Danile? Är det inte Daniel?"
:oops: Går lite snabbt ibland när jag skriver den, så lite då och då slinter jag på tangenterna så blir det fel.. :)

Ditt sett värkar också vara intresant.. Jag får se vilket jag tar.

Sen.. Vad menas med "string line;"?? Jag tror att "line" är en variabel, med vad för variabel blir det?? :S

Mvh. Daniel Andersson

Postat: 25 augusti 2007, 15:59:31
av Icecap
'string' är väl en ANSIstring? Använder den aldrig själv då jag pillar så lite som möjligt på ANSIstring.

Om vi antar att 'Buffer' är en variabelsamling kan man spara på sättet jag visar, att hämta det sedan är lika enkelt, största skillnad är att man använder 'ReadFile' istället för 'WriteFile'.

Du kan i övrigt ta bort raden med 'SetFilePointer' då det inte behövs till din användning, faktisk blir det fel om du använder det när du sparar inställningar.

Postat: 25 augusti 2007, 16:26:52
av squiz3r
Nu har jag gjort en liten kod som kan (ska) visa 5st komponenter i en lista med antal (Som den hämtar från en .txt fil).

Men.. När jag ska bygga den klagar den på något.. Den sätter markeringen på raden där det står "case '2':" och skriver medelandet "jump to case label".. Vad är fel??

Sen undrar jag om man verkligen ska behöva göra en "char variabel grupp"
for varje ord!?

Kod: Markera allt

#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    char meny;
    cout <<"Vad vill du göra? \n \n" <<"1. Kolla i databasen \n 2. Ändra i databasen";
    cin >>meny;
    
    switch (meny) {
           case '1':
                //**********************************
                //read from a .txt file

                  char str1[20];
                  char str2[5];
                  char str3[20];
                  char str4[5];
                  char str5[20];
                  char str6[5];
                  char str7[20];
                  char str8[5];
                  char str9[20];
                  char str10[5];
                                    

                  //Opens for reading the file
                  ifstream b_file ( "example.txt" );
                  //Reads one string from the file
                  b_file >>str1 >>str2 >>str3 >>str4 >>str5 >>str6 >>str7 >>str8 >>str9 >>str10;
                  //Should output 'this'
                  cout <<"Komponent - antal" <<str1 <<" - " <<str2 <<"\n" <<str3 <<" - " <<str4 <<"\n" <<str5 <<" - " <<str6 <<"\n" <<str7 <<" - " <<str8 <<"\n" <<str9 <<" - " <<str10;
  
                  break;
                 
           case '2':
                cout <<"Under konstruktion";
                
                break;  
           
           default:
                   cout <<"Alternativet finns ej.";     

  }
  cin.get();    // wait for a keypress
}
(Det ska bli en databas där jag kan se vad för komponenter jag har hemma)

Mvh. Daniel Andersson

Postat: 25 augusti 2007, 18:51:26
av axelsonic
Slå en titt i mysql++ api:et inte så bängligt =) .

Kanske lite overkill, men klart ballt när det fungerar =D .

Postat: 25 augusti 2007, 18:54:26
av Micke_s

Postat: 26 augusti 2007, 11:50:57
av squiz3r
Jag har alldrig förstått vad mysql är?? Vad gör det för nytta??

Mvh. Daniel Andersson

Postat: 26 augusti 2007, 12:01:56
av Micke_s
En stor fördel med en mysql och andra databaser är att det finns mycket som är redan färdigt som hade varit jobbigt att skriva en egen hanterare till. Den är antagligen mer effektiv att ta fram datan än vad du själv hade gjort.

Läs igenom denna länk, Gäller databaser generellt.
http://www.databasteknik.se/webbkursen/ ... index.html

Postat: 26 augusti 2007, 13:13:59
av sodjan
> Jag har alldrig förstått vad mysql är?? Vad gör det för nytta??

http://www.mysql.com/why-mysql/

Postat: 26 augusti 2007, 13:20:13
av squiz3r
Jag har läst igenom de nu, det verkar vara exakt vad jag behöver :D

Men jag förstår inte riktigt.. Det SQLite som du länkade till, är det ett program som mitt program ska komunisera med på nått vis, eller är det en kod som jag ska lägga in i mitt program?? :S

Tacksam för alla svar!

Mvh. Daniel Andersson

Postat: 26 augusti 2007, 13:33:27
av sodjan
> Det SQLite som du länkade till, är det ett program som mitt program ska komunisera med på nått vis, eller är det en kod som jag ska lägga in i mitt program??

Från deras hemsida :

"SQLite is a small C library that implements a self-contained, embeddable,..."