PDA

Vollständige Version anzeigen : Elementauflistung


Nockenwelle
04.02.2001, 01:08
Hi,

ich habe vor einiger Zeit eine Nachricht hier gelesen, bei der man sich die vorhandenen Objekte rausgeben kann. Soweit ich mich erinner war der Beitrag von Manuela. Ich find ihn nur nicht.

Vielen Dank

Manuela Kulpa
05.02.2001, 11:42
Hallo Nockenwelle!

Welches Beispiel meinst du? Meinst du vielleicht die Beispiel-DB die die Ereignisse eines Formulars protokolliert?

Mit fragenden Grüssen
Manuela

Nockenwelle
05.02.2001, 12:21
Hallo,

Viele Dank für deine Antwort.
ich suche eine Funktion, die mir alle Tabellen und Forms auflistet, die in der DB vorhanden sind.

Irgentwann hatte ich sowas von dir mal gelesen(glaub' ich jedenfalls).


Cu

Manuela Kulpa
05.02.2001, 14:30
Hallo Nockenwelle!

Du hast zwei Möglichkeiten, entweder gehst du über die Tabelle MSysObjects und einer entsprechenden Abfrage oder du probierst mal folgende Funktion aus, welche sowohl die Tabellen und Formulare, als auch die restlichen Objekte in einem String ausgibt. Wenn du eine Variante als Array benötigst, melde dich!

<font face="Courier New" size="2">Public Function ObjectsToString( _
lType As Long, _
ByRef sIn As String, _
chrDelimit As String) _
As Long

' Folgende Objekte kannst du auswählen für die Variable lType
' ***********************************************************
' 0 = Table
' 1 = Query
' 6 = Relation
' 2 = Form
' 3 = Report
' 4 = Macro
' 5 = Module

Dim dbs As DAO.Database
Dim conTmp As DAO.Container
Dim lCount As Long
Dim lCounter As Long

On Error GoTo HandleErr

Set dbs = CurrentDb()

' Überprüfen, welcher Type ausgewählt wurde
Select Case lType

Case 0
' Für Tabellen, Schleife über die DAO-TableDefs-Collection
lCount = dbs.TableDefs.Count
If lCount > 0 Then
For lCounter = 0 To lCount - 1
sIn = sIn & dbs.TableDefs(lCounter).Name
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
Next lCounter
End If

Case 1
' Für Abfrage, Schleife über die DAO-QueryDefs-Collection
lCount = dbs.QueryDefs.Count
If lCount > 0 Then
For lCounter = 0 To lCount - 1
sIn = sIn & dbs.QueryDefs(lCounter).Name
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
Next lCounter
End If

Case 6
' Für Relationen, Schleife über die DAO-Relations-Collection
lCount = dbs.Relations.Count
If lCount > 0 Then
For lCounter = 0 To lCount - 1
sIn = sIn & dbs.Relations(lCounter).Name
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
Next lCounter
End If

Case Else

' Für die restlichen Objekte, können wir nicht die DAO-Collection
' nutzen, dafür nutzen wir den Container

Select Case lType

Case 2
Set conTmp = dbs.Containers("Forms")

Case 3
Set conTmp = dbs.Containers("Reports")

Case 4
Set conTmp = dbs.Containers("Scripts")

Case 5
Set conTmp = dbs.Containers("Modules")

Case Else
' Ein falscher Typ wurde angegeben
Err.Raise vbObjectError + 2, Application.Name, "Error: " & _
Err.Number & ", "

End Select

' Ermittle die Anzahl der gefundenen Objekte
lCount = conTmp.Documents.Count
For lCounter = 0 To lCount - 1
If lCount > 0 Then
sIn = sIn & conTmp.Documents(lCounter).Name
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
End If
Next lCounter

End Select

ObjectsToString = lCount

ExitHere:
On Error Resume Next
If Not dbs Is Nothing Then dbs.Close: Set dbs = Nothing
Exit Function

HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, "basBeispiele.ObjectsToString"
End Select

End Function


Sub TestObjectsToString()

Dim lCount As Long
Dim sNames As String

lCount = ObjectsToString(0, sNames, ";")
Debug.Print "Objekte: " & sNames

End Sub</font>
Viel Spaß bei der Umsetzung!

Gruß

Nockenwelle
05.02.2001, 15:40
Hallo Manuela,

DANKE!!!!!!!!!!!!!!!