title image


Smiley Re: Grundlagen: mit Excel-VBA eine Access.mdb auslesen
Um auf eine Access-Datenbank zuzugreifen brauchst Du zunächst ein Access-Objekt.

Um es zu erhalten, empfehle ich für den Anfang/für die Entwicklung einen Verweis zu setzen auf die Microsoft Access x.yy Object Library.

Dann erschaffst Du ein Access-Object zB. mit diesem Code:

Dim oAcc As New Access.Application



oAcc.OpenCurrentDatabase ("C:\pfad\datenbank.mdb")

oAcc.Visible = True 'fürs entwickeln angenehm



In einer Datenbank spricht man statt von Spalten und Zeilen eher von Feldern und Datensätzen.

Um Daten zu lesen, gibt es im wesentlichen zwei Wege:

* der Befehl Dlookup(), relativ einfach im Handling, etwas langsam:

dim sEinString as string

sEinString = oAcc.Dlookup("[EinTextfeldEinerTabelleOderAbfrage]", "[NameEinerTabelleOderAbfrage]","[EinGanzzahlenfeld] = 5")

Sobald Feld-/Tabellen-/Abfragenamen Sonderzeichen (=alles außer Buchstaben, Unterstrich und Ziffern) beinhalten, braucht man zwingend die eckigen Klammern, sonst nicht.

Zum Identifizieren des "richtigen" Datensatzes dient der dritte Parameter des DLookup().



* alternativ kann man über Recordsets zugreifen bzw. wenn man mehrere Datensätze hintereinander bearbeiten will zB. in einer Schleife . Dort gibt es zwei Unterarten, ADO und DAO. Je nachdem, braucht man einen weiteren Verweis: Microsoft DAO x.yy Object Library bzw. Microsoft ActiveX Data Objects x.y Library

Ich ziehe das ältere, für Access optimierte DAO vor.

Ausführlich greift man damit so auf Datensätze zu:

dim db as dao.database

dim rs as dao.recordset



set db = oAcc.CurrentDb

set rs = db.Openrecordset("NameEinerTabelleOderAbfrage", dbopendynaset)



do until rs.eof

'gibt das Feld "EinFeldName" und das dritte Feld der Tabelle aus

msgbox rs![EinFeldname] & vbnewline & rs(2)



rs.movenext

loop

rs.close

set db = nothing



Daten schreiben kann man auch über Recordsets

dim db as dao.database

dim rs as dao.recordset



set db = oAcc.CurrentDb

set rs = db.Openrecordset("NameEinerTabelle", dbopendynaset)



'Datensatz hinzufügen

rs.addnew

rs!EinTextfeld = "abc"

rs!EinZahlenfeld = 5

rs!EinDatumsfeld = #21.04.2004#

rs.update



'einen Datensatz suchen

rs.Findfirst "EinDatumsfeld = #2004-04-21#"

if rs.nomatch then

'Nix gefunden

else

'Datensatz ändern

rs.edit

rs!EinDatumsfeld = #2004-05-20#

rs.update

endif

rs.close

set db = nothing



In der Datenbankwelt arbeitet man besser mit SQL-Statements.

Einen Wert hinzufügen:

oAcc.CurrentDb.Execute "INSERT INTO DieTabelle (EinTextFeld, EinGanzzahlenfeld, EinDatumsfeld) " _

& " VALUES ('abc', 28, #2004-06-30#) "

und einen Wert verändern:

oAcc.CurrentDb.Execute "UDPATE DieTabelle " _

& " SET EinTextFeld = 'abc', " _

& " , EInganzzahlenfeld = 28 " _

& " WHERE EinDatumsfeld = #2004-06-30#

Ohne den Where-Abschnitt wären alle Datensätze einer Tabelle betroffen.



Gruß

Robert



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: