Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

öffnen von Abfragen oder Tabellen über einen Befehl ?





Frage

Hi, ich kämpfe gerade ein wenig mit Access :-) folgendes Problem : ich habe eine Tabelle die Prozess-Steps abbildet, jedem dieser Prozess Steps kann ein Link hinterlegt werden, der entweder eine Tabelle, Formular oder Abfrage ist. Dieser Link steht immer im gleichen Feld. Nun taucht dieser Link-Name im Formular auf und bei einem Klick auf selben soll sich die hinterlegte Tabelle oder Abfrage öffnen. soweit so gut, folgendes hab ich dann in VBA umgesetzt : Bei Klick auf das Link-Feld : If IsNull([Process-Link]) Then MsgBox ("ist kein Link") Else DoCmd.OpenQuery ([Process-Link]) End If Problem ist, wie bekomme ich raus ob es sich bei dem Link um eine Tabelle oder Abfrage oder was auch immer handelt so das ich den VBA code je nach Typ abhandeln kann und je nach Notwendigkeit dann : "DoCmd.OpenTabel " verwenden kann. bin für jede idee dankbar :-)) Viele Grüße Josef

Antwort 1 von lorf55

Hallo Josef,
eigentlich hast du ja noch ein Problem. Nämlich das du zwar einen Link hast, aber dazu das Objekt fehlt, weil es evtl. gelöscht oder umbenannt wurde. Aber das fangen die nachfolgenden Funktionen glaube ich auch ab.
Zitat:
jedem dieser Prozess Steps kann ein Link hinterlegt werden, der entweder eine Tabelle, Formular oder Abfrage ist.


Das kannst du in etwa so abfragen:
function IstAbfrage(Name As String) As Boolean
  If DCount("*", "MSysObjects", "Name='" & Name & "' and (((MSysObjects.Type)=5) AND ((MSysObjects.Flags)<>3))") Then IstAbfrage = True
end function

function IstTabelle(Name As String) As Boolean
  If DCount("*", "MSysObjects", "Name='" & Name & "' and (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0) AND ((LCase(Left([Name],4)))<>'usys')) OR (((MSysObjects.ForeignName) Is Not Null))") Then IstAbfrage = True
end function

function IstFormular(Name As String) As Boolean
  If DCount("*", "MSysObjects", "Name='" & Name & "' and (((MSysObjects.Type)=-32768) AND ((MSysObjects.Flags)=0))") Then IstAbfrage = True
end function


siehe dazu auch
software-chuchi.ch
und
donkarl

Aufruf z.B.
if IstAbfrage([Process-Link]) then
DoCmd.OpenQuery ([Process-Link])
end if

Hoffe, das funktioniert so.
Gruß
lorf

Antwort 2 von Josef

Vielen Dank lorf,

das hat mein Problem gelöst :-)

ich musste nur bei den 2 Funktionen

function IstTabelle(Name As String) As Boolean

und

function IstFormular(Name As String) As Boolean

den rückgabewert anpassen da dort jedesmal :

Then IstAbfrage = True

noch drin war :-))

Gruß Josef

Antwort 3 von lorf55

Hallo Josef,
stimmt, das war zwischen Tür und Angel gemacht, aber erfreulicherweise kein bösartiger Fehler dabei.
Schön, dass du es hingekriegt hast.

Bis denn
lorf


PS: Bei durchgehender Objektorientierung wären solche Funktionen wohl nicht nötig, da gäbe es für jeden Typ eine Methode DoCmd und die Birne wäre geschält und nicht solche gewagten Manöver. Aber was solls ...
SCNR

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: