2 Abfragen über ODBC ab mssql-server



  • nee leider nicht, die daten haben so gesehen nicht viel miteinander zu tun



  • Dann würde ich die Daten in eine passende Containerstruktur packen, darüber iterieren und die Detailinformationen holen.



  • Klar kannst Du nicht 2 Abfragen über ein Resultset laufen lassen.
    Lösung wurde ja schon gesagt.
    Wenn Du aber Daten anhand einer Abfrage brauchst dann haben beide Tabellen etwas gemeinsam.



  • Natürlich kann man zwei Abfragen auf derselben Connection ausführen. Mach ich ständig. Sogar SELECT und INSERT auf derselben Connection sind kein Problem.

    Scheint wohl eher Datenbank-Abhängig zu sein. Ich mache jedenfalls nichts besonderes, das funktioniert (bei DB2) einfach so. Zweiter HSTMT auf derselben Connection und ab dafür.



  • Hat auch keiner etwas anderes behauptet.
    Man kann aber nicht 2 Abfragen im gleichen Resultset haben und auf beide zugreifen.
    Es ist sogar sezhr gut Abfragen über offene Connection zu machen. Siehe NET den dort ist es Standard mit einem Connectionpool.



  • Naja, doch. Die Fehlermeldung aus dem Threadstart besagt, dass die verwendete Datenbank nicht damit klarkommt, dass auf einer Connection ein weiterer HSTMT (also ein zweites Statement-Handle) angelegt wird.

    Und eben dieses Verhalten scheint Datenbank-Abhängig zu sein, weil es bei meiner DB eben ohne Probleme möglich ist mehrere Statements gleichzeitig auf derselben Connection auszuführen.

    Natürlch liefert jedes HSTMT auch ein getrenntes Resultset, keine Ahnung was das mit "2 Abfragen im selben Resultset" zu tun haben soll.



  • kann man denn jetzt ein 2. hstmt anlegen? bzw. wie?



  • Ich denke dass MARS im MSSQL-Server erst ab der 2005er Version vorhanden ist. Multiple active Resultsets = mehrere offene Statements per Connection gleichzeitig, mehrere offene Cursoren quasi. Wenn das nicht geht, auf Connection pooling hoffen und zwei Verbindungen öffnen oder eben die Daten in eine Containerstruktur kopieren und dann auf dergleichen Verbindung die Details nachholen. Andere Überlegung von Unix-Tom ist, dass die beiden Tabellen ja doch was gemeinsam haben muessen, also der Versuch die in der Programmiersprache gekodete Entscheidung, bei welcher Zeile, Detaildaten nachgeladen werden müssen, in das SQL-Stmt zu verlagern. Ich hoffe, dass der Monstersatz verständlich ist.



  • Es gibt bei ODBC mehr als 1 Möglichkeit Daten zu lesen.
    Welche verwendest Du?
    Welche Sprache?

    Ich habe zwar noch nie ODBC verwendet (zu langsam) aber ich kann mir vorstellen das es das gleich eist wie bei MySQL.
    Die Daten werden vom Server zum Clienten übertragen oder eben sie bleiben am Server und es wird immer nur ein Datensatz übertragen beim Fetch.



  • ich hab mache das ganze mit der MFC

    CDatabase open

    und mit einem CRecordset hol ich mir die daten ab:

    CRecordset rs;
        rs.m_pDatabase = &m_db;
        rs.Open(CRecordset::forwardOnly, sql, CRecordset::readOnly);
    
        while(!rs.IsEOF()) {
          ...      // <- hier gibts eine funktion, die weitere daten abruft, sprich einen weitere CRecordset, der dann aber die besagte Fehlermeldung verursacht
        }
    

    aber ich denke, das problem ist sicher nicht abhängig der programmiersprache, oder?

    leider ist es nicht möglich die daten nicht per SQL-statement zusammenziehen.
    es geht hier um einen datenkonverter, der Daten anhand des primärschlüssels aus anderen tabellen anhängen muss, die evtl. gar nicht bestehen.

    also wenn jemand noch ne bessere idee hat, als eine 2. connection anzulegen, um so auch beim mssql-server ein 2. resultset auswerten zu können, würde ich mich über diesen tipp sehr freuen.


Anmelden zum Antworten