SQL Befehle direkt an DB senden <= Problem gelöst



  • also ich hab das mal probiert, aber nicht über DaoDatabase sondern so:

    CString SqlCmd1 = "Create table #tmp_Auswertung (Zaehler int, MotorNummer char (10)) Go"; 
    	CString SqlCmd2 = "INSERT INTO #Tmp_Auswertung ( Zaehler, MotorNummer) 
    SELECT Max(dbo.TRWErgebnisse.Zaehler) AS MaxOfZaehler, dbo.TRWErgebnisse.MotorNummer 
    FROM dbo.TRWErgebnisse GROUP BY dbo.TRWErgebnisse.MotorNummer Go";
    	CString SqlCmd3 = "SELECT Count (*) AS ANZAHL, dbo.TRWErgebnisse.MotorGut 
    FROM dbo.#tmp_Auswertung 
    INNER JOIN dbo.TRWErgebnisse ON dbo.#tmp_Auswertung.Zaehler = dbo.TRWErgebnisse.Zaehler 
    AND dbo.#tmp_Auswertung.Motornummer = dbo.TRWErgebnisse.MotorNummer 
    GROUP BY dbo.TRWErgebnisse.MotorGut";
    	CString SqlCmd4 = "Drop table #Tmp_Auswertung";
    
    	db.Open( _T("ACR"),FALSE,true,_T("ODBC;UID=anyusr;PWD=anyusr"),false);
    
    	CRecordset Set(&db);
    	db.ExecuteSQL(SqlCmd1);
    	db.ExecuteSQL(SqlCmd2);
    	Set.Open(CRecordset::dynaset | CRecordset::forwardOnly, SqlCmd3);
    	if(!Set.IsEOF())
    	{
    		Set.GetFieldValue("ANZAHL", strAnzahl);
    	}
    		db.ExecuteSQL(SqlCmd4);
    	Set.Close();
    	return strAnzahl;
    }
    

    Wenn ich das aber ausführe bekomme ich nen Fehler und zwar:

    ---------------------------
    ACRSQL
    ---------------------------
    Zeile 1: Falsche Syntax in der Nähe von 'Go'.

    ---------------------------
    OK
    ---------------------------

    Kann mir einer helfen? 😞
    Ist echt wichtig!



  • Was passiert, wenn du die "Go" wegläßt? 😕

    PS: Mach mal nen Zeilenumbruch, der Beitrag ist ein bisserl breit. 😉



  • 😕 😕 Wenn ich Go weglasse dann sagt er

    ---------------------------
    ACRSQL
    ---------------------------
    Die Verbindung ist mit Ergebnissen von einem anderen hstmt belegt.

    ---------------------------
    OK
    ---------------------------

    was heißt das?? 😮



  • hab zwar immer noch keine Ahnung was das bedeutet, aber ich hab durch probieren herausgefunden, dass wenn ich einen Command weglasse, dann geht es irgendwie! Aber ich brauch alle 4! Was geht da schief?



  • Welchen musst du denn weglassen? 😕



  • ist völlig egal, aber das einzigste was ich weglassen kann, dass er mir mein richtiges ergebnis liefert ist natürlich das drop table. wenn ich aber das select count (*) ... weglasse ginge es auch, nur bekomm ich da dann natürlich kein ergebnis zurück!



  • Was passiert, wenn du die beiden Zeilen tauschst?

    db.ExecuteSQL(SqlCmd4);
        Set.Close();
    

    🙂



  • WOW deine Idee klappt! Und jetzt halt dich fest, ich hab auch die Erklärung dazu! Wenn man sich ein bischen Gedanken macht und liest.

    Diese Fehlermeldung kommt immer dann wenn eine Transaktion ausgeführt wird, die nicht mit einem Commit abgeschlossen wird und die nächste über den selben Kanal läuft. SQL Server ist nich richtig in der Lage zwei Transaktionen über denselben Kanal zu steuern.

    Eine weitere Lösung wäre ein Commit zwischen rein zu sennden!
    👍



  • Na super. 🙂

    Ist irgendwie logisch, wenn man es weiß. 😃



  • wie eigentlich mit jedem Problem! 😃
    Aber gell hättest nicht gedacht dass ich hier so ne kompetente Lösung parat hab. 😉
    Wenn ich ehrlich bin ich hätte es auch nicht gedacht. 😃


Anmelden zum Antworten