// // Copyright (C) 2007 Refractions Research, Inc. // // This library is free software; you can redistribute it and/or // modify it under the terms of version 2.1 of the GNU Lesser // General Public License as published by the Free Software Foundation. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #include #include #include #include #include #include #include "fdoutility.h" using namespace fdoutility; using namespace std; int main(int argc, char* argv[]) { try { std::wstring provider(L"OSGeo.PostGIS.3.2"); // Connection string with datastore specified std::wstring ds(L"public"); std::wstring connStr(L"service=test@localhost;username=mloskot;password=pantera;"); // Connect FdoPtr conn = fdoutility::create_connection(provider); connStr += L"datastore=" + ds; conn->SetConnectionString(connStr.c_str()); FdoConnectionState state = conn->Open(); cout << "Connection state: " << state << endl; // FDO Developer’s Guide, Updating Values, Page 97 // // 1. Create an FdoIUpdate command object FdoPtr cmd; cmd = static_cast(conn->CreateCommand(FdoCommandType_Update)); assert(0 != cmd); // 2. Use the command object's SetFeatureClassName() method to identify the feature class. cmd->SetFeatureClassName(L"FdoPostGIS:public~Buildings"); // 3. Create a filter to identity the feature class objects that you want to update // and attache the filter to the command. // Use the name of the identity property in the filter cmd->SetFilter(L"( AttrId = 10 )"); // 4. Create a property value, which contains the new value and // attach it to the command object. FdoPtr values; values = cmd->GetPropertyValues(); FdoPtr valueName = FdoDataValue::Create(L"Green Lake"); FdoPtr propValue = FdoPropertyValue::Create(); propValue->SetName(L"AttrName"); propValue->SetValue(valueName); values->Add(propValue); // New Geometry FdoPtr gf(FdoFgfGeometryFactory::GetInstance()); assert(NULL != gf); double coords[] = { 1.123, 1.456 }; FdoPtr point; point = gf->CreatePoint(FdoDimensionality_XY, coords); FdoPtr geomValue = NULL; geomValue = FdoPtr(FdoGeometryValue::Create(FdoPtr(gf->GetFgf(point)))); FdoPtr propValueGeom; propValueGeom = FdoPropertyValue::Create(L"samplegeometry", geomValue); values->Add(propValueGeom); // 5. Execute the Insert command FdoInt32 affected = cmd->Execute(); std::cout << "Number of deleted features: " << affected << std::endl; conn->Close(); return 0; } catch (FdoException* ex) { std::wcout << L"*** FDO Error:\n"; int i = 5; FdoException* nex = ex; while (NULL != nex) { const wchar_t* msg = nex->GetExceptionMessage(); if (NULL == msg) { msg = L"NO MESSAGE"; } std::wcout << std::setw(++i) << L"*** " << msg << std::endl; FdoException* p = nex; nex = nex->GetCause(); p->Release(); } } catch(std::exception& ex) { std::cout << "*** Std Error: " << ex.what() << std::endl; } catch(...) { std::cout << "*** Undefined error!\n" << std::endl; } return 0; }