ThinkGeo.com    |     Documentation    |     Premium Support

Can't query FileGeoDatabaseFeatureLayer

Hi, 



It seems that you are not able to use QueryTools functions on GeoDatabase even though they are visible to FileGeoDatabaseFeatureLayer.  The layer says CanExecuteSQLQuery is always false.



Is this an oversight or something more challenging?



Thanks,

Damian

Hi Damian, 
  
 Thanks for your report about that. The CanExecuteSQLQuery should be true for FileGeoDatabaseFeatureLayer. 
  
 We have fixed that in the version 7.0.63.0 or higher version. 
  
 Regards, 
  
 Don

Hi Don,



It seems I can run the query now and return the results to DataTable and then pass them to a DataGridView controls DataSource to review them ; however, there seems to be some issues with what is being returned.



1.  Regardless of my SQL statement, the DataTable returned contains all records and columns from the table being queried.



2.  When I try to use WHERE statement, I get errors saying “An expected Field was not found or could not be retrieved properly”  For example, 

SELECT * FROM “MY_TABLE” WHERE COUNTRY="Norway"



3. When I try to use GROUP BY, I get errors saying “An invalid SQL statement was used”.  For example, 

SELECT COUNTRY, COUNT(OBJECTID) As “Count of objects” FROM “MY_TABLE” GROUP BY COUNTRY



I’ve tried various syntax such as quotes, single quotes and brackets for table names and field names, but it doesn’t seem to make any difference.  Maybe I am doing something wrong.  I’ve looked for tutorial on this on the wiki and searched the forum, but didn’t find any examples.



I also find it a bit odd that I must supply a table name to the FileGeoDatabaseFeatureLayer in order to Open() it before I can ExecuteQuery even if the query itself relates to a different table other than specified in TableName.



Thanks,

Damian


Hi Damian, 
  
 1. I think we can enhancement it future, the return DataTable contains all columns but don’t contains each row. That’s because fileGeodatabase return everything no matter how to select and we cannot parse all conditions well, so just keep the result. 
  
 2. We tested “Where” should works, this error caused by quotes, you should use single quotes for table name here. 
  
 3. Something like ‘Group by’ ‘Order by’ works, this error caused by ‘as “xxx”’, you need remove quotes just use it like ‘as xxx’. But I am sorry it looks the Count(*) cannot be shown in result now. 
  
 4. Provide a table name when create this instance is for some other operations of our layer, but don’t have big related with ExcuteQuery. 
  
 Any question please let us know. 
  
 Regards, 
  
 Don

Hi Don, 
  
 Thanks, I can now get WHERE clause to work using single quotes for the search text.  It’s great I don’t get entire dataset now. 
  
 ORDER BY clause was okay previously. 
  
 GROUP BY clause is a different story though as you need to provide an aggregate function such as COUNT or SUM to return results.  Something comes to mind though as to why this won’t work.  Typically, GROUP BY clause cannot be used with SELECT *.  I am thinking that the fact that the return to the DataTable always contains all columns(i.e. *) that this is why I always get the invalid SQL statement error.  Perhaps if you can fix the DataTable return issue, this will be fixed as well. 
  
 I also found another issue in that GetFeaturesByColumnValue always produces Field not found error if you use any other column name other than OBJECTID which is one reason I looked into ExecuteQuery initially. 
  
 Regards, 
 Damian

Hi Damian,  



Thanks for your further information 



About Group By from: forums.arcgis.com/threads/84665-SQL-queries-on-File-Geodatabases the filegdb api is not updated so it could not support group by for now, and will be availabe in next filegdb api version. 



About “GetFeaturesByColumnValue” if the field is string type, then should use 

“filegdb.FeatureSource.GetFeaturesByColumnValue(“field”, “‘value’”);”  

rather 

“filegdb.FeatureSource.GetFeaturesByColumnValue(“field”, “value”);” 



if you have any more question , please feel free to let us know. 



Best Regards 



Summer

Tricky!  Thanks, the single quotes for string value works. 
  
 Hopefully ESRI update the api soon to support aggregate functions. 
  
 Regards, 
 Damian

Hi Damian, 
  
 Great to hear it helped, if you have any more question, please feel free to let us know. 
  
 Best Regards 
  
 Summer