Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Zugriff auf (nicht) vorhandene, verlinkte Tabelle

Begonnen von fcd-1622, August 12, 2010, 09:25:02

⏪ vorheriges - nächstes ⏩

fcd-1622

Hallo,

ich habe ein Problem mit einer verlinkten Tabelle. Das Problem ist, dass mir ein Fehler angezeigt wird, sobald die Tabelle nicht vorhanden ist, aber genau dies stellt der User ein. Soll heissen:

Wenn das Benutzen der verlinkten Tabelle aktiviert ist (Ziffer 6 des Feldes "FAD_STATUS" in der Tabelle 'FAD_SysEnv' ist auf den Wert "1" gesetzt), soll die Funktion {FAD_TabChk} ausgefuehrt werden - andernfalls natuerlich nicht.

'Check for ID-Table settings
'
If Mid(DLookup("FAD_STATUS", "FAD_SysEnv"), 6, 1) = "1" Then

    'Check for ID-Table (settings) by module {TAB_Existing} with option:
    '
    '   o   FTC_Opt as String                           Check section
    '
    If FAD_TabChk("all") = False Then
        DoCmd.OpenForm "ErrorMSGW", acNormal, , , acFormReadOnly, acWindowNormal
        Forms!ErrorMSGW!Text01 = DLookup("Txt", "HelpTexts", "Cmd = 'Err07_H'")
        Forms!ErrorMSGW!Text02 = DLookup("Txt", "HelpTexts", "Cmd = 'Err67_M'")
        Exit Function
    End If
End If


In der Funktion wird u. a. der Inhalt der Tabelle geprueft (FTC_Opt = "all" oder FTC_Opt = "content").

Option Compare Database

'FAD_TabChk     Script status
'FTC_Opt        Option ("all", "content", "database", "exttable", "loctable", "settings")

'FAD_DbCnt      Internal script counter
'FAD_DbMain     Database
'FAD_TabChk     Status
'RecordSet      Database record object

