Zugriff auf Shape, das nicht Aktives Dokument

Im Thema von Sven ging es um den Zugriff per Script auf eine Tabelle, die nicht zum aktiven Thema gehört.
Es wurde folgendes Script-Beispiel genannt:

theVTab = VTab.Make ("C:\temp\irgendein.dbf".AsFilename, false, false)

gibt es eine ähnliche Möglichkeit, auf ein Thema (ist zwar im Projekt, aber nicht aktiv) zuzugreifen?

Kann man den Make-Befehl auch für Shapes verwenden? Und wo muß er dann im Start vom Script hin?

theView=av.getActiveDoc
theThm = theView.getActiveThemes.get(0)
theVTab = theThm.getFTab

Danke und Gruß,
Maggie
auf ein Thema (ist zwar im Projekt, aber nicht aktiv) zuzugreifen?

theView = av.getActiveDoc
' oder: av.FindDoc("View1")
theThm = theView.FindTheme("DeinThema.shp")

Make-Befehl

theView = av.getActiveDoc
theSrcName = SrcName.Make("C:\temp\DeinShapefile.shp")
theThm = Theme.Make(theSrcName)
theView.AddTheme (theThm)

oder

theView = av.getActiveDoc
theThm = Theme.Make("C:\temp\DeinShapefile.shp".AsSrcName)
theView.AddTheme (theThm)
Hallo Maxilla,

erst mal vielen Dank, die erste Version reicht eigentlich schon hin, doch leider habe ich den Eindruck, daß meine spätere Abfrage im Script das Thema aus der ersten Anfrage nicht findet.

theView = av.getActiveDoc
theTheme = theView.FindTheme("mein Adressenthema.shp")
theFTab = theTheme.getFTab

eingabefelder = {"Ort", "Strasse", "Hausnummer"}
standardwerte = {"","",""}

key = MsgBox.MultiInput( "Welche Adresse suchen Sie?", "Adressensuche", eingabefelder, standardwerte)
strOrt = key.Get(0)
strStrasse = key.Get(1)
strHausnummer = key.Get(2)

strQuery = "([Ort] = " + strOrt.Quote + ") and ([Strasse] = " + strStrasse.Quote + ") and ([Hausnummer] = " + strHausnummer + ")"

theFTab.Query (strQuery,theFTab.GetSelection, #VTAB_SELTYPE_NEW)

av.GetProject.SetModified(true)
theView = av.GetActiveDoc
r = Rect.MakeEmpty
for each t in theView.GetActiveThemes
if (t.CanSelect) then
r = r.UnionWith(t.GetSelectedExtent)
end
end
if (r.IsEmpty) then
msgbox.info("Leider konnte die angegebene Adresse nicht gefunden werden. Achten Sie auf die richtige Schreibweise! (Benutzen Sie Umlaute, also z.B.'ß' statt 'ss' und 'ä' statt 'ae' usw.; Schreiben Sie das Wort 'Straße' immer aus. Sind evtl. Bindestriche im Straßennamen notwendig?)","")
elseif ( r.ReturnSize = (0@0) ) then
theView.GetDisplay.PanTo(r.ReturnOrigin)
theView.GetDisplay.ZoomToScale(2000)
end


Ich nehme mal an, das Problem liegt in der Zeile
for each t in theView=getActiveThemes

Die Sache mit den active themes wollte ich ja eigentlich umgehen...
Was tun? Zu Beginn das Thema per Script aktiv schalten, oder kann ich unten auf eben dieses bestimmte Thema verweisen?

Danke!
Maggie
Ich weiß nicht genau, was du da eigentlich machst, aber du kannst statt der for each Schleife einfach schreiben:

if (theTheme.CanSelect) then
r = r.UnionWith(theTheme.GetSelectedExtent)
end

Und die CanSelect Request ist dann auch überflüssig weil die bei einem FTheme immer TRUE zurückgibt.
Hallo Maxilla,

weißt Du, das eigentlich Problem ist, daß ich auch nicht so genau weiß, was ich da mache... Ich hatte mir mein Ursprungsscript aus mehreren Quellen zusammengebastelt, um meinen Kollegen eben die Adressensuche zu erleichtern. Und dann war immer das Problem, das richtige Thema aktiv zu schalten. Also wollte ich das umgehen.

Ich danke Dir für Deine prompte und wirkungsvolle Hilfe (es klappt jetzt nämlich!)

Schönes Wochenende,
Maggie