EINFACHSTENS c++ und SQL



  • Hey!

    Wie kann ich am einfachsten meine MySQL Datenbank mit C++ auslesen?
    MySQL++ hab ich schon probiert, da fehlen mir tausende header kA und es soll auch ned so gut sein.
    SQLite ist in C.

    Habe C++ Express.

    Wie kann ich am schnellsten, einfachsten und unkompliziertesten meine Datenbank ansprechen?

    MfG



  • Wenn du das ganze in C++ nutzen willst wäre die MySQL++ dennoch sehr gut geignet. Ansonsten hast du noch die möglichkeit die MySQL C Api direkt zu nutzen. Natürlich kannst du dich auch per ODBC zur Datenbank konnekten. Dies schränkt aber den Funktionsumfang den du nutzen kannst ein wenig ein.



  • MySQL++ funktioniert bei mir nicht, da fehlen mir tausende Dateien.

    Von C halte ich nix.

    ODBC? Was ist das? Wie verwende ich das mit C++ Express?

    Ich muss lediglich alle 3-5 Sekunden eine Tabelle mit etwa 1000 IP's auslesen.
    Also 1000 Zeilen etwa. (Nur eine Spalte)

    MfG



  • Hello schrieb:

    ODBC? Was ist das?
    MfG

    http://de.wikipedia.org/wiki/ODBC
    Einen Link für ODBC hatte ich mal, aber Leider weiß ich nicht wo dieser abgeblieben ist. Such mal bei www.google.de
    Ich kann dir jetzt aber schon sagen, das du mehr Schreibaufwand hast, wie wenn du einen Wrapper nutzt.
    Kleines Beispiel:

    #include <afxwin.h>
    #include <iostream.h>
    #include "sql.h"
    #include "sqlext.h"
    #include "sqltypes.h"
    
    void main()
    {
    	char UserID[CHAR_MAX];
    	char UserName[CHAR_MAX];
    	long length;
    	long length2;
    
    	// Umgebungsnummer für ODBC Treiber reservieren und initialisieren
    	SQLHENV henv;
    	SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); // Umgebungsnummer reservieren
    	SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER); // attribute setzen
    
    	// Verbindungsnummer holen
    	SQLHDBC hdbc;
    	SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
    
    	// Verbinden
    	SQLConnect(hdbc,(SQLCHAR*)"Visual C++ Bibel",SQL_NTS,(SQLCHAR*)"",SQL_NTS,(SQLCHAR*)"",SQL_NTS);
    
    	// Statmentnummer holen
    	SQLHSTMT hstmt;
    	SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
    
    	// Ausführen
    	//SQLExecDirect(hstmt,(SQLCHAR*)"INSERT INTO UserMaster VALUES('110','Günni',0)",SQL_NTS);
    	SQLExecDirect(hstmt,(SQLCHAR*)"SELECT * FROM UserMaster ORDER BY sUserID",SQL_NTS);
    
    	SQLBindCol(hstmt,1,SQL_C_CHAR,UserID,CHAR_MAX,&length);
    	SQLBindCol(hstmt,2,SQL_C_CHAR,UserName,CHAR_MAX,&length2);
    
    	// Zeilenweise auslesen
    	while(SQLFetch(hstmt) == SQL_SUCCESS)
    		cout << UserID << " " << UserName << endl;
    
    	// Disconnecten
    	SQLDisconnect(hdbc);
    
    	// Handles freigeben
    	SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
    	SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
    	SQLFreeHandle(SQL_HANDLE_ENV,henv);
    }
    


  • Viel zu kompliziert. Soll so einfach sein wie mit PHP.



  • Dann kannst du dir nur eine gute C++ Library für MySQL suchen.



  • Hello schrieb:

    MySQL++ funktioniert bei mir nicht, da fehlen mir tausende Dateien.

    Von C halte ich nix.

    ODBC? Was ist das? Wie verwende ich das mit C++ Express?

    Ich muss lediglich alle 3-5 Sekunden eine Tabelle mit etwa 1000 IP's auslesen.
    Also 1000 Zeilen etwa. (Nur eine Spalte)

    MfG

    Da würde ich einfach mal tausende Dateien installieren 😃

    Nein im Ernst - ich glaube MySQL++ ist das, was Du suchst. Wenn Du es richtig eingerichtest hast, dann sollte es möglich sein, es zum laufen zu bringen. Wie wäre es, wenn Du einfach mal eine Fehlermeldung postest. Dann können wir mal schauen, ob wir Dir helfen können.

    Tntnet



  • Was muss man denn downloaden? Den library source?

    Was muss man noch installiert haben? Habe gehört, dass man MySQL Server installiert haben muss für MySQL++.

    Mir fehlten dann mysql.h, dann mysql_versions.h, mysql_time.h usw...



  • Hilft mir bitte jemand weiter.

    Wie installiere ich MySQL++ genau?

    Weiß nicht, warum mir so viele header fehlen...



  • Dazu müsstest du uns mal die Fehlermeldungen posten



  • Du mußt deinem Compiler einfach das Include-Verzeichnis ("dort wo die Header stehen") sowie dem Linker dann den Pfad auf die Libraries geben.





  • So, gleich bei SOCI wieder mein Problem wie bei allen anderen:

    mysql.h nicht in soci-mysql.h gefunden.

    Da muss ich doch ganz bestimmt noch etwas anderes installiert haben außer nur SOCI!





  • Hello schrieb:

    So, gleich bei SOCI wieder mein Problem wie bei allen anderen:

    mysql.h nicht in soci-mysql.h gefunden.

    Da muss ich doch ganz bestimmt noch etwas anderes installiert haben außer nur SOCI!

    Eh, also zaubern kann niemand, oder? Zitat aus der SOCI-Doku:

    For this, the native libraries provided by each database server should be visible to the compiler and linker as well

    Natürlich muß die native Lib von MySQL (database server, aha!) dem Compiler und Linker bekannt sein. Warum soll SOCI für jede Datenbank die Libs und Headers liefern? http://soci.sourceforge.net/doc/structure.html

    Übrigens hat dir das auch Th weiter oben schon gesagt:

    th schrieb:

    Du mußt deinem Compiler einfach das Include-Verzeichnis ("dort wo die Header stehen") sowie dem Linker dann den Pfad auf die Libraries geben.

    So, wenn du schlau wärst, hättest du uns schon längst gesagt, welches OS und welchen Compiler oder IDE du nutzt, damit wir dir sagen können, wo du was einzustellen hast. Denn das Prinzip ist bei jeder Lib gleich: Lib runter laden, builden und dem Compiler und Linker bekannt machen. Ich wette, du hast bisher nur die Libs runter geladen.

    Nur hellsehen können wir leider auch nicht.



  • Einstellen schaffe ich, nur was 🙂

    Danke, werde mich bemühen.



  • Muss dann eigentlich jeder noch zusätzlich was installieren, um das Programm dann zu nutzen?

    Native libs? Habe echt keinen Plan... Auf meinem PC läuft MySQL (noch) nicht.



  • 1>------ Build started: Project: SlowBob, Configuration: Release Win32 ------
    1>Compiling...
    1>SlowBob.cpp
    1>Linking...
    1>SlowBob.obj : error LNK2001: unresolved external symbol "struct SOCI::MySQLBackEndFactory const SOCI::mysql" (?mysql@SOCI@@3UMySQLBackEndFactory@1@B)
    1>SlowBob.obj : error LNK2001: unresolved external symbol "public: __thiscall SOCI::Session::~Session(void)" (??1Session@SOCI@@QAE@XZ)
    1>SlowBob.obj : error LNK2001: unresolved external symbol "public: __thiscall SOCI::Session::Session(struct SOCI::BackEndFactory const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Session@SOCI@@QAE@ABUBackEndFactory@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    1>SlowBob.obj : error LNK2001: unresolved external symbol "public: __thiscall SOCI::details::OnceTempType::~OnceTempType(void)" (??1OnceTempType@details@SOCI@@QAE@XZ)
    1>SlowBob.obj : error LNK2001: unresolved external symbol "public: __thiscall SOCI::details::OnceTempType::OnceTempType(class SOCI::Session &)" (??0OnceTempType@details@SOCI@@QAE@AAVSession@2@@Z)
    1>SlowBob.obj : error LNK2001: unresolved external symbol "public: __thiscall SOCI::details::OnceTempType::OnceTempType(class SOCI::details::OnceTempType const &)" (??0OnceTempType@details@SOCI@@QAE@ABV012@@Z)
    1>E:\C++\SlowBob\Release\SlowBob.exe : fatal error LNK1120: 6 unresolved externals
    1>Build log was saved at "file://e:\C++\SlowBob\SlowBob\Release\BuildLog.htm"
    1>SlowBob - 7 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    


  • VC++ Directories

    Library files:
    E:\MYSQL\mysql-5.1.11-beta-win32\lib

    Header files:
    E:\MYSQL\mysql-5.1.11-beta-win32\include
    E:\SOCI\soci-2.1.0\core
    E:\SOCI\soci-2.1.0\backends
    E:\SOCI\soci-2.1.0\backends\mysql



  • hy @ll,
    bei mir sind auch Probleme mit MySQL 5 und Turbo C++ dbExplorer.
    Ich bekomme zwar eine Verbindung zu einer bestehenden Datenbank aber die Tabellen sind nicht sichtbar, habe im SQL Fenster von Daten-Explorer mal eine Abfrage probiert, da kommt dann bei: SELECT * FROM kunden;
    eine MsgBox mit der Meldung

    Data Explorer

    Ausführung misslungen. Commands out of sync; you can't run this command now

    Bei MySQL Adminstrator hab ich jetzt mit denselben Ergebnis
    Support: InnoDB, BDB und Name Pipes aktiv gestellt.

    Zuvor hab ich noch die Borland Objekt Methoden ausprobiert wie

    SQLQuery1->Open(); /* Hier sollte die SQL Anweisung von oben ausgeführt

    wo dann die Fehlermeldung
    Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00C4B960 in Modul 'dbxmys30.dll'. Lesen von Adresse 00000006'. Prozess SQL_DatabaseTestArea.exe (408)
    kam.

    Also irgendein Detail behindert, daß man auf die Tabellen der Datenbank, mit der man ja schon verbunden ist ( hab ich auch schon in MySQL Administrator nachgeschaut ob die Verbindung da ist )
    zugreifen kann.


Log in to reply