Tabelle erweitern

Hallo zusammen,

wie kann ich mit Hilfe von Avenue ein Feld zu einer bestehenden Tabelle hinzufügen? Habe in der Hilfe nachgesehen aber nichts passendes gefunden. Ich muss aber auch gestehen, dass ich mit Avenue noch nie programmiert habe!
Hallo Gast,

im Handbuch 'Using Avenue' stehts auf Seite 99 (Creating a Table).
In der Online-Hilfe steht es unter vTab.

Jörg
Hallo Jörg,

da steht leider nur wie ich eine neue Tabelle erstellen kann. Wie kann ich denn die breits vorhandene Tabelle aktuell setzen? Ich habe folgendes probiert. Dabei erhalte ich den Fehler: Das Objekt NIL kann die Anforderung GetVtab nicht erkennen.


aTable = av.GetProject.FindDoc("test.dbf")
aVTab = aTable.GetVTab
aVTab.SetEditable(true)
f1 = field.make("test",#Field_short, 5, 0)
f2 = field.make("test1",#Field_short, 15, 0)
avtab.addfields({f1, f2})
Eine Tabelle, die "test.dbf" heißt, sollte in diesem Falle in deinem Projekt schon zu finden sein...
Ansonsten erste Zeile ersetzen durch:

aTable = av.GetActiveDoc
Muss ein Thema oder eine Tabelle mit diesem Namen vorhanden sein?

In meinem Projekt ist ein Thema "Test" enthalten, welches natürlich auch eine Attributtabelle mit diesem Namen beinhaltet!
Hallo,

moechtest du die Attribut-Tabelle des aktiven Themas ergaenzen? Die Tabelle des aktiven Themas bekommst du ueber:

meineTabelle = av.GetActiveDoc.GetActiveThemes.Get(0).GetVTab

Gruss

Uwe
Hi Uwe,

wenn ich deinen Ausdruck in das Skript (erste Zeile) einfüge erhalte ich die folgende Fehlermeldung:
"Das Objekt Project kann die Anforderung GetActiveThemes nicht erkennen". Was mache ich nur falsch???

Rufe ich das Skript vielleicht falsch auf?
Hallo anonymous,

>Rufe ich das Skript vielleicht falsch auf?

Ich fuerchte, du laesst uns im Dunkeln tappen, was du eigentlich moechtest:

1. Welche Tabelle moechtest du editieren?

- die Tabelle eines Themas
- Tabelle mit einem bestimten Namen oder
- Tabelle eines Table-Dokumentes?

2. Moechtest du das Skript z. B. aus einem View heraus aufrufen und die Tabelle des (ersten) aktiven Themas ergaenzen?

Wenn du die Tabelle eines Themas ergaenzen moechtest, dann musst du zum Testen des Skriptes:

1. View aktivieren,
2. Skript-Fenster aktivieren und
3. Skript starten

Deine Fehlermeldung zeigt, dass du von dem Projekt-Fenster aus in das Skript-Fenster gewechselt bist. Dieses erkennt - wie die Fehlermeldung sagt - die Aufforderung GetActiveThemes nicht.

Gruss

Uwe
Hallo Uwe,

Ich sehe schon: das ganz ist komplizierter als ich dachte. Ich versuche mal das Problem neu zu beschreiben. Da ich mich mit der Avenue-Programmierung nicht so gut auskenne wußte ich natürlich auch nicht worauf es an kommt:

Ich habe ein ArcView-Projekt. In diesem Projekt ist nur ein Thema (test). Ich muss nun einige der Spalten umformatieren. Dazu wiederum möchte ich einige neue Spalten erzeugen in denen dann das Ergebnis gespeichert werden soll (führende Nullen löschen, Zeichen einfügen).

Vielen Dank für Eure Geduld!

Gruß
Andreas
Hallo Andreas,

Dein Ansatz oben (av.GetProject.FindDoc("test.dbf")) war gut, denke ich, damit umgehst Du jedenfalls die Probleme mit den 'aktiven Dokumenten'.

Der Name der bei diesem Aufruf in den Anführungszeichen stehen muss, ist nicht der Dateiname, sondern der Name der im Projektfenster auftaucht.

Meistens ist das sowas wie "Attribut von Thema xy.shp".

Ansonstan bist Du doch auf dem richtigen Weg!

Jörg
Hallo nochmal,

Andreas, sei das Shapefile test.shp als Thema im View "View1" geladen. Dann kannst du wie folgt vorgehen:

' Dein View ist:
meinView = av.GetProject.FindDoc("View1")

' Dein Thema ist:
meinThema = meinView.FindTheme("test.shp")

' Deine Sachdatentabelle ist:
meineTabelle = meinThema.GetFTab

' Jetzt weiter wie in deinem ersten Skript:
' Editierung beginnen
meineTabelle.SetEditable(True)

' Felder erstellen
' Auch wenn es in der Hilfe weitere Enumerationen gibt:
' Avenue kennt meines Wissens nur DOUBLE, DATE, LOGICAL und CHAR
' Alle weiteren Enums benoetigt man gegebenenfalls fuer
' Datenbankzugriffe
Feld1 = Field.Make("test",#Field_double, 5, 0)
Feld2 = Field.Make("test1",#Field_double, 15, 0)

' Felder hinzufügen
meineTabelle.AddFields({Feld1, Feld2})

' Editierung beenden
meineTabelle.SetEditable(False)

Wenn deine Sachdaten-Tabelle bereits als Table-Dokument aufglistet wird, d. h. bereits geoeffnet wurde, so funktioniert auch:

meineTabelle = av.GetProject.FindDoc("Attributes of test.dbf").GetVTab

Das muesste es jetzt aber sein.

Viel Erfolg damit & Gruss

Uwe
Hallo Uwe,

vielen Dank für deine ausführliche Hilfe. Es klappt! Nur noch eine Frage:
Wie ich Felder in ArcView selbst verarbeiten kann weiß ich aber wie baue ich diese Berechnung FKZ=[ZN].AsString+“/“+[NN].AsString in den Code ein?

Hast du dazu vielleicht eine Idee?
Hallo A.,

fuer einen neuen Datensatz schreibst du:

neueDatensatznummer = meineTabelle.AddRecord

Auf ein Feld in deinem Datensatz greifst du zu mit:

meinFeld = meineTabelle.FindField("Feld1")
meineTabelle.SetValue(meinFeld, neueDatensatznummer, FKZ)

Gruss und weiterhin frohes Schaffen

Uwe