Mit VB auf Access-DB zugreifen ?

ariesdave

Mitglied
Hallo,

kann mir jemand grob (vom Ablauf her) schildern, wie ich mit VB auf vorhandene Tabellen einer Access Datenbank zugreife?

Ich möchte ein kleines Programm schreiben, das die Benutzung dieser Tabellen ermöglicht (hineinschreiben und auslesen von Daten).

Ferner interessiert mich in diesem Zusammenhang die Verwendung der Steuerelemente 'DBList' und 'DBCombo', da diese ja speziell für die Arbeit mit Datenbanken zu sein scheinen.

Dankeschön.
-dave
 
Ich geh einfach mal davon aus, dass Du VB 6.0 benutzt, wenn nicht, dann sag mir das bitte nochmal. :)

Generell brauchst Du dafür ein Objekt für die Verbindung zur Datenbank. Dazu müsstest Du erst mal einen Verweis auf die "Microsoft ActiveX Data Objects 2.x" setzen, um auf die entsprechenden Objekte zugreifen zu können.
Weil das Verbinden mit der Datenbank in der Regel einige Zeit in Anspruch nimmt, ist es sinnvoll, das Verbindungsobjekt global für das ganze Projekt zu deklarieren. So kannst Du die Verbindung geöffnet lassen, bis die Anwendung wieder beendet wird. Also legst Du zunächst mal ein neues Modul in Deinem Projekt an, in dem Du folgenden Code schreibst:
Code:
Public conn As ADODB.Connection

Public Sub Main()
    'Verbindungsobjekt erzeugen und die Verbindung zur Datenbank aufbauen
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DateinameDerDatenbank
    'Restlicher Code (Formularaufrufe, etc...)
End Sub
In den Projektoptionen stellst Du das Startobjekt auf "Sub Main" ein. Dabei ist es aber relativ wichtig, dass Du in der Prozedur oben das Hauptformular aufrufst, weil das nicht automatisch passiert.

Mit Recordset-Objekten kannst Du dann über die hergestellte Verbindung zur Datenbank die Daten abfragen. Dazu brauchst Du wieder ein Objekt:
Code:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "SELECT * FROM tabelle", conn, adOpenStatic, adLockPessimistic
If rs.RecordCount > 0 Then
    rs.MoveFirst
    Do While Not rs.EOF
        MsgBox CStr(rs.Fields("feld").Value)
        rs.MoveNext
    Loop
Else
    MsgBox "Keine Daten gefunden!", vbExclamation, "Achtung"
End If
rs.Close
Logischerweise musst Du die Tabellen- und Feldnamen ändern, das ist nur ein Beispiel. Mit dem Recordset-Objekt hast Du also eine Art Abbild von dem Ergebnis der Abfrage.
In dem Beispiel geht es aber erst mal nur um das Lesen von Datenbankinhalten.
Wenn Du in die Tabelle schreiben willst, kannst Du die Werte wie an eine normale Variable übergeben:
Code:
rs.Fields("feldname").Value = Wert
Wichtig beim Schreiben ist aber, dass Du hinterher mit der Update-Methode die Änderungen speicherst. Ansonsten wären noch die Methoden "AddNew" (zum Anlegen neuer Datensätze) und "Delete" (zum Löschen von Datensätzen) wichtig. Und natürlich die Move****-Befehle, mit denen Du einen anderen Datensatz auswählen kannst.

Ich hoffe, das hat Dir geholfen.
 
In Access DB schreiben

Hallo zusammen

im moment befasse ich mich auch mit dem Zugriff auf eine AccessDB von VB aus. Ich konnte aber nicht herausfinden, wie ich daten in eine Tabelle schreiben kann.

Wäre froh, wenn mir jemand ein codebeispiel geben könnte.

Danke und gruss

Beni
 
Wenn Du in die Tabelle schreiben willst, kannst Du die Werte wie an eine normale Variable übergeben:
Code:
rs.Fields("feldname").Value = Wert

Wichtig beim Schreiben ist aber, dass Du hinterher mit der Update-Methode die Änderungen speicherst. Ansonsten wären noch die Methoden "AddNew" (zum Anlegen neuer Datensätze) und "Delete" (zum Löschen von Datensätzen) wichtig. Und natürlich die Move****-Befehle, mit denen Du einen anderen Datensatz auswählen kannst.
 
