Datenbanken



  • Hi

    ich hab folgende Frage:

    Ich will ein Programm schreiben, was eine Statistik aus einer .txt einliest. Das kann ich.

    So, jetz soll die Statistik aber gespeichert werden. Ausserdem kommen alle paar tage Werte hinzu.

    Bsp:
    Die Statistik geht über 7 Tage.
    Jetz soll jeder tag, eine Zeile in einer datenbank bekommen.
    Jetz wird beim einlesen überprüft ob der tag vorhanden ist, wenn ja, nichts macvhen, wenn nein, eine neue zeile hinzüfügen und einige werte eintragen

    Ich hab mal gegooglet, aber hab keine tuts zur verwendung von Datenbanken in C++ gefunden.

    Könnt ihr mir da nen gutes Tut empfehlen? Das ganze soll LOKAL laufen, also nichts mit server und sonem kram.

    Oder sollte ich das ganz anders regeln, wenn ja wie?

    Eldarion



  • C++ kennt keine Datenbaken.

    Welches OS ? Welcher Compiler ? (Welche Datenbank ?)

    Schon mal hier geschaut ?
    http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index



  • Ich arbeite mit Dev-C++ unter Windows und würd den auch gerne weiterbenutzen.

    Bei deinem link find ich nichts

    Eldarion



  • Warum willst du dafür unbedingt eine Datenbank verwenden? Reicht es nicht auch die Ergebnisse in eine Textdatei zu speichern?
    Ich selber verwende als Datenbank unter anderem Firebird die gibt es auch als embedded Version ohne Server. Weitere Infos (inklusive einer C++API) hier
    http://firebird-datenbank.de/C++.html



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Unbedingt hab ich nicht gesagt, es war ja die rede hiervon:

    Oder sollte ich das ganz anders regeln, wenn ja wie?

    Da fand ich schon, das die frage offen war und nich auf datenbanken begrenzt

    Die idee kam mir, weil ich:
    -mehre werte pro tag habe und die halt zusammenfassen will(könnte man ja auch über ein array machen)
    -das schon ne ganze menge an sachen werden wird
    -ich ja sonst noch einen auswertungsalgorithmus für das laden der sachen schreiben muss.

    Eldarion



  • hi,

    ich denke mal das bei größeren datenmengen textdateien nicht mehr geeignet sind. wird einfach zu langsam.
    daher hält bei mir die MSSQL datenbank her (developer edition). alternativ MySQL, da kostenlos. lässt sich lokal installieren und ist sehr schnell. von der überlegung access zu nehmen kann ich nur abraten. da grenze bei 2 gb liegt und sau langsam ist.

    denke mal das du hier in den faq´s genug infos findest wie du die datenbankverbindungen aufbaust.

    willst du das prog als konsolenanwendug schreiben oder mit einer gui versehen? (dev c++ -> für konsolenanwendungen *grübel)

    evtl hab ich einige pdf´s für dich.



  • Ersma als konsolenprogramm. Später evtl auch ne GUI. Achja, Dev-C++ kann aber WinApi^^.

    Access hab ich garnihc, also wollt ich das auch nich nehmen.

    In den FAQs hab ich leider nichts gefunden. 😞

    Das mit den PDFs wär super 🙂

    Eldarion



  • Das beste für deinen Zweck wird vermutlich SQLite sein. Das ist im Grunde nur eine Library, die du in dein Programm einbinden kannst. So etwas wie MySQL, MSSQL oä sind ja eher für kompliziertere Systeme gedacht.



  • Ich hab mir jetz ma diese SQLite gedownloadet. wie muss das denn jetz eingebunden werden? ICh hab ne Dll und sone .def datei 😕

    Könnt irh mir evtl auch nen deutsches tut empfehlen für diese SQLite ?

    Eldarion



  • Hallo Eldarion,

    da ich zufällig auf dieses Forum wegen 'ner anderen Sache gestoßen bin und auch zufällig die SQLite aktuell mit Dev-C++ benutze, hab ich für dich passend mal mein SQLite-Beispielprogramm, mit dem ich mir selbst das beigebracht habe mal etwas für dich angepasst (dein Einsatzzweck und alles in Deutsch):

    1. Der Inhalt meines Makefile.win:

    # Project: SQLite-Test
    # Makefile created by Dev-C++ 4.9.9.2

    CPP = g++.exe
    CC = gcc.exe
    WINDRES = windres.exe
    RES =
    OBJ = main.o $(RES)
    LINKOBJ = main.o $(RES)
    LIBS = -L"lib" sqlite3.dll
    INCS = -I"include"
    CXXINCS = -I"include"
    BIN = SQLite-Test.exe
    CXXFLAGS = $(CXXINCS) -fexpensive-optimizations -O3
    CFLAGS = $(INCS) -fexpensive-optimizations -O3
    RM = rm -f

    .PHONY: all all-before all-after clean clean-custom

    all: all-before SQLite-Test.exe all-after

    clean: clean-custom
    ${RM} $(OBJ) $(BIN)

    $(BIN): (OBJ)(OBJ) (CPP) $(LINKOBJ) -o "SQLite-Test.exe" $(LIBS)

    main.o: main.cpp
    $(CPP) -c main.cpp -o main.o $(CXXFLAGS)

    2. Der Inhalt meiner Projektdatei "SQLite-Test.dev":

    [Project]
    FileName=SQLite-Test.dev
    Name=SQLite-Test
    UnitCount=1
    Type=1
    Ver=1
    ObjFiles=
    Includes=
    Libs=
    PrivateResource=
    ResourceIncludes=
    MakeIncludes=
    Compiler=
    CppCompiler=
    Linker=sqlite3.dll_@@_
    IsCpp=1
    Icon=
    ExeOutput=
    ObjectOutput=
    OverrideOutput=0
    OverrideOutputName=SQLite-Test.exe
    HostApplication=
    Folders=
    CommandLine=
    UseCustomMakefile=0
    CustomMakefile=
    IncludeVersionInfo=0
    SupportXPThemes=0
    CompilerSet=0
    CompilerSettings=0000000001001000000000

    [Unit1]
    FileName=main.cpp
    CompileCpp=1
    Folder=
    Compile=1
    Link=1
    Priority=1000
    OverrideBuildCmd=0
    BuildCmd=

    [VersionInfo]
    Major=0
    Minor=1
    Release=1
    Build=1
    LanguageID=1033
    CharsetID=1252
    CompanyName=
    FileVersion=
    FileDescription=Developed using the Dev-C++ IDE
    InternalName=
    LegalCopyright=
    LegalTrademarks=
    OriginalFilename=
    ProductName=
    ProductVersion=
    AutoIncBuildNr=0

    3. Jetzt der Inhalt der main.cpp:

    #include <iostream>
    #include <sqlite3.h>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
     char *fehlerMeldung = NULL, **sqliteErgebnis;
     int betroffeneSpalten, betroffeneZeilen, rueckgabeWert;
     sqlite3 *statistikwerteDatenbank;
     string insertKommando;
    
     rueckgabeWert = sqlite3_open("./statistikwerteDatenbank", &statistikwerteDatenbank);
     if (rueckgabeWert)
        {
         cout << "Can't open database(statistikwerteDatenbank): " << sqlite3_errmsg(statistikwerteDatenbank) << endl;
         sqlite3_close(statistikwerteDatenbank);
         exit(1);
        }
    
     rueckgabeWert = sqlite3_exec(statistikwerteDatenbank, "CREATE TABLE Tageswerte(Tag TEXT PRIMARY KEY, Wert1 TEXT, Wert2 TEXT, Wert3 TEXT);", NULL, 0, &fehlerMeldung);
     if (rueckgabeWert != SQLITE_OK)
        {
         string temporaererSuchString = fehlerMeldung;
    
         if (temporaererSuchString.find("table Tageswerte already exists") == string::npos) cout << "SQL error: " << fehlerMeldung << endl;
        }
    
     insertKommando = "INSERT INTO Tageswerte VALUES('";
     insertKommando += "Montag";
     insertKommando += "', '";
     insertKommando += "1";
     insertKommando += "', '";
     insertKommando += "3";
     insertKommando += "', '";
     insertKommando += "2";
     insertKommando += "');";
     rueckgabeWert = sqlite3_exec(statistikwerteDatenbank, insertKommando.c_str(), NULL, 0, &fehlerMeldung);
     if (rueckgabeWert != SQLITE_OK)
        {
         if (strcmp(fehlerMeldung, "column Tag is not unique") == 0)
            {
             cout << "Eine Zeile mit dem Tag existiert bereits!" << endl;
            }
        }
     else
        {
         cout << "Tag erfolgreich eingetragen!" << endl;
        }
    
     sqlite3_close(statistikwerteDatenbank);
    
     return 0;
    }
    

    Kopiere alle Dateien in ein Verzeichnis und zusätzlich auch noch die "sqlite3.dll", dann kompiliere das Projekt und starte es über ein DOS-Fenster.
    Beim ersten Durchlauf bekommst du den Text "Tag erfolgreich eingetragen!" zu sehen. Bei jedem weiteren Durchlauf nur "Eine Zeile mit dem Tag existiert bereits!".
    Wenn du den Montag nochmal eintragen willst, also so tun, als hättest du es gerade zum ersten Mal gestartet, reicht es, wenn du einfach die Datenbankdatei
    "statistikwerteDatenbank" löschst.

    Als Datentypen hab ich jetzt mal "TEXT" verwendet, da du dann die "statistikwerteDatenbank" einfach in einem Texteditor deiner Wahl öffnen kannst und sofort siehst, wo die in der Datenbank gespeichert sind. Ist also nur 'ne Verständnishilfe, was den Aufbau so 'ner SQLite-Datenbank angeht.

    Schönen Sonntag noch
    A.W.G. 😃



  • Hey, das sis ja super 👍 👍 👍 🙂 🙂 🙂

    Das werd ich gleich am ausprobiern. Kurze frage: die makefile.win einfach in den ordner?

    Eldarion



  • Kurze frage: die makefile.win einfach in den ordner?

    Darauf gibt es zwei Möglichkeiten zu Antworten:

    1. Kurze Antwort: Ja

    2. Du hast meinen Kommentar unterhalb meines Codeblocks nicht verinnerlicht! Dort habe ich geschrieben:

    Kopiere alle Dateien in ein Verzeichnis

    Wobei bei diesem Satz die Betonung eben auf "alle" liegt!

    Wahrscheinlich läuft es jetzt eh' schon bei dir? 😉



  • JO, es läuft schon. Ich wrude nur stutzig, weil ich die datei sonst nie gesehn hatte 😉 .

    abber es läuft super. vielen danke 🙂



  • Hi all
    also ich hab eben diesen Beitrag gesehen. Ich hatte vor einer weile auch mal SQLite getestet, hab es bei mir aber irgend wie nie richtig zum funktionieren gebracht. Nun hab ich eben da Bsp. von oben reproduziert und versucht zu compilieren mit dem Dev-Cpp erhalte aber die Meldung, das er ein Problem mit dem sqlite3.h hat (No such file or directory). Hab aber alle 4 Files im gleichen Ordner.
    Weis einer was ich falsch mach? 😕



  • Du musst die DLL in den ordner. Die SQLite3.h in den includes ordner deines compilers.

    Eldarion



  • Danke für die Antwort, ich bin vielleicht etwas ein Noob auf diesem Gebiet aber muss ich da noch mehr im Dev-Cpp konfigurieren oder kopieren? Denn ich erhalte nun die Meldung das er beim Makefile ein Build Error hat, er kann -lobjc nicht finden.
    Sry ist vielleicht eine dumme Frage, kenn mich aber nicht wirklich mit einbinden von dll's usw. aus.



  • Danke für die Antwort, ich bin vielleicht etwas ein Noob auf diesem Gebiet aber muss ich da noch mehr im Dev-Cpp konfigurieren oder kopieren? Denn ich erhalte nun die Meldung das er beim Makefile ein Build Error hat, er kann -lobjc nicht finden.
    Sry ist vielleicht eine dumme Frage, kenn mich aber nicht wirklich mit einbinden von dll's usw. aus.



  • Hast du evtl ICQ? dann könnt ich dir das ganz in ruhe erklärn und dir genau helfen 🙂

    Meien nummer is:317-122-136

    NOrmalerweise muss da nichts eingestellt werden in Dev-Cpp.
    Beschreib doch bidde nochma genau was du gemacht hast.

    Eldarion


Anmelden zum Antworten