Hallo Forum,
ich scheitere grade wiederholt an einem Script für eine Suche:
Aus dem View heraus sollen zwei Felder in einer Attributtabelle nach einzugebenden Texten abgefragt werden.
Sprich: zuerst sollen Eingaben gemacht werden für Ort und Straße, und die sollen dann in der Tabelle gefunden werden (jede Straße gibt es in jedem Ort nur einmal). Anschließend soll auf die Straße gezoomt werden.
Hier mein Code (soweit ich komme):
'find.street
theView = av.getactivedoc
theThemelist = theView.getactivethemes
theTheme = theThemelist.get(0)
theFTab = theTheme.getFTab
aField = theFTab.FindField("Ort","Betextung1")
eingabefelder = {"Ort", "Straße"}
standardwerte = {"",""}
key = MsgBox.MultiInput( "Welche Straße suchen Sie?", "", eingabefelder, standardwerte)
if (key <> Nil) then
rec = theFTab.Find(key)
if (rec = Nil) then
MsgBox.Warning("Keine Treffer.","")
else
b = theFTab.GetVTab.GetSelection
b.ClearAll
b.Set(rec)
theFTab.GetVTab.UpdateSelection
'theFTab.ShowRow(theFTab.ConvertRecordToRow(rec))
end
end
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
return nil
elseif ( r.ReturnSize = (0@0) ) then
theView.GetDisplay.PanTo(r.ReturnOrigin)
else
theView.GetDisplay.SetExtent(r.Scale(1.1))
end
Ich schätze, ich habe die Übergabe der Eingabe-Werte noch nicht richtig geregelt, kann das aber nicht ausprobieren, weil ich immer die Fehlermeldung "Funktion FIND ist unbekannt" erhalte.
Könnt Ihr mir weiterhelfen?
Danke im Vorraus,
Maggie
ich scheitere grade wiederholt an einem Script für eine Suche:
Aus dem View heraus sollen zwei Felder in einer Attributtabelle nach einzugebenden Texten abgefragt werden.
Sprich: zuerst sollen Eingaben gemacht werden für Ort und Straße, und die sollen dann in der Tabelle gefunden werden (jede Straße gibt es in jedem Ort nur einmal). Anschließend soll auf die Straße gezoomt werden.
Hier mein Code (soweit ich komme):
'find.street
theView = av.getactivedoc
theThemelist = theView.getactivethemes
theTheme = theThemelist.get(0)
theFTab = theTheme.getFTab
aField = theFTab.FindField("Ort","Betextung1")
eingabefelder = {"Ort", "Straße"}
standardwerte = {"",""}
key = MsgBox.MultiInput( "Welche Straße suchen Sie?", "", eingabefelder, standardwerte)
if (key <> Nil) then
rec = theFTab.Find(key)
if (rec = Nil) then
MsgBox.Warning("Keine Treffer.","")
else
b = theFTab.GetVTab.GetSelection
b.ClearAll
b.Set(rec)
theFTab.GetVTab.UpdateSelection
'theFTab.ShowRow(theFTab.ConvertRecordToRow(rec))
end
end
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
return nil
elseif ( r.ReturnSize = (0@0) ) then
theView.GetDisplay.PanTo(r.ReturnOrigin)
else
theView.GetDisplay.SetExtent(r.Scale(1.1))
end
Ich schätze, ich habe die Übergabe der Eingabe-Werte noch nicht richtig geregelt, kann das aber nicht ausprobieren, weil ich immer die Fehlermeldung "Funktion FIND ist unbekannt" erhalte.
Könnt Ihr mir weiterhelfen?
Danke im Vorraus,
Maggie
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Andreas Koeberle am Di., 18.05.2004 - 12:31
PermalinkGespeichert von Gast am Di., 18.05.2004 - 12:36
PermalinkDie Zeile verstehe ich nicht, lässt sich das bei dir kompilieren?
> key = MsgBox.MultiInput( "Welche Straße suchen Sie?", "", eingabefelder, standardwerte)
MultiInput gibt eine Liste zurück. Auf Ort und Straße kannst du dann so zugreifen
strOrt = key.Get(0)
strStrasse = key.Get(1)
Die Selektion solltest du dann mit einer Query machen (die Feldnamen musst du noch anpassen):
strQuery = "([Ort] = " + strOrt.Quote + ") and ([Strasse] = " + strStrasse.Quote + ")"
theFTab.Query (strQuery,theFTab.GetSelection, #VTAB_SELTYPE_NEW)
Dann kannst du mit dem Zoomen beginnen.
Ich hoffe die Syntax stimmt, ich habe gerade leider kein ArcView 3 zur Hand.
Gespeichert von Maggie am Di., 18.05.2004 - 12:49
Permalinkich DANKE DIR!
Ich wußte, daß irgendein Denkfehler in meinem Script war. Auf Query bin ich einfach nicht gekommen... Bin halt Avenue-Neuling.
Es klappt mit der Query, einfach toll!
Maggie