QT SQL Verbindung



  • Guten Abend : )

    ich möchte gerne ein tool schreiben das eine tabelle aus einem "Hyperfile Server" ausliest. (Hyperfile Server 😕 -> http://help.windev.com/?3044306)

    der server ist auf einem pc installiert der sich im netzwerk befindet.

    wenn ich mich mit dem server von meinem lappy aus(mit eine art client version dieses servers)verbinde dann muss ich stehts folgendes angeben:

    servername
    user
    password
    port

    database auswählen
    datei auswählen
    ein zweites passsword eingeben

    dann habe ich erst zugang zu der tabelle.

    bevor es zum code geht, möchte ich die damen und herren hier fragen ob es überhaupt geht so ein "Hyperfile Server" auszulesen? 😕

    ich habe bis jetzt nur programme die in "WINDEV" geschrieben wurden gesehen die sich mit dem "Hyperfile Server" verbinden.

    Freue mich auf jede info 🙂



  • Versuch es doch einfach mal. Das hier wäre ein kurzer Beispiel Code

    #include <QtGui>
    #include <QtSql>
    
    int main(int argc, char *argv[])
    {
      QCoreApplication app(argc, argv);
    
      QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
      db.setHostName("acidalia");
      db.setDatabaseName("customdb");
      db.setUserName("mojito");
      db.setPassword("J0a1m8");
      bool ok = db.open();
    
      if(ok)
      {
        QSqlQuery query("SELECT country FROM artist");
        while (query.next())
        {
          QString country = query.value(0).toString();
          qWarning() << country;
        }
      }
    
      return app.exec();
    }
    

    unterstützt werden folgende Treiber http://doc.qt.io/qt-5/sql-driver.html#supported-databases



  • Moin moin,

    danke für den hinweis. ich hatte bereits was ähnliches geschrieben:

    QSqlDatabase db =  QSqlDatabase::addDatabase("QSQLITE");
    
    db.setHostName("Server");
    db.setDatabaseName("data");
    db.setUserName("admin");
    db.setPassword("123456789");
    db.setPort(4900);
    
    if(db.open())
    
    {   
        QMessageBox::information(this,"SQL VERBINDUNG","connected");
    
    }
    
    else
    {
        QString error=db.lastError().text();
        QMessageBox::information(this,"SQL VERBINDUNG",error);
    
    }
    

    das komische dran ist ...das er mir immer sagt das ich verbunden bin 😕
    obwohl gar kein server im netz ist.

    wenn ich mir die ->

    QString error=db.lastError().text();
    

    trotzdem ausgeben lasse ist diese leer

    und mit QPSQL bekomme ich ne fehlermeldung
    "Driver not loaded Driver not loaded"



  • Mr.Nice Code schrieb:

    "Driver not loaded Driver not loaded"

    Das wird wohl auch der Fall sein. Sicher, dass der QSQLITE und nicht SQLITE heißt? Ich weiß es nicht auswendig, wills auch nicht raussuchen. Prüfs mal nach.
    Ansonsten musst du schauen, welche Treiber gebaut sind usw...



  • sqlite hat kein Server-Client-Prinzip, somit kannst du keine Verbindung über IP/Host und Port zu einem Server aufbauen. Es wurde wohl eine Memory-DB angelegt und deswegen war db.open() erfolgreich.



  • Mechanics schrieb:

    Mr.Nice Code schrieb:

    "Driver not loaded Driver not loaded"

    Das wird wohl auch der Fall sein. Sicher, dass der QSQLITE und nicht SQLITE heißt? Ich weiß es nicht auswendig, wills auch nicht raussuchen. Prüfs mal nach.
    Ansonsten musst du schauen, welche Treiber gebaut sind usw...

    jap ->

    QSqlDatabase db =  QSqlDatabase::addDatabase("QSQLITE");
    

    so stehts!der fehler bzw fehlermeldungen kommen ja nur wenn ich nen anderen treiber benutze

    magst du mir etwas genauer erklären was mit "welche treiber gebaut sind " meinst ?
    ich habe übrigens damit die exe auf einem anderem pc läuft folgenden ordner mit kopiert -> \ QT\5.5\msvc2013_64\"plugins\sqldrivers"

    Softwaremaker schrieb:

    sqlite hat kein Server-Client-Prinzip, somit kannst du keine Verbindung über IP/Host und Port zu einem Server aufbauen. Es wurde wohl eine Memory-DB angelegt und deswegen war db.open() erfolgreich.

    ja stimmt, mir ist aufgefallen das er eine datei anlegt mit dem dateinamen des database.

    "keine Verbindung über IP/Host und Port" 😕 oh je, was mache ich den nun ?



  • Mr.Nice Code schrieb:

    magst du mir etwas genauer erklären was mit "welche treiber gebaut sind " meinst ?
    ich habe übrigens damit die exe auf einem anderem pc läuft folgenden ordner mit kopiert -> \ QT\5.5\msvc2013_64\"plugins\sqldrivers"

    Hast ja im Grunde selber schon beantwortet. Man kann in Qt die Treiber entweder als Plugins bauen, oder statisch irgendwo dazulinken, oder halt gar nicht bauen 😉 Ich weiß ja nicht, wo du deine Qt her hast und ob du die selber baust. Wir bauen die selber und ohne Plugins, wird statisch in die QtNetwork gelinkt.
    Aber du hast ja offensichtlich Plugins.

    Wenn die Datei angelegt wurde, kann es doch nicht sein, dass der Treiber nicht gefunden wurde? Irgendwie versteh ich grad nicht ganz, was bei dir passiert.



  • Hallo : )

    entschuldigt falls ich verwirrung gestiftet habe.

    -ich "baue" meine treiber nicht selbst
    -ich habe codebeispiele ausprobiert und meiner situation angepasst und wenn ich alles andere außer "QSQLITE" eintrage bekomme ich fehlermeldungen.

    also habe ich den code mit "QSQLITE" ausgeführt.
    statt aber das er sich mit dem SQL server im netz verbindet, erstellt er eine lokale datenbank mit dem namen data (db.setDatabaseName("data"))

    das soll so nicht sein.

    Softwaremaker schrieb:
    sqlite hat kein Server-Client-Prinzip, somit kannst du keine Verbindung über IP/Host und Port zu einem Server aufbauen. Es wurde wohl eine Memory-DB angelegt und deswegen war db.open() erfolgreich.

    ich habe noch mal mit jemanden gesprochen der bereits für diesen SQL server programmiert und erfolgreich mit arebitet.

    er verbindet sich sehr wohl über das netz mit dem SQL server sagt aber er nutzt die sql odbc treiber 😮



  • Hallo,

    aber SQLite ist nun einmal eine lokale "embedded" Datenbank, damit kannst du keine externe Server-DB ansprechen.
    Und HFSQL ist nun einmal eine eigene Datenbank.
    So wie die Doku hergibt:
    ODBC driver for HFSQL Classic and for HFSQL Client/Server (Windows)
    OLE DB provider for HFSQL
    ist der Zugriff also nur per ODBC oder OLE von Windows aus möglich.

    Mittels QT bleibt also nur noch ODBC übrig, da OLE (so viel ich weiß) nicht direkt unterstützt wird.

    Ich hoffe, du verstehst nun, daß dein bisheriger Ansatz nicht funktionieren konnte 😉



  • Mr.Nice Code schrieb:

    ich habe noch mal mit jemanden gesprochen der bereits für diesen SQL server programmiert und erfolgreich mit arebitet.

    "SQL Server" ist aber nicht Sqlite.

    @Th69: wie kommst du jetzt auf HFSQL?



  • Mr.Nice Code schrieb:

    Guten Abend : )

    ich möchte gerne ein tool schreiben das eine tabelle aus einem "Hyperfile Server" ausliest. (Hyperfile Server 😕 -> http://help.windev.com/?3044306)

    Hyperfile Server -> HFSQL (neuer Name 😉



  • Ah, das Hyperfile Server im ersten Beitrag hab ich überlesen. Kenn ich nicht. Gut, das ist dann wieder eine dritte Datenbank.



  • Nabend

    @Th69

    jetzt ist einiges klar.

    ich versuchs mal mit den ODBC treiber. auch wenn ich noch eine fehlermeldung bekomme versuch ich erst mal diese zu beseitigen und dann schauen wir mal weiter 👍

    thx 🙂



  • ich komme iwie nicht weiter 😞

    habe zunächst erst mal folgendes an meinem code geändert:

    QSqlDatabase db =  QSqlDatabase::addDatabase("QODBC");
    

    beim ausführen kamm folgendes bei raus:

    [Microsoft][ODBC DRIVER MANAGER] Datenquellenname wurde nicht gefunden, und es wurde kein Standarttreiber angegeben QODBC3: Unable to connect

    -D:\Program Files\ QT\5.5\msvc2013_64\plugins\sqldrivers
    da sind keine .dll's mit dem namen odbc drin 👎

    habe nachgeschaut was sich da machen lässt.

    cd %QTDIR%\src\plugins\sqldrivers\odbc
    qmake odbc.pro
    nmake

    odbc.pro lässt sich aber niergends auffinden 👎

    im netz wird so was empfohlen:

    mysql-connector-odbc-5.3.6-win32.msi 😕

    oder

    start -> run -> ODBCAD32.EXE
    und dort eine verbindung bzw was einrichten. 😕

    bin ich bei eins von den beiden auf den richtigen weg 🙄 oder lieg ich ganz daneben ? 🙄



  • ich nutze das qt-mingw-paket und dort gibts qsqlodbc.dll, kann sein, dass bei qt-msvc das nicht mitkommt und kompliliert werden muss.

    Für das Datenbanksystem muss der passende ODBC-Treiber installiert sein, bei manchen wird er gleich mitinstalliert. Schau mal in Windows Systemsteuerung > Verwaltung > Datenquellen (ODBC).


Log in to reply