Feature in PersonalGeodatabase speichern

Hallo schon wieder ich.

Ich habe folgendes Problem: Ich möchte ein Feature in einer Featureclass speichern, die sich in einer PersonalGeodatabase befindet.
Dies funktioniert auch, das Feature wurde offensichtlich mit allen Attributen gespeichert, leider ist danach KEINES der Objekte mehr in der Karte zu sehen.
Auch "Zoom to Layer" funktioniert nicht, aber ein räumliches Bezugssystem wurde zugeordnet.
Weiß vielleicht jemand, wieso? Ich nämlich leider gar nicht.
Oder wie fügt man denn korrekterweise neue Features einer Featureclass hinzu, die sich in einer PGDB befindet?
Mein Tool funktioniert ganz wunderbar nur bei einer Featureclass, die sich NICHT in einer PGDB befindet.

Vielen Dank mal im Vorraus,
Ulrike
Hallo Ulrike,

meinst du mit mein Tool ein Stück VBA-Code? Magst du diesen gegebenenfalls hier einstellen?

Gruss

Uwe
Hallo Uwe,

tut mir leid, aber ich darf nichts mehr in's Netz stellen, wegen des Betriebsgeheimnisses und so, sorry.

Grüße,
Uli
Du kannst ja nix dazu aber sag Deinem Chef mal, hier würde geantwortet, dass die Leutseeligkeit ein Phanomen auf Gegenseitigkeit ist im Internet.
Wir sind hier keine Altruisten und kriegen auch kein Geld dafür, sondern wir helfen uns gegenseitig.
(Leider kann ich zu Deinem fachlichen Problem allerding nix beitragen.)

ein Chef
Hallo Forum,
habe hier eine sehr abgespeckte Version meines Tools, habe nicht ausprobiert, ob so alles hundertprozentig funktioniert, aber im Prinzip müßte es gehen.

Public Sub addFeature(strShapepath As String, _
strfilename As String, _
pPoint As IPoint)


Dim pPCS As IProjectedCoordinateSystem
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pFWS As IFeatureWorkspace
Dim pMap As IMap
Dim pMxDoc As IMxDocument
Dim pFeatureClass As IFeatureClass
Dim pFeatureLayer As IFeatureLayer
Dim pActiveView As IActiveView
Dim ppSet As ISet
Dim pFeature As IFeature
Dim pFeatureClassWrite As IFeatureClassWrite
Dim pSRFactory As ISpatialReferenceFactory2
Dim pQueryFilter As IQueryFilter
Dim pCursor As ICursor
Dim pMidPoint As IPoint
Dim pActiveLayer As ILayer
Dim arrayname() As String
Dim refnr As Long


Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Set pActiveLayer = pMxDoc.SelectedLayer


Set pWorkspaceFactory = New ShapefileWorkspaceFactory


Set pFWS = pWorkspaceFactory.OpenFromFile(strShapepath, 0)


Set pFeatureClass = pFWS.OpenFeatureClass(strfilename)


Set pMidPoint = New Point
pMidPoint.PutCoords pPoint.x, pPoint.y


Set pSRFactory = New SpatialReferenceEnvironment
Set pPCS = pSRFactory.CreateProjectedCoordinateSystem(32632)
Set pMidPoint.SpatialReference = pPCS


Set ppSet = New esriSystem.Set


Do While pFeature Is Nothing

Set pFeature = pFeatureClass.CreateFeature
Set pFeature.Shape = pMidPoint

Load Form_Beschreibung
Form_Beschreibung.Show
Form_Beschreibung.TextBox1.SetFocus

' x-Koordinate des Pinpoints / 3. Feld
pFeature.Value(2) = “Hallo”

' y-Koordinate des Pinpoints / 4. Feld
pFeature.Value(3) = “Sinnvoller Text”


' speichern
pFeature.Store

ppSet.Add pFeature
Set pFeatureClassWrite = pFeatureClass
pFeatureClassWrite.WriteFeatures ppSet

Loop


Set pFeatureClassWrite = pFeatureClass
pFeatureClassWrite.WriteFeatures ppSet

pMxDoc.ActiveView.Refresh


End Sub

