Suche Datenbanksystem



  • Ok dazu muss ich mir ja erstmal sqlite runterladen:
    http://www.sqlite.org/download.html

    Aber welches? Gibt da vieles. Was is das normale standard sqlite, welches ich runterladen muss.



  • Klaudiii schrieb:

    Aber welches? Gibt da vieles. Was is das normale standard sqlite, welches ich runterladen muss.

    Sag uns, auf welchem System du arbeitest. Wenn es ein Linux ist, hat deine Distribution wahrscheinlich eh schon passende Pakete parat. Wenn du unter Windows bist, installier einfach das erste gelistete Binary ("A command-line program for accessing and modifying SQLite databases.").
    Wenn du das dann später einbinden willst, holst du dir eine der source-Pakete (steht doch groß daneben, für was es empfohlen ist) und kompilierst es in dein Programm ein.



  • Anscheinend bin ich irgendwie zu dumm dafür.

    In PHP hau ich den SQL Code einfach in nem Query und zack wurde die Tabelle angelegt.

    In C++ schaff ich es nicht.



  • Klaudiii schrieb:

    Anscheinend bin ich irgendwie zu dumm dafür.

    Eher zu hektisch...

    In PHP hau ich den SQL Code einfach in nem Query und zack wurde die Tabelle angelegt.

    In C++ schaff ich es nicht.

    Hast du denn schon Erfahrung mit SQL? Das klang bisher nicht so...
    Die sqlite.org-Seite hält alle Infos, die du brauchst.

    Und BITTE schreib in deinem nächsten Post konkret, was du versucht hast! Eine Diskussion ohne Fakten kostet nur unnötige Energie...



  • Ich möchte einfach nur ne SQL Datenbank mit paar Zeilen/Spalten erstellen ohne 10000 Tools/Clients/Sourcecode etc. runterzuladen. Dürfte doch nicht so schwer sein?

    Mal ne andere Frage:
    Wenn du nun eine SQL DB mit den Spalten "Vorname" + "Nachname" hast, wie stellst du das am schnellsten an?



  • Klaudiii schrieb:

    Anscheinend bin ich irgendwie zu dumm dafür.
    In PHP hau ich den SQL Code einfach in nem Query und zack wurde die Tabelle angelegt.
    In C++ schaff ich es nicht.

    Schau Dir das Tutorial an: http://www.sqlite.org/quickstart.html
    Und lies das: http://www.sqlite.org/cintro.html



  • Klaudiii schrieb:

    Ich möchte einfach nur ne SQL Datenbank mit paar Zeilen/Spalten erstellen ohne 10000 Tools/Clients/Sourcecode etc. runterzuladen. Dürfte doch nicht so schwer sein?

    Mal ne andere Frage:
    Wenn du nun eine SQL DB mit den Spalten "Vorname" + "Nachname" hast, wie stellst du das am schnellsten an?

    Nein, ist es auch nicht. Wenn du nur halb soviel Zeit mit der SQLite Doku wie mit Fragenstellen verbringen würdest wärst du längst fertig.



  • DocShoe schrieb:

    Wenn du nur halb soviel Zeit mit der SQLite Doku wie mit Fragenstellen verbringen würdest wärst du längst fertig.

    🤡 👍



  • Jaa ja jaa habt ja Recht.
    Das Tut ist echt gut und auch wenns auf englisch ist, gut zu verstehen.

    Ps.
    Hab übriegends ne .db hinbekommen 😃 War ja easy going^^

    Aber ich würde mich freuen, wenn mir jemand kurz auf Deutsch erklärt was es mit der "SQL Master Table" auf sich hat. Das habe ich nicht ganz verstanden:

    Aside: Querying the SQLITE_MASTER table

    The database schema in an SQLite database is stored in a special table named "sqlite_master". You can execute "SELECT" statements against the special sqlite_master table just like any other table in an SQLite database. For example:

    $ sqlite3 ex1
    SQLite vresion 3.6.11
    Enter ".help" for instructions
    sqlite> select * from sqlite_master;
    type = table
    name = tbl1
    tbl_name = tbl1
    rootpage = 3
    sql = create table tbl1(one varchar(10), two smallint)
    sqlite>

    But you cannot execute DROP TABLE, UPDATE, INSERT or DELETE against the sqlite_master table. The sqlite_master table is updated automatically as you create or drop tables and indices from the database. You can not make manual changes to the sqlite_master table.

    The schema for TEMPORARY tables is not stored in the "sqlite_master" table since TEMPORARY tables are not visible to applications other than the application that created the table. The schema for TEMPORARY tables is stored in another special table named "sqlite_temp_master". The "sqlite_temp_master" table is temporary itself.

    Danke



  • Hab grad keine SQLite Db zur Hand, aber die Master Tabelle enthält alle Tabellenschemata der Datenbank. Du kannst auf diese Tabelle nur lesend zugreifen.
    Die Schemata von temporären Tabellen (Views) stehen NICHT in der Master Tabelle und stehen nur der Anwendung zur Verfügung, die sie erzeugt haben (meine Vermutung: liegen komplett im RAM und nicht in der .db Datei). Die Tabellenschemata der temporären Tabellen liegen in der Tabelle sqlite_temp_master.



  • Bist du sicher, dass du überhaupt ein richtiges Datenbanksystem benötigst?
    Für mich klang es so als möchtest Du beim Beenden des Programms Daten in eine Datei schreiben und diese beim Start wieder in den Arbeistspeicher laden.

    Hast du dir mal das weiter vorne verlinkte boost serialization angesehen? Das ist ziemlich simpel. Etwa so

    void save()
    {
      ofstream ofs(...);
      boost::archive::text_oarchive oa(ofs);
      oa << mein_daten_objekt;
    }
    void load()
    {
      ifstream ifs(...);
      boost::archive::text_iarchive ia(ifs);
      ia >> mein_daten_objekt;
    }
    


  • Naja wenn ich z.B. ein kleines Addressbuch schreibe ist so ein Tabellen-Datenbank System schon schöner. Benutze ich bei PHP-Scripten auch immer.

    Ich gehe nun davon aus, dass es nicht so einfach ist, sein kleines c++ Programm einfach mal eben so mit einer .db zu verbinden und die auszulesen?

    ➡ Hätte jetzt eigentlich gedacht ich binde einfach nur ne bestimmte .h ein, benutze eine Funktion(".../mydata.db") und kann die halt mit weiteren funktionen auswerten oder wie bei php direkt SQL Code durch Query oder so benutzen.

    Aber anscheinend ist es bei c++ komplizierter. Hab nach paar Beispiele gegoogelt und da kommen immer seitenlange Quelltexte raus. Schade.

    Bin ich auf den falschen Seiten gelandet oder ist es wirklich so?



  • Es ist schon etwas komplizierter als in PHP, aber seitenlanger Quelltext ist übertrieben. Vermutlich kann dir ein C++ Wrapper einiges an Schreibarbeit abnehmen, bei mir ist das Auslesen einer Tabelle aus einer SQLite3 Datenbank nur ein paar Zeilen lang (und wirklich nur ein paar... um die 10).

    Edit: Benutze den CppSQLite3 Wrapper



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ 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.



  • das Auslesen einer Tabelle aus einer SQLite3 Datenbank nur ein paar Zeilen lang (und wirklich nur ein paar... um die 10).

    Ob du so nett wärest und diesen "kleinen" Code mal zeigen könntest. Dann hab ich zumindest einen Anfang.



  • Sicher doch

    SQLite3DB   Database;
    Database.open( "c:/database.db" );
    
    SQLite3Query Query = Database.execQuery( "SELECT * FROM tbl_layout" );
    if( false == Query.eof() )
    {
       Layout->LayoutType              = static_cast<TLayout::LayoutType_t>( Query.getIntField( "type" ) );
       Layout->LayoutName              = Query.getStringField( "name" );
       Layout->MajorVersion            = Query.getIntField( "major_version" );
       Layout->MinorVersion            = Query.getIntField( "minor_version" );
    }
    

    Ist jetzt zwar völlig aus dem Kontext gerissen, aber dürfte etwas helfen. Der Schnipsel liest genau einen Datensatz aus einer Tabelle, wenn du mehrere Datensätze lesen willst musst du halt die if-Klausel durch eine while-Klausel ersetzen und nach Behandlung des aktuellen Datensatzes mit SQLite3Query::nextRow() zum nächsten Datensatz springen:

    SQLite3DB   Database;
    Database.open( "c:/database.db" );
    
    SQLite3Query Query = Database.execQuery( "SELECT * FROM tbl_layout" );
    while( false == Query.eof() )
    {
       // Datensatz behandeln
       ...
       Query.nextRow();
    }
    


  • DocShoe schrieb:

    Sicher doch

    SQLite3DB   Database;
    Database.open( "c:/database.db" );
    
    SQLite3Query Query = Database.execQuery( "SELECT * FROM tbl_layout" );
    if( false == Query.eof() )
    {
       Layout->LayoutType              = static_cast<TLayout::LayoutType_t>( Query.getIntField( "type" ) );
       Layout->LayoutName              = Query.getStringField( "name" );
       Layout->MajorVersion            = Query.getIntField( "major_version" );
       Layout->MinorVersion            = Query.getIntField( "minor_version" );
    }
    

    Ist jetzt zwar völlig aus dem Kontext gerissen, aber dürfte etwas helfen. Der Schnipsel liest genau einen Datensatz aus einer Tabelle, wenn du mehrere Datensätze lesen willst musst du halt die if-Klausel durch eine while-Klausel ersetzen und nach Behandlung des aktuellen Datensatzes mit SQLite3Query::nextRow() zum nächsten Datensatz springen:

    SQLite3DB   Database;
    Database.open( "c:/database.db" );
    
    SQLite3Query Query = Database.execQuery( "SELECT * FROM tbl_layout" );
    while( false == Query.eof() )
    {
       // Datensatz behandeln
       ...
       Query.nextRow();
    }
    

    Cool danke.
    Das sieht doch schonmal gut aus.

    Was für eine lib also .h muss ich fürs SQLDB einbinden?



  • Achja und hast du Database und layout gar nicht deklariert?



  • Klaudii schrieb:

    Achja und hast du Database und layout gar nicht deklariert?

    Oh, jetzt wo du´s sagst fällt´s mir auch auf. Und ich suche seit einigen Monaten den Fehler, warum das Projekt nicht kompiliert.



  • Klaudii: Jetzt mal ganz im Ernst: Lies gefälligst Doku und komm erst dann wieder. Niemand wird Dir hier alles vorkauen, sorry.


Anmelden zum Antworten