Guten Morgen

Danke für die Hilfe. Ich habs jetzt rausgefunden. Ich wusste nicht wie den rs zu öffnen und zu updaten. Aber bei jedem rs.fields eintrag wird auf eine neue zeile in der db geschrieben, wie kann ich das verhindern?


Vielen Dank

Beni
 
Zuletzt bearbeitet:
Hallo Lirion

Danke dir viel mals, dass du mir hilfst. Leider verstand ich deine letzt Hilfe nicht. Ich immer noch Mühe, einen Datensatz in eine Tabelle einzufügen. Ich versuche es im Moment mit einem SQL- String, bekomme aber fehler, denke es liegt daran, dass die erste spalte eine automatische id ist. Ich will aus einem Excel File die Daten herauslesen und genauso in eine DB übertragen.

Wär cool wenn du mir helfen könntest. (habe den code noch angefügt)

Code:
           'Verbindungsobjekt erzeugen und die Verbindung zur Datenbank aufbauen
        '--------------------------------------------------------------------
        statusbar.Caption = "Verbindung zur DB wird erstellt..."
        Set AdoCmd = New ADODB.Command
        Set conn = New ADODB.Connection
        Set rs = New ADODB.Recordset
        
        With conn
            '.Provider = "Microsoft.Jet.OLEDB.4.0;Data Source=Pfad\name.mdb"
            ConStr = "Pfad\name.mdb"
            .Provider = "Microsoft.Jet.OLEDB.3.51"
            
            .Open (ConStr)
            
            If .State = adStateOpen Then
                statusbar.Caption = "Verbindung offen!"
            Else
                MsgBox "Fehler beim öffnen..."
                Exit Sub
            End If
        End With
        
        reader = WBook1.Sheets(1).Cells(2, 1).Value
                
        rs.Open "INSERT INTO table1(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q," _ 
"r,s,t,u,v,w,x,y,z,aa) VALUES(einfuegen(0), einfuegen(1), einfuegen(2), " _
"einfuegen(3), einfuegen(4), einfuegen(5), einfuegen(6), einfuegen(7), einfuegen(8), einfuegen(9), " _
"einfuegen(10), einfuegen(11), einfuegen(12), einfuegen(13), einfuegen(14), einfuegen(15), " _
einfuegen(16), einfuegen(17), einfuegen(17), einfuegen(18), einfuegen(19), einfuegen(20), " _
einfuegen(21), einfuegen(22), einfuegen(23), einfuegen(24), einfuegen(25), einfuegen(26)", _
conn, adOpenKeyset, adLockOptimistic
       
       
      
        For spaltenzahler = 1 To 28
    
           Do While Not reader = ""
           
                
                rs.AddNew
           
                If Not spaltenzahler = 23 Then
            
                    reader = WBook1.Sheets(1).Cells(colonnenzahler, spaltenzahler).Value
                    If reader = "" Then
                        reader = 0
                    End If
                    
                    Debug.Print rs.Fields(1).Type
                    rs.Fields.Item(counter).Value = reader
    
                    colonnenzahler = colonnenzahler + 1
                    
                    reader = WBook1.Sheets(1).Cells(colonnenzahler, spaltenzahler).Value
                    
                End If
    
            Loop

            rs.Update
             
            spaltenzahler = spaltenzahler + 1
            colonnenzahler = 2
            blankworkbookzahler = blankworkbookzahler + 1
            counter = counter + 1
            
            reader = WBook1.Sheets(1).Cells(colonnenzahler, spaltenzahler).Value
        
        Next
        
        rs.Close
        excelClose
 
Zuletzt bearbeitet von einem Moderator:
Was spricht gegen ein insert-Query? Ist doch völlig korrekt.
Auch wenn das Recordset-Objekt aus der ADO-Bibliothek eine AddNew-Methode zur Verfügung stellt.

In diesem Sinne: RTFM. :rolleyes:

PS: Bitte Code-Tags benutzen.
 
Dario Linsky hat gesagt.:
In den Projektoptionen stellst Du das Startobjekt auf "Sub Main" ein. Dabei ist es aber relativ wichtig, dass Du in der Prozedur oben das Hauptformular aufrufst, weil das nicht automatisch passiert.
.

Hi bräuchte auch mal deine Hilfe, wo stell ich denn die Projekoptionen ein?
 

Neue Beiträge

Zurück