Paul: SELECT Anweisung Access VBA

Hallo,

weiss jemand von euch wie man mittels ACCESS VBA eine SELECT Anweisung ausführt.

Mit dem Befehl DoCMD.RunSQL sqlstring ist leider keine SELECT Anweisung möglich.

Kann mir jemadand eventuell ein grobes Gerüst aufzeigen ?

Danke sehr.

  1. Hallo,

    weiss jemand von euch wie man mittels ACCESS VBA eine SELECT Anweisung ausführt.

    Du muß mit DAO.Connection.Execute bzw. ADODB.Connection.Execute arbeiten. Und dann gibt es einen Object: Recordset.

    ADODB ist vorzugsweise zu empfehlen, da DAO nicht mehr weiter entwickelt wird.

    Mit dem Befehl DoCMD.RunSQL sqlstring ist leider keine SELECT Anweisung möglich.

    SELECT liefert eine Datenmänge zurück. RunSQL ist hier fehl am platz (DoCMD kann man sowieso vergessen ;).

    Kann mir jemadand eventuell ein grobes Gerüst aufzeigen ?

    Die Beispiel-Db: Notdwind.mdb. Habe mir aber noch nie reigezogen :). Weiß nicht ob da auch VBA Code dabei ist.

    Gruß, Alex

    1. Danke dir Alex,

      kannst du mir eventuell ein kleines Gerüst anzeigen.

      Du muß mit DAO.Connection.Execute bzw. ADODB.Connection.Execute arbeiten. Und dann gibt es einen Object: Recordset.

      Danke Dir.

      1. Danke dir Alex,

        kannst du mir eventuell ein kleines Gerüst anzeigen.

        [code land=vb]
        Dim Cnn As ADODB.Connection
        '
        'Innerhalb der Access-Anwendung
        '
        Set Cnn = Application.CurrentDb.Connection
        '
        ' Ausserhalb Access
        '
        Set Cnn = CreateObject("ADODB.Connection")
        Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0, Data Source=PfadZurDatenbank;"

        Dim Rset As New ADODB.Recordset
        Set Rset = Cnn.Execute "SELECT..."

        Rset.MoveFirst

        Do While Not Rset.EOF
            Debug.Print Rset.Fields("Feld1").Value
            Rset.MoveNext
        Loop

        Rset.Close

        [/code]

        Nur als Entwurf. Im Prinzip wird es aber so gemacht. Sonst würde ich dir empfehlen ein wenig zu googeln. Es gibt es jede Menge Beispiele im Net zu finden.

        Gruß, Alex

        1. Ist das wirklich so kompliziert ?

          Kann ich nicht einfach ein sql definieren und anschliend die ergebnisse in einer tabelle ausgeben ?

          Och mann, geht es nicht einfacher --> LOVE MySQL  ;)

          Danke

          1. Hallo

            Ist das wirklich so kompliziert ?
            Och mann, geht es nicht einfacher --> LOVE MySQL  ;)

            ich sehe keinen Unterschied zum Zugriff per PHP auf MySQL:

            1. Verbindungsaufbau
            2. Absetzen der Query
            3. Durchlaufen der Ergebnismenge

            Wo bitte, möchtest Du es einfacher haben?

            1. Kannst Du ein SELECT-Statement absetzen, ohne Dich vorher mit der DB zu verbinden?
            2. Kannst Du ein SELECT-Statement absetzen, ohne ein SELECT-Statement abzusetzen?
            3. Kannst Du die Ergebnisse durchlaufen, ohne die Ergebnisse zu durchlaufen?

            Im übrigen kannte bereits MS Access 2.0 anno 1994 Views, die MySQL immerhin inzwischen in der Version 5.0 implementiert hat.

            Erstelle Deine Query im QBE-Editor (Query by example), sprich zieh' Dir die von Dir gewünschten Felder in die Ergebnismenge, klicke auf das Ausrufezeichen, fertig. Wenn Du die Abfrage dann speicherst (Access nennt sowas eine Auswahlabfrage), so kannst Du diese immer wieder ausführen. Gern auch per VBA.

            Freundliche Grüße

            Vinzenz

          2. Ist das wirklich so kompliziert ?

            made by M$.

            Kann ich nicht einfach ein sql definieren und anschliend die ergebnisse in einer tabelle ausgeben ?

            Nein, so einfach geht das nicht. Es gibt aber Tricks, wie man das machen kann.

            Och mann, geht es nicht einfacher --> LOVE MySQL  ;)

            MySQL ist nicht Access ;). Teoretisch kann man per ODBC (ADODB) auch auf MySQL als Backen zugreifen. Habe aber noch nie damit gearbeitet, da ich mit SQL-Server arbeite. Der Vorteil von SQL-Server ist T-SQL -> I Love T-SQL ;)

            Allmählig trenne ich mich von Access als Frontend. Ich kann Access als Frontend nicht leiden. Versuche mir gerade Perl/Tk beizubrigen...

            Gruß, Alex

          3. Okay,
            ich bin jetzt mit der Datenbank verbunden, kann aber die Daten nicht ausgeben ?

            Quellcode (WEB):

            Dim cn, rs

            Set cn = CreateObject("ADODB.Connection")
               Set rs = CreateObject("ADODB.Recordset")

            ' Connection zur Datenbank aufbauen
               cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=D:\Dokumente und Einstellungen\paulfranke\Desktop\Drucker _2_2007-04-18.mdb;"

            ' Recordset öffnen
               rs.Open "[SELECT * FROM Drucker_Typ]", _
                  cn, adOpenForwardOnly, adLockReadOnly, adCmdStoredProc

            ' Records anzeigen
               Do Until rs.EOF
                    Write rs.Fields.Value
                  rs.MoveNext
               Loop

            ' Recordset schließen
               rs.Close
               cn.Close
            End Sub

            1. Hallo Paul,

              ich bin jetzt mit der Datenbank verbunden, kann aber die Daten nicht ausgeben ?

              Was ist Deine Hostanwendung? D.h. welche Anwendung stellt Dir VBA zur
              Verfügung?

              [ ] MS Access
              [ ] Autodesk AutoCAD
              [ ] Corel Draw
              [ ] eine andere Anwendung (bitte angeben: .................)

              ' Records anzeigen
                 Do Until rs.EOF
                      Write rs.Fields.Value

              Wie wäre es, wenn durch die Auflistung der Spalten läufst?
              VBA bietet unter anderem solch komfortable Schleifenkonstrukte wie

              For Each
                      ' Tu was
                  Next

              rs.MoveNext
                 Loop

              rs.Close
                 cn.Close

              Es schadet in aller Regel nie, auch noch etwas aufzuräumen

              Set rs = Nothing
                  Set cn = Nothing

              Im übrigen gibt es komfortable Möglichkeiten, ein Steuerelement, z.B. ein
              DataGrid-Steuerelement an diese Datenquelle zu binden. Dann musst Du Dich
              nicht selbst um die Ausgabe der Datensätze kümmern, nicht um die Navigation
              innerhalb der Datensätze. Das ist eine feine Sache. Wenn Du konkreter wirst,
              welche Programmierumgebung Dir zur Verfügung steht, dann kann man Dir auch
              besser helfen.

              Freundliche Grüße

              Vinzenz

              1. Also ich arbeite mit MS Access 2003 und wollte einfach eine kleine Datenbank erstellen, in der bestimmte Drucker gespeichert werden.
                Diese wollte ich dann filtern, aber das ist ja so kompliziert.

                Danke

                1. Hallo

                  Also ich arbeite mit MS Access 2003 und wollte einfach eine kleine Datenbank erstellen, in der bestimmte Drucker gespeichert werden.

                  Sag das doch bitte gleich.

                  Diese wollte ich dann filtern, aber das ist ja so kompliziert.

                  Das ist überhaupt nicht kompliziert.

                  1. Erstelle einen View für Deine Drucker (eine sogenannte Auswahlabfrage)
                     Nutze dazu den von mir erwähnten Abfrageeditor. Dieser ist extrem
                     komfortabel.

                  2. Wähle diesen View aus und klicke auf die Schaltfläche "Autoformular"

                  Access bietet jede Menge Filtermöglichkeiten. Eine einfache wäre es, den
                  View mit einem Parameter zu versehen, dann wirst Du beim Aufrufen des Formulars um eine entsprechende Eingabe gebeten. Ansonsten gibt es auch auswahlbasierte Filter: Da wählst Du einen Wert in der Tabelle aus, klickst auf das Filtersymbol und schon erscheinen nur noch Datensätze, die diesen Wert in der Spalte aufweisen.

                  MS Access ist eine enorm mächtige Entwicklungsumgebung für Desktopdatenbanken, es lassen sich (wenn man will auch über Assistenten geführt) bequeme Formulare und Berichte erstellen, die an Datenquellen, z.B. Tabellen, Views, gern aber auch an dynamisch erstellte Abfragen binden lassen. Du selbst musst Dir keine Gedanken mehr über Ausgabe in Schleifen oder ähnliches machen, das erledigen die entsprechenden Formulare, Berichte mit ihren Steuerelementen für Dich.

                  Wenn man Access kennt, dann fühlt man von der Hand-zu-Fuß-Methode von PHP/MySQL, wie man es von diversen Tutorials her kennt, ins Mittelalter zurückversetzt.

                  Natürlich ist es in dieser Vielfalt nicht ganz einfach, am Anfang durchzusteigen und die Möglichkeiten zu erkennen. Du kommst um solide Datenbankgrundlagen genausowenig herum wie um das Studium von Anleitungen und Hilfen, wenn Du wirklich etwas größeres realisieren willst.

                  Die Unterlagen aus dem Herdt-Verlag, http://www.herdt.de, sind zwar nicht gerade billig, zum Einstieg in die entsprechende Materie sind sie jedoch in aller Regel bestens geeignet. Und dann gibt es natürlich noch jede Menge Bücher aus diversen Verlagen, bei Microsoft Produkten habe ich mit Büchern von MicrosoftPress gute Erfahrungen gemacht (außer bei Büchern für absolute Einsteiger ...)

                  Freundliche Grüße

                  Vinzenz