Function FAD_TabChk(FTC_Opt As String) As Boolean

    'Check for option "all", "exttable", "loctable" or "content"
    '
    If FTC_Opt = "all" Or FTC_Opt = "exttable" Or FTC_Opt = "loctable" Or FTC_Opt = "content" Then
        Dim RecordSet As Object
        Dim FAD_DbMain As Database

        'Check for option "loctable"
        '
        If FTC_Opt = "loctable" Then
            Set FAD_DbMain = CurrentDb

        'Check for option "exttable"
        '
        ElseIf FTC_Opt = "exttable" Then
            Set FAD_DbMain = OpenDatabase(DLookup("TABVOL", "FAD_SysEnv") & "\DOD-00000000-3C")
        End If
    End If

    'Check for option "all", "exttable" or "loctable"
    '
    If FTC_Opt = "all" Or FTC_Opt = "exttable" Or FTC_Opt = "loctable" Then
        Dim FAD_DbCnt As Integer

        'Check for option "exttable" or "loctable"
        '
        If FTC_Opt = "exttable" Or FTC_Opt = "loctable" Then
            FAD_DbCnt = 1
        Else
            FAD_DbCnt = 2
            Set FAD_DbMain = OpenDatabase(DLookup("TABVOL", "FAD_SysEnv") & "\DOD-00000000-3C")
        End If
        While FAD_DbCnt > 0
            For Each RecordSet In FAD_DbMain.TableDefs

                'Check for found table name
                '
                If RecordSet.Name = "ID_Codes" Then
                    FAD_TabChk = True
                    Exit For
                Else
                    FAD_TabChk = False
                End If
            Next RecordSet
            FAD_DbCnt = FAD_DbCnt - 1

            'Check for internal script counter value
            '
            If FAD_DbCnt = 1 Then
                Set FAD_DbMain = CurrentDb
            End If
        Wend
    End If

    'Check for option "all" or "content"
    '
    If FTC_Opt = "all" Or FTC_Opt = "content" Then

        'Check for one (!) and existing record in table 'ID_Codes':
        '
        '   o   NCode = "X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0"
        '       NText = "DELETED - DELETED - DELETED"
        '
        If Nz(DCount("NCode", "ID_Codes", "NCode = 'X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0' And NText = 'DELETED - DELETED - DELETED'")) = 1 Then

            'Check for one (!) and existing record in table 'ID_Codes':
            '
            '   o   NCode = "Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0"
            '       NText = "VIRTUAL ARCHIVE FOR SAVINGS ON LOCAL STORAGE (SID: 00000000)"
            '
            If Nz(DCount("NCode", "ID_Codes", "NCode = 'Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0Y0' And _
                                               NText = 'VIRTUAL ARCHIVE FOR SAVINGS ON LOCAL STORAGE (SID: 00000000)'")) = 1 Then

                'Check for one (!) and existing record in table 'ID_Codes':
                '
                '   o   NCode = "Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0"
                '       NText = "VIRTUAL STORAGE FOR LOCAL SAVINGS"
                '
                If Nz(DCount("NCode", "ID_Codes", "NCode = 'Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0' And _
                                                   NText = 'VIRTUAL STORAGE FOR LOCAL SAVINGS'")) = 1 Then
                    FAD_TabChk = True
                Else
                    FAD_TabChk = False
                End If
            Else
                FAD_TabChk = False
            End If
        Else
            FAD_TabChk = False
        End If
    End If
End Function


Und genau bei der Uebrpruefung des Inhalts ("content") liegt das Problem, wenn der Status auf "0" gesetzt ist - denn dann wird die Funktion wohl trotzdem durchlaufen/aufgerufen. Kann man das irgendwie umgehen? - Ich hatte schon an eine Abfrage nach den Anzahl von "X0X0X0...", "Y0Y0Y0..." und "Z0Z0Z0..." gedacht, was mir aber weniger gefaellt.

Kiui

Servus,

(wenn ich das soweit richtig verstanden hab: Du willst beim Start Deiner DB prüfen, ob eine Tabelle xy vorhanden ist, dann verlinken und dann Deine Prozedur ausführen)

Ich denke, eine Tabelle von Hause aus zu verlinken, die potentiell gar nicht da ist, ist eher semi-optimal. Und worauf willst Du genau verlinken? Excel-Tabelle oder Access-Tabelle aus einer anderen DB???

Grundsätzlich solltest Du vielleicht die Verlinkung weglassen und beim Start Deiner DB per VBA-Prozedur prüfen lassen, ob die Datei, aus welcher Du die Tabelle beziehen willst, überhaupt existiert. So dies bejaht wird, kann eine nachträgliche Verlinkung oder Import der Tabelle (z.B. mit DoCmd.TransferDatabase o.ä.) geschehen und Deine Prozedur ausgeführt werden.

Gruß aus Berlin
Pat
verwendete Access-Versionen: zumeist Access 2007 (gezwungenermaßen)

Kenntnisse VBA: passabel (find ich zumindest)
Kenntnisse SQL: naja...geht so

fcd-1622

Nur so zur Info:

Ich verlinke auf eine Tabelle in einer anderen Datenbank - also Access-Tabelle.

Das Szenario:
Die Datenbank erfasst Dateien. Die Beschreibungen der Dateien werden aber - aus Sicherheitsgruenden - in einer anderen Datenbank hinterlegt. Diese Prozedur kann der User aber selbst bestimmen - er muss demnach keine zweite Datenbank fuer die Beschreibungen verwenden, sondern kann diese auch in ein und derselben Datenbank sichern.
Ob nun die externe Access-Tabelle genutzt wird oder nicht wird geprueft. EInmal an den Einstellungen ("FAD_STATUS"), ob die Tabelle ueberhaupt existiert und ob die Tabelle auch tatsaechlich 3 fixe Eintraege hat.

Ist der Wert ("FAD_STATUS") auf "0" werden saemtliche Module/Funktionen, die mit Hilfe der Tabelle arbeiten, uebersprungen - was aber fehlschlaegt. Siehe zweiten Quellcode - da die Tabelle ja nicht vorhanden ist.

Das Erstellen mittels "DoCmd." ist zwar ganz schoen, aber sinnvoll - wenn die DB bei jedem Start einen evtl. "Link" loescht, die EInstellungen ueberprueft und dann einen neuen Link erstellt?

Kiui

 ???  ??? ???

mir erschließt sich dein Vorhaben (vielmehr der Sinn dahinter) zwar immer noch nicht, aber vielleicht helfen ja auch tipps zu deiner Funktion

1. Setze unter "Option Compare Database" noch das "Option Explicit"
2. Versuche anstelle von ...
       
    Dim FAD_DbMain As Database
    einfach mal
     
    Dim FAD_DbMain As DAO.Database

3. "Dim RecordSet As Object" - dabei würde ich "RecordSet" mal durch einem anderen Namen ersetzen
4. das Ganze nochmal "Debuggen", vielleicht wird dir ja dann irgendein Fehler angezeigt
verwendete Access-Versionen: zumeist Access 2007 (gezwungenermaßen)

Kenntnisse VBA: passabel (find ich zumindest)
Kenntnisse SQL: naja...geht so

database

#4
....  und auch dieser tolle Beitrag hat hier eigentlich nichts zu suchen.
Mal abgesehen davon dass dieser in keiner Weise auch nur annähernd zum Threadthema passt - das ist hier keine Harwarebörse!

Mann oh Mann - .... !  >:(

database

Sorry,

wie schon in einem anderen Thread auch, bezog sich meine Kritik NICHT auf den TO und die Antworter sondern auf einen sehr sonderbaren Eintrag, der nun nicht mehr vorhanden ist.

Grüße

Peter