Announcement

Collapse
No announcement yet.

TADODataSet mit einer Unterabfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TADODataSet mit einer Unterabfrage

    Hallo,

    ich stelle mein Projekt von BDE auf ADO um. Delphi7, MSSQL-2000 SP2. Untenstehendes SQL funktioniert mit TQuery korrekt, stürzt aber mit TADODataSet mit folgender Fehlermeldung ab: EOleException: Für diesen Vorgang ist nicht genügend Speicher verfügbar.

    select feld1, Anzahl = (select count(*) from tab2 where feld3 = feld1) from tab1
    where Datum = atum

    Ohne Unterabfrage funktioniert alles und ohne Bedingung "where Datum = atum" ebenfalls.
    Falls "where Datum = atum" durch "where Datum = '01.01.2002'" ersetzt wird ist auch alles ok.

    Vielen Dank im Voraus!

    Gruß

  • #2
    Vielleicht verträgt er die doppelte Verwendung von Datum nicht? Ist nur so eine Idee, es kann auch was anderes sein...<p>
    Ist ja vielleicht eine Dumme Frage, aber der Parameter Datum wurde auch befüllt
    Schöne Grüße, Mario

    Comment


    • #3
      Ich habe schon mit unterschiedlichen Parameternamen versucht. Der Parameter wird mit:
      qry1.Parameters.ParamByName('DATUM').Value := '01.01.2002';
      gefüllt

      Comment


      • #4
        Hallo,

        hinter TADODataSet steckt nur eine VCL-Wrapperkomponente für die nativen ADO-Objekt (COM-Objekte), daher muss sich ADO Express an die von Microsoft aufgestellten Spielregeln halten. Was passiert, wenn die folgende Reihenfolge eingehalten wird: <br>
        1. TADODataSet mit TADOConnection verbinden <br>
        2. SQL-Test fest im Objektinspektor eintragen <br>
        3. Eigenschaft <b>Parameters</b> im Objektinspektor anklicken - erst hier initialisiert ADO Express die Parameter-Kollektion des dahinterliegenden nativen Command-Objekts von ADO. <br>
        4. Wert an den Parameter übergeben, wenn Schritt 3 erfolgreich war <br>
        5. Eigenschaft <b>Active</b> auf True setzen

        P.S: Da mit dem MS SQL Server gearbeitet wird, könnte man auch direkt in der Datenbank einen VIEW anlegen, so dass der Client nur eine einfaches SELECT * FROM View_Name WHERE... sieht

        Comment


        • #5
          Hallo,

          ich habe die beschriebene Reihenfolge versucht. Bei 2 und oder 3 kommt es zu Zugriffsverletzung bei Adresse .... in Modul msado15.dll direkt in Delphi 7. Versuche ich das ganze mit TADOQuery statt TADODataSet ist alles ok.
          Eigentlich wollte ich nur TADODataSet und TADOCommand verwenden.

          PS: Ist es sinnvoll für die Parameter den DataTyp z.B. ftDate vor der Übergabe der Parameterwerte zu setzen

          Comment


          • #6
            Hallo,

            &gt;Bei 2 und oder 3 kommt es zu Zugriffsverletzung bei Adresse .... in Modul msado15.dll..

            dahinter steckt das native Recordset-Objekt von ADO, also kommt ADO selbst mit der verschachtelten SELECT-Abfrage nicht klar, wenn ein Parameter als Platzhalter genutzt wird. Ich würde dann auf den VIEW ausweichen, wenn auch das explizite Setzen des Datentyps ftData für den Parameter nichts bewirkt

            Comment


            • #7
              Hallo,

              ich habe eine Lösung gefunden, und zwar muss das Unterselect in doppelte Klammern gesetzt werden dann funktioniert es

              Comment

              Working...
              X