C++ och databaser

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

C++ och databaser

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Sannolikt helt vanlig file I/O.
Kolla dokumentationen.
Användarvisningsbild
maha
EF Sponsor
Inlägg: 1685
Blev medlem: 22 november 2005, 09:47:02
Ort: Jakobstad, Finland

Inlägg 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.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg 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
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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?
Senast redigerad av Icecap 25 augusti 2007, 16:00:17, redigerad totalt 1 gång.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg 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
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg 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
Användarvisningsbild
axelsonic
EF Sponsor
Inlägg: 709
Blev medlem: 8 juni 2003, 20:56:03
Ort: Stockholm

Inlägg av axelsonic »

Slå en titt i mysql++ api:et inte så bängligt =) .

Kanske lite overkill, men klart ballt när det fungerar =D .
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag har alldrig förstått vad mysql är?? Vad gör det för nytta??

Mvh. Daniel Andersson
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag har alldrig förstått vad mysql är?? Vad gör det för nytta??

http://www.mysql.com/why-mysql/
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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,..."
Skriv svar