Hallo Forum,
vergangene Woche habe ich mit Maxillas Hilfe (danke nochmal!) ein Script gebastelt, was nach einem bestimmten (vorhandenen) Thema im View sucht.
Hierbei stelle ich ein erstaunliches Problem fest:
Wenn ich das Script in ein neues Projekt einbaue, funktioniert es prima. Baue ich es in ein bestehendes Projekt ein, verweigert es die Mitarbeit.
Ich erhalte immer die Fehlermeldung "Objekt Nil kann die Anforderung getFTab nicht erkennen". Das Script bleibt dementsprechend an folgender Stelle hängen:
'finde.adresse
theView = av.getActiveDoc
theTheme = theView.FindTheme("adressen.shp".AsString)
theFTab = theTheme.getFTab
Weitergehen sollte es eigentlich mit:
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
if (theTheme.CanSelect) then
r = r.UnionWith(theTheme.GetSelectedExtent)
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
Ist Euch das schon mal vorgekommen, daß ein Script nur in neuen Projekten läuft? Kann das an der Anzahl der im View vorhandenen Themen liegen (zugegeben, es sind einige)?
Danke im Vorraus!
Maggie
vergangene Woche habe ich mit Maxillas Hilfe (danke nochmal!) ein Script gebastelt, was nach einem bestimmten (vorhandenen) Thema im View sucht.
Hierbei stelle ich ein erstaunliches Problem fest:
Wenn ich das Script in ein neues Projekt einbaue, funktioniert es prima. Baue ich es in ein bestehendes Projekt ein, verweigert es die Mitarbeit.
Ich erhalte immer die Fehlermeldung "Objekt Nil kann die Anforderung getFTab nicht erkennen". Das Script bleibt dementsprechend an folgender Stelle hängen:
'finde.adresse
theView = av.getActiveDoc
theTheme = theView.FindTheme("adressen.shp".AsString)
theFTab = theTheme.getFTab
Weitergehen sollte es eigentlich mit:
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
if (theTheme.CanSelect) then
r = r.UnionWith(theTheme.GetSelectedExtent)
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
Ist Euch das schon mal vorgekommen, daß ein Script nur in neuen Projekten läuft? Kann das an der Anzahl der im View vorhandenen Themen liegen (zugegeben, es sind einige)?
Danke im Vorraus!
Maggie
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Maxilla am Fr., 19.08.2005 - 10:04
Permalinkich bin's wieder. Wenn...
theView = av.getActiveDoc
theTheme = theView.FindTheme("adressen.shp")
theFTab = theTheme.getFTab
die von dir genannte Fehlermeldung zurückgibt, dann kann das eigentlich nur bedeuten, dass ein Thema namens "adressen.shp" nicht im View ist.
Gespeichert von Maxilla am Fr., 19.08.2005 - 10:23
Permalinkif (theTheme = NIL) then
MsgBox.Info("Das Thema "+"adressen.shp".Quote+" konnte nicht gefunden werden...",theView.GetName)
return NIL
elseif (theTheme.is(FTheme).not) then
return NIL
end
Gespeichert von Maggie am Fr., 19.08.2005 - 11:32
PermalinkDu hast Recht, ich hatte das Thema unter den Themeneigenschaften anders benannt, daher der Fehler.
Ich werde die Abfrage einfügen.
Danke!
Maggie
Gespeichert von Maxilla am Fr., 19.08.2005 - 11:33
Permalinkelseif ( r.ReturnSize = (0@0) ) then
theView.GetDisplay.PanTo(r.ReturnOrigin)
theView.GetDisplay.ZoomToScale(2000)
end
...müsstest du wohl durch...
else
theView.GetDisplay.PanTo(r.ReturnOrigin)
theView.GetDisplay.ZoomToScale(2000)
end
...ersetzen, damit sie etwas bewirken.
Die lange MsgBox.Info mit den Scheibweise-Anmerkungen würde ich durch eine MsgBox.Report ersetzen, damit sie bei allen Bildschirmauflösungen und Schriftgraden gelesen werden kann.
Und hinter die MsgBox.MultiInput würd ich noch...
if (key.count = 0) then return NIL end
...setzen um den AvArray-Fehler abzufangen falls der Nutzer 'Abbrechen' drückt.
Gruß vom M.