Visual Studio mit Qt Plugin



  • Hallo alle zusammen,

    Programmiersprache C++ mit Qt

    Ich versuche erfasste Messdaten in einem Access Datenbank zu schreiben.
    Die daten kann ich doch erfassen und in die Access Datenbank auch schreiben.

    Folgende problem habe ich:

    1. Wie kann ich auf die Access datenbank letzte Primary Key erfassen?
      Folgende Beispiel:
      Tabelle1 hat 20 Datensätze:
      Letzte Primary Key lässt ssich durch dieses Befehl rausfinden:
      "SELECT max(Id) FROM Tabelle1"

    Auf die Access Ebene, lässt sich das Befehl problemlos ausführen.
    Nun auf die C++ Seite bzw. QT + C++ habe ich Problem.
    Ich habe eine funktion geschrieben, die mir eigentlich letzte Primary Key ausgibt, aber es klappt nicht und bekomme keine Fehlermeldung:

    int SQLConnector::getMaxPrimaryKey()
    {
            QSqlQuery query;
            int returValue;
    
            query.exec("SELECT max(Id) FROM Tabelle1");
            if(query.next())
            {
                    returValue = query.value(0).toInt();
            }
            return returValue;
    }
    

    Was mache ich denn falsch? 😮



  • Was hat die Frage mit C++ zu tun?

    Ist die Defaultdatenbank geöffnet?
    Du prüfst das Ergebnis von exec nicht. Wird die Abfrage überhaupt ausgeführt? Was sagt lastError?



  • manni66 schrieb:

    Was hat die Frage mit C++ zu tun?

    Das ist doch C++

    manni66 schrieb:

    Ist die Defaultdatenbank geöffnet?
    Ja es ist geöffnet.

    manni66 schrieb:

    Du prüfst das Ergebnis von exec nicht. Wird die Abfrage überhaupt ausgeführt? Was sagt lastError?

    Ausgeführt ist es nicht und ich bekomme keine Fehlermeldung



  • MarcelGast schrieb:

    manni66 schrieb:

    Was hat die Frage mit C++ zu tun?

    Das ist doch C++

    Nein, Qt API oder Access.

    Du prüfst das Ergebnis von exec nicht. Wird die Abfrage überhaupt ausgeführt? Was sagt lastError?

    Ausgeführt ist es nicht und ich bekomme keine Fehlermeldung[/quote]
    Woher weisst du das? Woher sollte die Meldung auch kommen?



  • Ich kenn´ mich mit Qt nicht aus, aber ich vermute, dass deinem Query Objekt einfach der Kontext fehlt. Woher weiß QSqlQuery denn, auf welche db es zugreifen soll?



  • @DocShoe
    Tjoah, das sollte so sein. Ist aber leider nicht...

    http://qt-project.org/doc/qt-4.8/qsqlquery.html#QSqlQuery-2

    If db is not specified, or is invalid, the application's default database is used. If query is not an empty string, it will be executed.

    Zum zuwirehrn.



  • Mein Fehler:
    so ist richtig:

    int SQLConnector::getMaxPrimaryKey()
    {
            QSqlQuery query;
            int returValue;
    
            query.exec("SELECT max(Id) FROM Tabelle1");
            if(query.next())
            {
                    returValue = query.value(0).toInt();
            }
            return returValue+1;// +1 wurde vergessen
    }
    

    Es wurde nur bei einen gültigen Id eingefügt

    Danke trotzdem

    Ich habe einen andere Frage :
    Folgende Anwendung habe ich:

    class MainWindow : public QMainWindow
    {
    	Q_OBJECT
    
    	.....
    public:
     void foo(bool);
    } 
    
    class SQLConnection
    {
    ....
    public:
    void foo1(bool);
    }
    

    Ich möchte die Funktion foo() in foo1() aufrufen wie tue ich das ?



  • MarcelGast schrieb:

    Ich habe einen andere Frage :
    Folgende Anwendung habe ich:

    class MainWindow : public QMainWindow
    {
    	Q_OBJECT
    	
    	.....
    public:
     void foo(bool);
    } 
    
    class SQLConnection
    {
    ....
    public:
    void foo1(bool);
    }
    

    Ich möchte die Funktion foo() in foo1() aufrufen wie tue ich das ?

    Wenn du schon diese Grundlagen nicht kennst, würde ich an deiner Stelle erst mal C++ lernen, bevor du mit Qt anfängst.

    Die Deklarationen von foo1 und foo enthalten keine Parameternamen..

    void foo1(bool test) {
        foo(test)
    }
    

    Du kannst auch in Methoden andere einfach aufrufen.



  • quizzmaster schrieb:

    Wenn du schon diese Grundlagen nicht kennst, würde ich an deiner Stelle erst mal C++ lernen, bevor du mit Qt anfängst.

    Die Deklarationen von foo1 und foo enthalten keine Parameternamen..

    void foo1(bool test) {
        foo(test)
    }
    

    Du kannst auch in Methoden andere einfach aufrufen.

    Danke für den Hinweis
    Wie man eine methode von Klasse A in Klasse B aufruft weiss ich.
    Erstmal die Klasse muss instanziert oder geerbt werden damit es auf public Methoden zugegeriffen werden

    class A{
    ... 
    bool foo(bool);
    };
    

    Jetzt die classe B

    class B{
    
    public:
    bool foo1(bool);
    private:
    A *a;
    
    };
    
    // implementiereung von foo1(bool )
    bool B:foo1(test)
    {
    	a->foo(test);
    	...
    }
    


  • Edit: Doch nicht.



  • Warum nit?


Anmelden zum Antworten