- Offizieller Beitrag
Auf Daten Zugreifen mit
- DAO (Data Access Objects)
- ADO (ActiveX Data Objects)
ADO ist der Nachfolger von DAO
bis Access 97 Standard-Bibliothek DAO
von Access 2000 Standard-Bibliothek ADO
Auf Daten Zugreifen mit
ADO ist der Nachfolger von DAO
bis Access 97 Standard-Bibliothek DAO
von Access 2000 Standard-Bibliothek ADO
Eine Tabelle mit DAO öffnen und das erste Datenfeld aller Datensätze im Direktbereich ausgeben
Dim rs As Recordset 'Variable für Recordset definieren
Dim strSQL As String 'Variable für SQL-Statement definieren
strSQL = "SELECT * FROM Tabellenname;" 'SQL-Statement auf Variable schreiben
Set rs = CurrentDb.OpenRecordset(strSQL) 'Recordset öffnen
Do Until rs.EOF 'Schleife bis zum letzten Datensatz
Debug.Print rs.Fields(0).Value '1.Feld ausgeben
rs.MoveNext 'nächster Datensatz auswählen
Loop
rs.Close 'Recordset schliessen
Set rs = Nothing 'Variable rs wieder frei geben
Eine Tabelle mit ADO öffnen und das erste Datenfeld aller Datensätze im Direktbereich ausgeben
Dim cnn As ADODB.Connection 'Variable für Datenbank definieren
Set cnn = CurrentProject.Connection 'Datenbank öffnen
Dim rs As New ADODB.Recordset 'Variable für Recordset definieren
Dim strSQL As String 'Variable für SQL-Statement definieren
strSQL = "SELECT * FROM Tabellenname;" 'SQL-Statement auf Variable schreiben
rs.Open strSQL, cnn, adOpenStatic, adLockReadOnly 'Recordset öffnen
Do Until rs.EOF 'Schleife bis zum letzten Datensatz
Debug.Print rs.Fields(0).Value '1.Feld ausgeben
rs.MoveNext 'nächster Datensatz auswählen
Loop
rs.Close 'Recordset schliessen
cnn.Close 'Datenbank schliessen
Set rs = Nothing 'Variable rs wieder frei geben
Set cnn = Nothing 'Variable cnn wieder frei geben
Alles anzeigen
Je nach Datenbankform brauch man einen anderen Provider
MS-Access 97 "Microsoft.Jet.OLEDB.3.51"
MS-Access ab 2000 "Microsoft.Jet.OLEDB.4.0"
MS-Access ab 2007 "Microsoft.ACE.OLEDB.12.0"
MS-Sharepoint (OLEDB) "Microsoft.ACE.OLEDB.12.0"
MS-SQL-Server (OLEDB) "SQLOLEDB.1" oder "SQLOLEDB"
MS-SQL-Server (ODBC) "MSDASQL.1" oder "MSDASQL"
Oracle-DB (Quelle: Oracle) "OraOLEDB.Oracle.1" oder "OraOLEDB.Oracle"
Oracle-DB (Quelle: Microsoft) "MSDAORA.1" oder "MSDAORA"
MySQL (OLEDB) "MySQLProv"
Es gibt 2 Möglichkeiten wie man einen Connection String definieren kann
1.
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.Provider = "SQLOLEDB.1" 'oder "SQLOLEDB" ohne Versionsnummer
cnn.Properties("Data Source") = "ADRESSE-SQL-SERVER" 'Adresse des SQL-Servers
cnn.Properties("Initial Catalog") = "DATENBANKNAME" 'Name der Datenbank
cnn.Properties("Integrated Security") = "SSPI" 'SSPI wenn ohne Username und Passwort
cnn.Open
cnn.Close
Set cnn = Nothing
2.
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider='SQLOLEDB.1';Data Source='ADRESSE-SQL-SERVER';" & _
"Initial Catalog='DATENBANKNAME';Integrated Security='SSPI';"
cnn.Open
cnn.Close
Set cnn = Nothing
einfache Anführungszeichen (') sind Optional
Weitere Parameter:
Beispiele:
### MS-Access 97
"Provider='Microsoft.Jet.OLEDB.3.51';Data Source='DATENBANKNAME';"
### MS-Access ab 2000
"Provider='Microsoft.Jet.OLEDB.4.0';Data Source='DATENBANKNAME';"
### MS-Access ab 2007
"Provider='Microsoft.ACE.OLEDB.12.0';Data Source='DATENBANKNAME';"
Infos (-) / weitere Parameter (*):
- DATENBANKNAME z.B.: C:\Daten\Datenbank.mdb
* Jet OLEDB:Database Password='DATENBANKPASSWORT';
* Jet OLEDB:System Database='SYSTEMDATENBANKNAME';
* User ID='USERNAME';
* Password='PASSWORT'
### SharePoint
"Provider='Microsoft.ACE.OLEDB.12.0';WSS;IMEX='1';RetrieveIds='Yes';DATABASE='DATENBANKNAME';LIST='{5999B8A0-0C2F-4D4D-9C5A-D7B146E49698}';"
Infos (-)
- DATENBANKNAME z.B.: https://subdomain.domain.de/ordner/seite/
- IMEX='0' = Lesen, Schreiben
- IMEX='1' = Lesen
- IMEX='2' = Lesen, Schreiben, Ändern, Löschen
### Excel 97
"Provider='Microsoft.ACE.OLEDB.12.0';Data Source='EXCELDATEI.XLS';Extended Properties='Excel 8.0 Xml';HDR='YES';"
### Excel ab 2007
"Provider='Microsoft.ACE.OLEDB.12.0';Data Source='EXCELDATEI.XLSX';Extended Properties='Excel 12.0 Xml';HDR='YES';"
"Provider='Microsoft.ACE.OLEDB.12.0';Data Source='EXCELDATEI.XLSB';Extended Properties='Excel 12.0';HDR='YES';"
"Provider='Microsoft.ACE.OLEDB.12.0';Data Source='EXCELDATEI.XLSM';Extended Properties='Excel 12.0 Macro';HDR='YES';"
### SQL-Server
"Provider='SQLOLEDB.1';Data Source='ADRESSE-SQL-SERVER';Initial Catalog='DATENBANKNAME';User ID='USERNAME';Password='PASSWORT';"
### MySQL
Provider=MySQLProv;Data Source='DATENBANKNAME';User Id='USERNAME';Password='PASSWORT';
### Oracle
"Provider='OraOLEDB.Oracle';Data Source='DATENBANKNAME';User Id='USERNAME';Password='PASSWORT';"
### Oracle MS-Provider
"Provider='MSDAORA';Data Source='DATENBANKNAME';User Id='USERNAME';Password='PASSWORT';"
### HTML-Tabelle
"Provider='Microsoft.Jet.OLEDB.4.0';Data Source='WEBSEITENSEITE';Extended Properties='HTML Import';HDR='YES';IMEX='1';"
Infos (-)
- DATENBANKNAME z.B.: https://subdomain.domain.de/ordner/seite.html
Alles anzeigen
Eine alternative Möglichkeit zur Eigenschaft .RecordCount die Anzahl der Datensätze eines Recordsets zu ermitteln.
Über DAO
Dim rs As Recordset
Dim strSQL As String
strSQL = "SELECT COUNT(*) FROM Tabellenname;"
Set rs = CurrentDb.OpenRecordset(strSQL)
Debug.Print rs.Fields(0).Value
rs.Close
Set rs = Nothing
Über ADO
Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT COUNT(*) FROM Tabellenname;"
rs.Open strSQL, cnn, adOpenStatic, adLockReadOnly
Debug.Print rs.Fields(0).Value
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Alles anzeigen
oder
Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection
Dim rs As New ADODB.Recordset
rs.Open "SELECT COUNT(*) FROM _AnzahlDSaetze;", cnn, adOpenStatic, adLockReadOnly
Debug.Print rs.Fields(0).Value
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Über ADO COMMAND