Freitag, 17. Januar 2014

UPDATE aus Formular aufrufen mit VB.Net - einfaches Beispiel

Wir haben den Fall, dass regelmässig Daten über Excel importiert werden. Die Excelliste enthält die Objektkoordinaten als X,Y Werte. In einem View kann man zwar die X,Y Werte in Spatial-Objekte umwandeln, aber da es keine Basistabelle mit Spatial-Index gibt funktioniert die Abfrage der Featureklasse in Map oder MapGuide nicht (sobald man einen SpatialFilter anwenden will).

Beim Import kann man einen Trigger einsetzen, der die X,Y Werte in Spatial Objekte umwandelt. Das verlangsamt den Excel Import deutlich - zumindest bei mir. Vielleicht kann man da auch noch den Trigger verbessern.

Alternativ kann man nach dem Import die Umwandlung durchführen. Damit der Schritt einfach möglich ist, erfolgt der Aufruf über eine Schaltfläche und etwas Vb.Net Script aus dem Formular heraus. Hier ein Beispiel, wie man dann die Aktualisierung anstossen kann:


Public Overrides Sub Button_Click()

   dim fc_name as String
   dim update_sql as String

   fc_name = Me.Dialog.FeatureClass.Name
  
   update_sql = "UPDATE " +    fc_name  + " fc_alias1 " +   " set geom = (select MDSYS.SDO_GEOMETRY(2001,352257, NULL,SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY( fc_alias2.ZNXKORDINA, fc_alias2.ZNYKORDINA)) from " + fc_name + " fc_alias2 where fc_alias1.fid = fc_alias2.fid)"
  
   'Me.Application.MessageBox(update_sql)
  
   Me.Document.Connection.ExecuteNonQuery(update_sql)
  
   Me.Application.MessageBox("Aktualisiert.")

End Sub


Map 2013, SP2

Kommentare:

  1. Sali Robert

    Im Geospatialnavigator-Blog gab es einmal einen Beitrag zu diesem Problem.

    http://geospatialnavigator.typepad.com/geospatial_navigator/2010/04/quick-tipps-i-topobase-so-einfach-gehts.html

    Dieser Tipp hat bei mir besten funktioniert.

    Marcel

    AntwortenLöschen
    Antworten
    1. Hallo Marcel,

      vielen Dank für den Tipp!

      Robert

      Löschen