Mein Tool zum Schreiben in die datenbank funtioniert im Prinzip genauso.
Mein Problem hierbei ist, wie oben beschrieben, nicht das Schreiben in die DB, sondern das Sichtbar machen der Features.
Über eine DBabfrage und das Anlegen einer neuen Featureclass, die praktisch als temporärer Selectionlayer fungiert, ist das möglich, aber es gibt doch sicherlich einen einfacheren Weg. Exportiert man die Featureclass in die DB, so sind alle features sichtbar, erst beim Hinzufügen neuer Features lassen sich diese nicht mehr anzeigen????
Falls jemand weiß, wie das funktioniert, wäre ich sehr dankbar.
Nachtrag:
das mit form_Beschreibung... muß natürlich raus aus dem Code

Grüße
Uli
Wenn du in eine GDB schreiben willst, darfst du natürlich keine ShapefileWorkspaceFactory benutzen. Ausserdem speicherst du das gleiche mehrfach. IFeatureClassWrite solltest du nicht verwenden, das ist nur für CustomFeatures (also Features, die noch selbst programmiertes Verhalten haben) gedacht, weil dabei die Logik der Store-Methode zu Fehlern führen kann. In deinem Fall reicht pFeature.Store völlig.
Bei größeren Datenmengen solltest du aber besser einen InsertCursor benutzen.
Nachtrag:
Es reicht der FeatureClass eine SpatialReference zuzuweisen, den einzelnen Punkt brauchst du nicht zu projezieren.
Hallo anderer Gast,

das mit dem AccessWorkspaceFactory weiß ich bereits. Aber wieso wird mit IFeatureClassWrite alles mehrfach gespeichert?
Woran kann ich das denn erkennen, das alles mehrfach gespeichert wird?

Danke,
Uli
Mit pFeature.Store wird das Feature gespeichert. Dann schreibst du es in das Set und speicherst mit WriteFeatures das ganze Set nochmal (in der Schleife). Nach der Schleife wird das Set nochmal gespeichert.

Ich hab's nicht probiert, aber was kommt denn im Shape an?
Hallo anderer Gast,

Im Shape kommt das an, was ich möchte. Die Funktion funktioniert bisher problemlos, solange sich das Shapefile ausserhalb der Geodatabase befindet.
Auch wenn ich die Features in das Shapefile in der Geodatabase speichere, funktioniert das problemlos. Nur lassen sich eben die Objekte nicht mehr in der Karte anzeigen. Leider keine Fehlermeldung oder sonstiges...
Ich probier es mal aus ohne IFeatureClasswrite,

Danke,
Uli
Oh, ja klar, ich hab' übersehen, das der Code innerhalb und ausserhalb der Schleife stand, hat aber offensichtlich nicht weiter gestört, mmhh...
Ist tatsächlich überhaupt ganz überflüssig, hatte die funktion ursprünglich dazu genutzt, Features zu löschen und habe diese dann etwas geändert, um auch Features speichern zu können.
Danke für den Tip,
Ulrike
Also, jetzt noch das letzte Mal vor dem Wochenende:
ich glaube, ich weiß, wieso das nicht geht, warum die Features nicht mehr angezeigt werden können. Und zwar wird die Attributspalte "Shape", sobald man die bestehende FeatureClass in eine GDB exportiert, als OLE-Objekt angelegt mit dem Inhalt "long binaryDaten". Diese Features lassen sich auch noch problemlos in die Karte laden.
OLE-Objektdatentyp: Ist ein felddatentyp, der für Objekte verwandt wird, die in anderen Anwendungen erstellt wurden und die in einer Accessdatenbank verknüpft bzw. in diese eingebettet wurden.

Sobald ich nun ein neues Feature in der FC speichere, bekommt dieses diesen Wert nicht mehr und nichts geht mehr.
Kann es sein, dass diese Vermutung die Richtige ist?

Schönes Wochenende,
Uli
Hallo forum,

meine Vermutung von oben stimmt nicht, der Fehler lag darin, dass meine Featureclass vom Geomtrietyp "Point" war und nicht vom Typ Multipoint.
So funktioniert das Ganze problemlos und die neuen features werden auch sofort in der Karte gezeichnet.

Gruß,
Uli