POST
|
Not totally sure, but I believe that the ITable.Sort method accepts a parameter of ITrackCancel, which is why you just specify "Nothing" on: pTableSort.Sort Nothing I don't think it should affect your success or not and I am usure of why you are getting the behavior you seem to be experiencing. What version of ArcGIS are you running? Unless I am missing something obvious, I don't necessarily think anything is wrong with your code. Anyway, here is exact code sample from the EDN site: http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriGeoDatabase/ITableSort.htm Woud you please explain what ITrackCancel parameter is about? I am using ArcGIS 9.2. My code was modeling the same code sample. Before trying this macro, I had more sever problem with the following macro: Dim pTable As ITable Set pTable = pTableProperty.table Dim pTableSort As ITableSort Set pTableSort = New tableSort Set pTableSort.table = pTable pTablesort.Fields = "OBJECT_ID, UFI" pTableSort.Sort The queer thing is, in this case, when I typed pTableProperty.Table, it automatically changed to pTableProperty.table (with small t), and also New TableSort changed to New tableSort (with small t), and also pTableSort.Table changed to pTableSort.table (small t). Do you know why is it? Anyhow, with this macro, when run, it gave me a big problem, about which I had put up the following thread in the forum. (Quote) I added a few code lines of macro in ArcGIS VBA Editor and tried to run it, but a Compile error: Argument not optional window appeared. I clicked OK button or close button on the window, but the window didn't close. Now, when I try to close the VBA Editor window itself, it will not close either. I was stuck with it, I could not close the ArcMap. To get out of it, I had to turn off my computer. After that, when I tried to open up the .mxd file again, the ArcMap just shows the VBA Editor again with the same Compile error window which as before will not be closed with the click of OK button or close button. How can I close the editior and access all the codes that I have been working on? The .mxd file has many macros that I have created. How can I access them? I am in a dire situation! Could someone help me out? I would appreciate your help!! Thanks. Kyung (Unquote) I am attaching here the error message window that appeared as mentioned in the thread for your reference. After this thread, I could find the previous version of the .mxd file and I could continue to make the macro, and put up a thread to which you replied... Could all these background ring a bell to you? I hope so. Kyung
... View more
02-23-2011
04:23 AM
|
0
|
0
|
392
|
POST
|
I have a table in access database which has an x and Y value i need to convert this into File geodatabase now .Can anyone suggest how to go about it . Any help will be appreciated . Thanks. Hi, Years ago I created a VBA macro converting Excel to shapefile, with details below. You may modify it as appropriate. The macro first takes an Excel sheet to a personal geodatabase, then creates XY Event, then makes a shape file from it. In your case, you may just start from creating XY Event from the table in geodatabase and then create a feature class from it, which may be simpler than the sample macro. Kyung ====== 'Don't forget to add the reference .. 'Microsoft Access 11.0 object library 'Microsoft Office 12.0 Access database engine object library Sub EXToShape() ' FROM EXCEL TO XY EVENT ' Part 1: Transfer Excel sheet to Access Dim strInputFileName As String strInputFileName = InputBox("Enter the input file name:") ' Open Access database and get outside Excel into the database Dim ACC As Access.Application Set ACC = CreateObject("Access.Application", "") ACC.OpenCurrentDatabase "C:\kkim\Bangladesh_project\" & strInputFileName & "\" & strInputFileName & ".mdb" DoCmd.TransferSpreadsheet acImport, 8, strInputFileName, "C:\kkim\Bangladesh_project\" & strInputFileName & "\" & strInputFileName & ".xls", True ' Part 2: Define the input data file in Access. Dim pWorkspaceName As IWorkspaceName Dim pTableName As ITableName Dim pDatasetName As IDatasetName ' Define the input table's workspace. Set pWorkspaceName = New WorkspaceName pWorkspaceName.PathName = "c:\kkim\Bangladesh_project\" & strInputFileName & "\" & strInputFileName & ".mdb" pWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.AccessWorkspaceFactory" ' Define the dataset. Set pTableName = New TableName Set pDatasetName = pTableName pDatasetName.Name = strInputFileName Set pDatasetName.WorkspaceName = pWorkspaceName ' Part 3: Define the event source. Dim pXYEvent2FieldsProperties As IXYEvent2FieldsProperties Dim pSpatialReferenceFactory As ISpatialReferenceFactory Dim pGeographicCoordinateSystem As IGeographicCoordinateSystem Dim pXYEventSourceName As IXYEventSourceName ' Set the event to fields properties. Set pXYEvent2FieldsProperties = New XYEvent2FieldsProperties With pXYEvent2FieldsProperties .XFieldName = "LONG" .YFieldName = "LAT" .ZFieldName = "" End With ' Set the spatial reference. Set pSpatialReferenceFactory = New SpatialReferenceEnvironment Set pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem(esriSRGeoCS_WGS1984) ' Specify the event source and its properties. Set pXYEventSourceName = New XYEventSourceName With pXYEventSourceName Set .EventProperties = pXYEvent2FieldsProperties Set .SpatialReference = pGeographicCoordinateSystem Set .EventTableName = pTableName End With ' Part 4: Create a layer from the event source and display the layer. Dim pMxDoc As IMxDocument Dim pMap As IMap Dim pName As IName Dim pXYEventSource As IXYEventSource Dim pFLayer As IFeatureLayer Set pMxDoc = ThisDocument Set pMap = pMxDoc.FocusMap ' Open the event source. Set pName = pXYEventSourceName Set pXYEventSource = pName.Open ' Create a new feature layer and add the layer to the active map. Set pFLayer = New FeatureLayer Set pFLayer.FeatureClass = pXYEventSource pFLayer.Name = "XY Events" pMap.AddLayer pFLayer pMxDoc.ActiveView.Refresh ' NOW FROM EVENT TO SHAPE FILE ' Part 5: Define the output Dim pDatasetName1 As IDatasetName Dim pWorkspaceName1 As IWorkspaceName Set pWorkspaceName1 = New WorkspaceName pWorkspaceName1.PathName = "c:\kkim\Bangladesh_project\" & strInputFileName pWorkspaceName1.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory" Set pDatasetName1 = New FeatureClassName Set pDatasetName1.WorkspaceName = pWorkspaceName1 pDatasetName1.Name = strInputFileName ' Part 6: Defining the input was done above at part 4 as pName = pXYEventSourceName ' Part 7: Perform data conversion. Dim pShpToFC As IFeatureDataConverter Set pShpToFC = New FeatureDataConverter pShpToFC.ConvertFeatureClass pName, Nothing, Nothing, pDatasetName1, Nothing, Nothing, "", 1000, Application.hWnd ' Part 8: Display the created shape file Dim pWorkspaceFactory As IWorkspaceFactory Dim pFeatureWorkspace As IFeatureWorkspace Dim pFeatureLayer As IFeatureLayer Dim pFeatureClass As IFeatureClass ' Specify the workspace and the shape file Set pWorkspaceFactory = New ShapefileWorkspaceFactory Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile("c:\kkim\Bangladesh_project\" & strInputFileName, 0) Set pFeatureClass = pFeatureWorkspace.OpenFeatureClass(strInputFileName) Set pFeatureLayer = New FeatureLayer Set pFeatureLayer.FeatureClass = pFeatureClass pFeatureLayer.Name = pDatasetName1.Name ' Add the feature layer to the active map. pMap.AddLayer pFeatureLayer ' Delete the XYEvent layer pMap.DeleteLayer pFLayer ' Refresh the active view. pMxDoc.ActiveView.Refresh pMxDoc.UpdateContents End Sub ===========
... View more
02-23-2011
03:16 AM
|
0
|
0
|
3221
|
POST
|
Hi, Using my VBA codes, I was trying to sort an attribute table based on two fields, but the ArcMap stopped working immediately after the codes were run. Actualy, the codes were composed based on sample codes to the best of my guess; particularly, I don't understand why "Nothing" is put there on the last line. Would someone please explain about it and how to complete the macro for it to run well? ----- ----- Dim pTableSort As ITableSort Set pTableSort = New esriGeoDatabase.TableSort Dim pTable As ITable Set pTable = pTableProperty.Table Set pTableSort.Table = pTable pTableSort.Fields = "OBJECT_ID, UFI" pTableSort.Ascending("OBJECT_ID") = True pTableSort.Ascending("UFI") = True pTableSort.Sort Nothing ---- ---- Thank you! Kyung
... View more
02-22-2011
09:16 AM
|
0
|
2
|
680
|
POST
|
Hi, I added a few code lines of macro in ArcGIS VBA Editor and tried to run it, but a Compile error: Argument not optional window appeared. I clicked OK button or close button on the window, but the window didn't close. Now, when I try to close the VBA Editor window itself, it will not close either. I was stuck with it, I could not close the ArcMap. To get out of it, I had to turn off my computer. After that, when I tried to open up the .mxd file again, the ArcMap just shows the VBA Editor again with the same Compile error window which as before will not be closed with the click of OK button or close button. How can I close the editior and access all the codes that I have been working on? The .mxd file has many macros that I have created. How can I access them? I am in a dire situation! Could someone help me out? I would appreciate your help!! Thanks. Kyung
... View more
02-22-2011
06:47 AM
|
0
|
0
|
697
|
POST
|
Hi, Is there any difference between shapefile and feature class in programmatically reordering the fields of an attribute table? Specifically, I could use IFieldProperty.FieldOrder for attribute tables of feature class in ArcMap 9.1 while it did not work out to use the same one for attribute tables of shapefile in ArcMap 9.2. Or, is it due to ArcMap version? Kyung I could solve the reordering problem. The problem was not because of different version but because of other mistake that I made. Anyhow, thank you for your time. Kyung
... View more
02-21-2011
04:24 AM
|
0
|
0
|
204
|
POST
|
Kyung- I don't know what could be wrong. If you re-post the latest version of your code, maybe something will hit me. I tried this in VBA a couple years ago and gave up, so I share your frustration. Just got it working in ArcGIS 10, .NET, VS2010. 2 more things you could try: 1. set the .Application property before anything else: [INDENT]Set pTableWindow.Application = Application Set pTableWindow.FeatureLayer = pFeatureLayer [/INDENT] 2. verify that you have the TableProperty for the correct Featurelayer, check it's FieldOrder before, and again after you reset it: [INDENT] ' Re-order the fields Debug.Print("TableProperty FeatureLayer: " & pTableProperty.FeatureLayer.Name) Debug.Print("TableProperty Original FieldOrder: " & pTableProperty.FieldOrder) pTableProperty.FieldOrder = "OBJECT_ID, UFI, MF, NT, UNI, LAT, LONG" Debug.Print("TableProperty Revised FieldOrder: " & pTableProperty.FieldOrder) [/INDENT] The newer interfaces, ITableWindow2 and ITableWindow3, take an iLayer instead if iFeatureLayer; I think those were added in 9.3 and 10.0. Thank you, Jon! How can I thank you enough! Your line saved me! The line-- Debug.Print("TableProperty FeatureLayer: " & pTableProperty.FeatureLayer.Name)-- gave me a shapefile name different than what I expected! The shapefile was there on top inside the main data frame together with many other shapefiles, and the macro has been dufifully working on the shapefile, not on the new file that I intended to create on top of them and manipulate its attribute table. I had thought that even with all existing shapefiles, if any of their attribute table is not open, it's like there are no attribute tables to enumerate, and the new shapefile that I create and open up its attribute table with my macro will be the only attribute table to deal with. The truth is, it seems that the macro sees all shapefiles as attribute table to enumerate even though their attribute table is not opened in ArcMap. Another thing that I found was that the macro's view scope is not limited to just one data frame in which I am working. Actually, I tried the macro inside a new data frame where I have no existing shapefile or anything, but your line caught the top shapefile's name in the other data frame! Yes, the cause was found out, and I used the Do Loop you suggested and I could do reordering, freezing of the attribute table! Thank you so much, Jon! Kyung
... View more
02-18-2011
05:39 AM
|
0
|
0
|
687
|
POST
|
Kyung- When you say "it didn't work", is your code finishing with no errors, and when you open the table, the field order is unchanged? Do you have any errorhandling in your VBA code to catch errors??? For example: Public Sub ChangeFieldOrder() On Error GoTo Errorhandler <your code here> Exit Sub 'exit before errorhandler Errorhandler: MsgBox "An error occurred in ChangeFieldOrder:" & Err.Description, vbCritical, "ChangeFieldOrder" End Sub I had no error handler, and running the macro after adding pTableWindow.Refresh caused no runtime error message, and there was no change of field order. Now, I added an error handler, but the result was still no error message and no change of field order. I always made sure that there is only one attribute table is open and there be no other table whether opened or not. Kyung
... View more
02-17-2011
11:19 AM
|
0
|
0
|
687
|
POST
|
Kyung- After [INDENT]pTableProperty.FieldOrder = "OBJECT_ID, UFI, MF, NT, UNI, LAT, LONG" [/INDENT] you need to do this... [INDENT]pTableWindow.Refresh() 'necessary to show the new FieldOrder [/INDENT] Also, your comma-delimited list has spaces after each comma; mine does not; not sure if that's an issue. Good luck! Thank you for your interest in this problem. As your saying, I added pTableWindow.Refresh but it didn't work. Then, I removed all spaces from the comma-delimited list, but it didn't work either.... Could you suggest some other things? Thanks. Kyung
... View more
02-17-2011
10:44 AM
|
0
|
0
|
687
|
POST
|
Hi, In ArcMap, click Add Data button to add the table, right click the table, click Display XY Data menu, then follow the menus to select projection, etc. With the XY event displayed on the map, right click it and export it into your File Geodatabase. Kyung
... View more
02-17-2011
03:39 AM
|
0
|
0
|
3221
|
POST
|
Hi, Is there any difference between shapefile and feature class in programmatically reordering the fields of an attribute table? Specifically, I could use IFieldProperty.FieldOrder for attribute tables of feature class in ArcMap 9.1 while it did not work out to use the same one for attribute tables of shapefile in ArcMap 9.2. Or, is it due to ArcMap version? Kyung
... View more
02-16-2011
07:10 AM
|
0
|
2
|
2822
|
POST
|
Hi all, As nobody commenting on this topic, I may ask a related question that may invoke some idea. The same macro did work previously on the table based on personal geodatabase in ArcMap 9.1. Now when I use the macro on the table based on shapefile in ArcMap 9.2, it does not work. Does that fact ring a bell to you? Did ESRI change ArcObject change some classes and properties and methods without showing them in documentation? What can the problem be? Thanks. Kyung
... View more
02-14-2011
05:37 AM
|
0
|
0
|
687
|
POST
|
Withe the following macro, I could open an attribute table of pFeatureLayer that was just added but could not change the field order as I intended. Actually, the field order did not change at all. The macro did not show an error message, though. Probably the macro could not access the opened attribute table? Or, what could be wrong in the following VBA macro? Please, can anybody help me out? Kyung ---- ---- ' Open the attribute table window. Dim pTableWindow As ITableWindow Set pTableWindow = New TableWindow Set pTableWindow.FeatureLayer = pFeatureLayer Set pTableWindow.Application = Application pTableWindow.TableSelectionAction = esriSelectFeatures pTableWindow.ShowAliasNamesInColumnHeadings = True pTableWindow.Show True ' Get the properties for this table window. Dim pTableProperties As ITableProperties Dim pEnumTableProperties As IEnumTableProperties Dim pTableProperty As ITableProperty Set pTableProperties = pMxDoc.TableProperties Set pEnumTableProperties = pTableProperties.IEnumTableProperties pEnumTableProperties.Reset Set pTableProperty = pEnumTableProperties.Next ' Re-order the fields pTableProperty.FieldOrder = "OBJECT_ID, UFI, MF, NT, UNI, LAT, LONG" ' Freeze the first 4 fields on the left side of the attribute table pTableProperty.FrozenFields = 4 Dim pTableControl As ITableControl Set pTableControl = pTableWindow.TableControl pTableControl.Redraw ' Refresh the active view. pActiveView.Refresh ---- ----
... View more
02-04-2011
06:20 AM
|
0
|
8
|
2703
|
POST
|
Hi, I have a query which brings back a selectionset on a SQL database in C#. I want to take that table and create a FileGDB featureclass from it in a scratchworkspace. I am trying to create the FeatureDataSet for the Featureclass from the derived table I have retreived from SQL. my System.Data.DataTable will not convert to IFeatureDataSet. If you have any advice it is welcome, Andrew.... I don't know well, but if you don't mind my comment... Are you trying to get IFeatureDataset directly from the table? Probably, I think that you need first get IFeatureClass from the table by using IFeatueDataConverter, and then you get IFeatureDataset from the IFeatureClass. Did you try this way already? Kyung
... View more
02-01-2011
08:15 AM
|
0
|
0
|
598
|
POST
|
Thank you, Duncan! It worked well. I really appreciate your help, really! Kyung
... View more
01-31-2011
04:02 AM
|
0
|
0
|
228
|
POST
|
Yes, I am sure that the Excel sheet had everything correct. Kyung
... View more
01-28-2011
03:56 AM
|
0
|
0
|
228
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|