none
SQL Statement auslesen

    Frage

  • Hallo Zusammen,

    ich habe eine Access adp mit SQL Backend.

    Gibt es eine Möglichkeit das SQL Statement einer hier enthaltenen Sicht in VBA einzulesen.

    Eigentlich würde das ja so gehen:

    strStatement = CurrentDb.QueryDefs("MeineSicht").SQL

    Aber in der adp scheint das nicht zu gehen. (Objektvariable oder With Block nicht festgelegt.)

    Mache ich was falsch? Oder gibt es eine andere Möglichkeit?

    Innerhalb von SQL kann ich das Statement ja mit

    exec sp_helptext 'MeineSicht'

    auslesen. Aber da wüsste ich jetzt nicht, wie ich das Ergebnis in eine VBA Variable bekomme.

    Kann mir jemand helfen?

    Danke und viele Grüße

    Patrick

    Mittwoch, 8. Januar 2014 17:34

Antworten

  • Hallo Patrick,

    in VBA kannst Du ja auch ADODB.Connection und ADODB.Recordset verwenden. Ich würde damit dann den Befehl EXEC sp_helptext 'DeineSicht' gegen die Datenbank absetzen und die Rückgabe aus dem Recordset auslesen.

    Die Grundlagen für die Verwendung von ADODB in VBA kannst Du bspw. hier nachlesen:

      http://www.functionx.com/vbaccess/Lesson26.htm


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 8. Januar 2014 17:48
    Moderator
  • Hallo Patrick,

    QueryDefs gibt es nur bei DAO, Access Projekte verwenden jedoch ADODB. Über die CurrentProject.Connection Eigenschaft kannst Du SQL Anweisungen ausführen und als RecordSet zurückliefern.

    Die Sichtdefinition erhältst Du (ab SQL Server 2005) über die Funktion OBJECT_DEFINITION:

    Sub GetViewText()
        Dim rst As New ADODB.Recordset
        ' Northwind
        Set rst = CurrentProject.Connection.Execute("SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.Products Above Average Price', 'V'))")
        Debug.Print (rst(0))
        rst.Close
    End Sub
    

    Wenn noch SQL Server 2000, wäre anstatt dessen "EXEC sp_helptext 'dbo.Products Above Average Price'" zu verwenden.

    Solltest Du der Patrick aus der Frage Sicht duplizieren sein, so wäre es bei einer ADP einfacher, die Sicht gleich so zu gestalten, dass sie für beide / alle Zwecke taugt. Denn in einer ADP kann man eine Sicht jederzeit um weitere Kriterien ergänzen und als Datenquelle uam. verwenden. Verwende einfach SELECT * FROM SichtName WHERE ...

    Gruß Elmar

    Mittwoch, 8. Januar 2014 19:55

Alle Antworten

  • Hallo Patrick,

    in VBA kannst Du ja auch ADODB.Connection und ADODB.Recordset verwenden. Ich würde damit dann den Befehl EXEC sp_helptext 'DeineSicht' gegen die Datenbank absetzen und die Rückgabe aus dem Recordset auslesen.

    Die Grundlagen für die Verwendung von ADODB in VBA kannst Du bspw. hier nachlesen:

      http://www.functionx.com/vbaccess/Lesson26.htm


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 8. Januar 2014 17:48
    Moderator
  • Hallo Patrick,

    QueryDefs gibt es nur bei DAO, Access Projekte verwenden jedoch ADODB. Über die CurrentProject.Connection Eigenschaft kannst Du SQL Anweisungen ausführen und als RecordSet zurückliefern.

    Die Sichtdefinition erhältst Du (ab SQL Server 2005) über die Funktion OBJECT_DEFINITION:

    Sub GetViewText()
        Dim rst As New ADODB.Recordset
        ' Northwind
        Set rst = CurrentProject.Connection.Execute("SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.Products Above Average Price', 'V'))")
        Debug.Print (rst(0))
        rst.Close
    End Sub
    

    Wenn noch SQL Server 2000, wäre anstatt dessen "EXEC sp_helptext 'dbo.Products Above Average Price'" zu verwenden.

    Solltest Du der Patrick aus der Frage Sicht duplizieren sein, so wäre es bei einer ADP einfacher, die Sicht gleich so zu gestalten, dass sie für beide / alle Zwecke taugt. Denn in einer ADP kann man eine Sicht jederzeit um weitere Kriterien ergänzen und als Datenquelle uam. verwenden. Verwende einfach SELECT * FROM SichtName WHERE ...

    Gruß Elmar

    Mittwoch, 8. Januar 2014 19:55