#include "stdafx.h" #include "TableHelper.h" // ************************************************** // Cast() // ************************************************** CTableClass* TableHelper::Cast(CComPtr& table) { return (CTableClass*)&(*table); } // ************************************************** // GetNumRows() // ************************************************** long TableHelper::GetNumRows(ITable* table) { if (!table) return 0; long numRows; table->get_NumRows(&numRows); return numRows; } // ************************************************** // GetNumFields() // ************************************************** long TableHelper::GetNumFields(ITable* table) { if (!table) return 0; long numFields; table->get_NumFields(&numFields); return numFields; } // ************************************************** // SetFieldValues() // ************************************************** void TableHelper::SetFieldValues(ITable* table, int rowIndex, CustomExpression& expr ) { if (!table) return; for (long j = 0; j< expr.get_NumFields(); j++) { CComVariant var; int fieldIndex = expr.get_FieldIndex(j); table->get_CellValue(fieldIndex, rowIndex, &var); switch (var.vt) { case VT_BSTR: expr.put_FieldValue(j, var.bstrVal); break; case VT_I4: expr.put_FieldValue(j, (double)var.lVal); break; case VT_R8: expr.put_FieldValue(j, (double)var.dblVal); break; } } // TODO: don't set shape, if the expression doesn't contain geometry function IShapefile* sf = ((CTableClass*)table)->GetParentShapefile(); // doesn't add reference if (sf) { CComPtr shp = NULL; sf->get_Shape(rowIndex, &shp); if (shp) { expr.put_Shape(shp); } } }