Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0550: Beispiel flexible Tabellen-Verknüpfung

 von 

Beschreibung 

Dieses Beipiel zeigt den Inhalt einer nicht persistent verknüpften Tabelle in einer Tabelle an.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [3,83 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'---------- Anfang Projektdatei ViewLinkTable.vbp  ----------
' Es muss ein Verweis auf 'Microsoft ActiveX Data Objects 2.7 Library' gesetzt werden.

'--- Anfang Formular "frmViewLinkTable" alias ViewLinkTable.frm ---
' Steuerelement: Schaltfläche "cmdRsMove" (Index von 0 bis 3)
' Steuerelement: Textfeld "txtField" (Index von 0 bis 0)
' Steuerelement: Beschriftungsfeld "lblField" (Index von 0 bis 0)


' =======================================
' Beispiel flexible Tabellen-Verknuepfung
' =======================================
'
' zeigt den Inhalt einer nicht persistent
' verknuepften Tabelle in einer Tabelle
' an.
'
' verwendetet (Fremd-)Objekte:
'
'   ADODB:      ADO
' =======================================
Option Explicit

Private mCon    As ADODB.Connection
Private mRs     As ADODB.Recordset

' -----------------
' Form wird geladen
' -----------------
Private Sub Form_Load()
    Set mCon = New ADODB.Connection
    
    ' --- mit Datenbank verbinden ---
    With mCon
        ' --- Zugriffsoptionen setzen ---
        .CursorLocation = adUseClient
        .Mode = adModeReadWrite Or adModeShareDenyWrite
        
        ' --- Datenbanktyp und -namen festlegen ---
        .Provider = "Microsoft.Jet.OLEDB.3.51"
        .ConnectionString = "Data Source=C:\test.mdb"
        
        ' --- verbinden ---
        .Open
    End With
    
    ' ---     verknuepfte Tabelle im     ---
    ' --- Tabellensteuerelement anzeigen ---
    Set mRs = LinkTableNonPersistent( _
        "Test", _
        "C:\test.mdb", mCon)
    ArrangeControls mRs
    ShowData mRs
End Sub

' ------------------
' Form wird entladen
' ------------------
Private Sub Form_Unload(Cancel As Integer)
    ' --- Datenbankverbindung loesen ---
    ' ---    und Objekt vernichten   ---
    mRs.Close
    mCon.Close
    Set mRs = Nothing
    Set mCon = Nothing
End Sub

' --------------------------------
' Datensatzschaltflaeche betaetigt
' --------------------------------
Private Sub cmdRsMove_Click(Index As Integer)
    Select Case Index
        Case 0
            mRs.MoveFirst
        Case 1
            mRs.MovePrevious
        Case 2
            mRs.MoveNext
        Case 3
            mRs.MoveLast
    End Select
    
    ShowData mRs
End Sub

' ---------------------------------------------------
' Oeffnet eine Tabelle aus einer "fremden" Datenbank
'
' Parameter:
'
'   rsForeignTableName: Tabellenname in der Datenbank
'   rsForeignConnect:   Verbindungszeichenfolge
'   rcon:               Connection-Objekt
'
' Rueckgabe:
'
'   Recordset-Objekt, welches die zu persistent
' ---------------------------------------------------
Public Function LinkTableNonPersistent( _
    ByRef rsForeignTableName As String, _
    ByRef rsForeignConnect As String, _
    ByRef rcon As ADODB.Connection) As ADODB.Recordset
    
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    
    ' --- Recordset oeffnen ---
    With rs
      .CursorType = adOpenDynamic
      .LockType = adLockOptimistic
      
      ' --- SQL-Statement zusammenbasteln ---
      .Open "SELECT * FROM [" & rsForeignTableName & _
        "] IN '" & rsForeignConnect & "'", rcon
    End With
    
    ' --- Rueckgabewert zuweisen ---
    Set LinkTableNonPersistent = rs
    Set rs = Nothing
End Function

Private Sub ArrangeControls(ByRef rrs As ADODB.Recordset)
    Dim i As Long
    
    For i = 0 To (rrs.Fields.Count - 1)
        If (i > 0) Then
            Load lblField(i)
            Load txtField(i)
            
            With lblField(i - 1)
                lblField(i).Move .Left, (.Top + .Height + 100)
            End With
            With txtField(i - 1)
                txtField(i).Move .Left, (.Top + .Height + 100)
            End With
        End If
        
        lblField(i).Caption = rrs.Fields(i).Name
        
        lblField(i).Visible = True
        txtField(i).Visible = True
    Next ' i
End Sub

' ----------------------------
' aktuellen Datensatz anzeigen
' ----------------------------
Private Sub ShowData(ByRef rrs As ADODB.Recordset)
    Dim i As Long
    
    On Error Resume Next
    
    ' --- Feldinhalte anzeigen ---
    For i = 0 To (mRs.Fields.Count - 1)
        txtField(i).Text = mRs(i).Value
    Next ' i
    
    ' --- Datensatzschaltflaechen ---
    ' --- aktivieren/deaktivieren ---
    cmdRsMove(0).Enabled = (Not mRs.BOF)
    cmdRsMove(1).Enabled = (Not mRs.BOF)
    cmdRsMove(2).Enabled = (Not mRs.EOF)
    cmdRsMove(3).Enabled = (Not mRs.EOF)
End Sub
'--- Ende Formular "frmViewLinkTable" alias ViewLinkTable.frm ---
'----------- Ende Projektdatei ViewLinkTable.vbp  -----------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Uwe am 18.11.2002 um 15:02

Für dieses Beispiel wird die Microsoft ActiveX Data Objects 2.7 Library benötigt (meines Wissens nach erst ab XP mitgeliefert, erhältliche Upgrades können ältere Datenbankanwendungen - insbes. Access-Verknüpfungen - zerstören, da die Jet-Engine von 2.7 nicht mehr unterstütz wird - glaube ich...)
Da ich gerade an dieser 2.7 Version verzweifle: Wer weiß Genaueres?