Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
736to740
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
736to740
736to740
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Access-Daten direkt in Listview?

Access-Daten direkt in Listview?
23.02.2006 12:10:32
Andre
Hallo,
im Moment importiere ich Daten per VBA-Code in ein Excel-Tabellenblatt, um sie danach sofort in ein Listview einer UF zu schreiben. So weit, so gut.
Theoretisch sollte dies doch auch ohne den Umweg über das Tabellenblatt gehen, oder? Das heißt, die Daten aus Access direkt in mein Listview zu importieren.
Die UF soll weiterhin in einer Excel-Arbeitsmappe starten, aber ich spare mir einfach das Tabellenblatt.
Zum Einen brauch ich dann keine zahlreichen Tabellenblätter mehr, die nur dazu da sind die Daten zu "übergeben" und zum Anderen sollte es dann auch schneller gehen. Oder?
Gruß Andre

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Access-Daten direkt in Listview?
23.02.2006 15:38:32
Peter
Hallo Andre,
sicher geht das, aber nicht 'auf der grünen Wiese'. Das soll heißen, du solltest entweder deine bisherige Anwendung posten oder aber Angaben über Anzahl Spalten in der ListBox, ggf. Feld-/Tabellen-Namen der MDB machen usw.
Genial wäre es, auch eine abgemagerte Version der Access Datenbank zu haben. Wie soll sonst getestet werden?
Viele Grüße Peter
AW: Access-Daten direkt in Listview?
23.02.2006 16:22:04
Andre
Hi Peter,
danke für deine Hilfe.
Hab doch nicht mit einer fertigen Lösung gerechnet, nur ein Hinweis oder ein Beispiel-Code.
Hilfreich wäre auch, wenn jemand das schon mal realisiert hat und mir sagen kann ob das überhaupt Geschwindigkeit bringt.
Die Komponenten (Feldnamen, Anzahl der Spalten usw.) sind ja doch variabel, aber hier ein Beispiel:
Die Datenabfrage:
Sheets("Intro").Range("J2:L65536").ClearContents
With Sheets("Intro").QueryTables.Add(Connection:= _
"ODBC;PWD=" & Passwortkennziffer & ";DSN=Microsoft Access-Datenbank;DBQ=" & [Kontrolle!G55] & "\" & [Kontrolle!G56] & ";DefaultDir=" & [Kontrolle!G55] & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
, Destination:=Sheets("Intro").Range("J1"))
.CommandText = Array("SELECT Anmeldungen.Benutzer, Anmeldungen.Arbeitsplatz, Anmeldungen.Datum, Anmeldungen.ID" & Chr(13) & "" & Chr(10) & "FROM `" & [Kontrolle!G55] & "\" & [Kontrolle!G56] & "`.Anmeldungen Anmeldungen")
.name = "Datenbankabfrage Anmeldungen"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlOverwriteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Übergabe an Listview:
With Worksheets("Intro")
Dim intIndex As Integer
For I = 10 To 14
ListView1.ColumnHeaders.Add , , Sheets("Intro").Cells(1, I), 139
Next I
LetzteZeile = .Cells(Cells.Rows.Count, 12).End(xlUp).Row
For intIndex = 2 To LetzteZeile
With ListView1.ListItems.Add(, , .Range("J" & intIndex).Value)
For I = 11 To 14
.ListSubItems.Add , , Sheets("Intro").Cells(intIndex, I).Value
Next I
End With
Next
End With
Gruß Andre
Anzeige
AW: Access-Daten direkt in Listview?
23.02.2006 16:47:46
Peter
Hallo Andre,
hier ist ein laufendes Makro als Muster

'
'------------------------------------------------------------------------------'
'                                                                              '
'              Autor: Peter Feustel - p.feustel@system-kontor.de               '
'                                                                              '
'------------------------------------------------------------------------------'
'                                                                              '
'    Achtung der Verweis auf: Microsoft ActiveX Data Objects 2.0 Library       '
'    oder eine höhere Version (2.1, 2.5) muss aktiviert sein.                  '
'                                                                              '
'    das nachfolgende Makro liest aus einer Access-Datenbank Adressen          '
'    gemäß der Adressen-Nummer und gibt die Adressen anschließend in           '
'    ein UserForm(ular) in die ListBox1 aus.                                   '
'                                                                              '
'------------------------------------------------------------------------------'
'
Private Sub UserForm_Activate()
Dim DBPfad      As String     ' Pfad der Access-Anwendung
Dim DBDatei     As String     ' Name der Access-Datei bzw. DB
Dim DBTab       As String     ' Name der Access-Tabelle
Dim Connect     As Connection ' die Verbindung zu Access
Dim RecSet      As Recordset  ' der Access RecordSet
Dim SQLString   As String     ' der SQL Befehl
Dim iLiBoIndx   As Integer    ' ListBox-Index
Dim Suchbegr    As String     ' zum Suchen in der Access-Datenbank
   Suchbegr = "Feustel"
'
'  Pfad der Access Datenbank, Name der Access Datei, Name der Access Tabelle
'
   DBPfad = "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Access-DBs\"
   DBDatei = "Adr-Feustel.mdb"
   DBTab = "Adressen"
   
'  die ListBox 'formatieren'
   UserForm2.ListBox1.ColumnCount = 9
   UserForm2.ListBox1.ColumnWidths = _
            "3,0 cm; 3,5 cm; 3,0 cm; 3,2 cm; 1,0 cm; 1,5 cm; 3,5 cm; 3,5 cm; 1,0 cm"
   
'  Die Datenbank öffnen
   Set Connect = New ADODB.Connection
   With Connect
      .Provider = "Microsoft.Jet.OLEDB.4.0"   ' für Access 2000 und höhere
      .ConnectionString = "Data Source=" & DBPfad & DBDatei
      .Open
   End With
'
'  hier nur ein paar Felder gemäß Suchbegiff aus der Access-Tabelle holen
'
   SQLString = "SELECT " & DBTab & ".Vorname, " _
                         & DBTab & ".Nachname, " _
                         & DBTab & ".Namensergänzung, " _
                         & DBTab & ".Straße, " _
                         & DBTab & ".Länderschlüssel, " _
                         & DBTab & ".PSTLZ_Straße, " _
                         & DBTab & ".Ort, " _
                         & DBTab & ".Ortszusatz, " _
                         & DBTab & ".Region " _
                         & " FROM " & DBTab & ";" '_
                         '& " WHERE " _
                         '& DBTab & ".Nachname Like '" & Suchbegr & "';"
                          
   If SQLString = "" Then
      MsgBox "hier ist der Wurm drin, der SQLString ist leer - Abbruch.", _
         16, "   der SQLString wurde nicht gefüllt."
      Exit Sub
    Else
      'MsgBox SQLString      ' den SQL-String anzeigen
   End If
 
   Set RecSet = New ADODB.Recordset
   RecSet.Open SQLString, Connect, adOpenDynamic, adLockReadOnly
   
'  Jetzt den selektierten Record holen und in die ListBox schreiben
    
   If RecSet.EOF = False Then  ' kein EOF => es gibt also Daten !
      RecSet.MoveFirst         ' auf dem ersten Datensatz aufsetzen
    Else
      MsgBox "es konnte nichts selektiert werden => Abbruch.", _
         16, "    fehlerhafte Selektion ?"
      Exit Sub
   End If
            
   Do While RecSet.EOF = False
      UserForm2.ListBox1.AddItem " "
      If RecSet.Fields.Item(0).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 0) = RecSet.Fields.Item(0).Value
      End If
      If RecSet.Fields.Item(1).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 1) = RecSet.Fields.Item(1).Value
      End If
      If RecSet.Fields.Item(2).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 2) = RecSet.Fields.Item(2).Value
      End If
      If RecSet.Fields.Item(3).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 3) = RecSet.Fields.Item(3).Value
      End If
      If RecSet.Fields.Item(4).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 4) = RecSet.Fields.Item(4).Value
      End If
      If RecSet.Fields.Item(5).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 5) = RecSet.Fields.Item(5).Value
      End If
      If RecSet.Fields.Item(6).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 6) = RecSet.Fields.Item(6).Value
      End If
      If RecSet.Fields.Item(7).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 7) = RecSet.Fields.Item(7).Value
      End If
      If RecSet.Fields.Item(8).Value <> "" Then
         UserForm2.ListBox1.List(iLiBoIndx, 8) = RecSet.Fields.Item(8).Value
      End If
      iLiBoIndx = iLiBoIndx + 1
      RecSet.MoveNext
   Loop
   RecSet.Close     ' Access Recordset schließen
   Connect.Close    ' Access schließen
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Access-Daten direkt in Listview?
24.02.2006 08:55:16
Andre
Guten Morgen Peter,
danke für dein Beispiel. Das ist schon mehr als ich erwartet hatte. Vielen Dank.
Für die Listbox funktioniert´s klasse. Es wird mir sicher gelingen, dein Code an ein Listview anzupassen.
Danke nochmal und bis bald.
Gruß Andre

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige