// eine neue Objekteigenschaft soll erzeugt werden STDMETHODIMP CFastdbFeatures::OnCreate (VARIANT Name, BSTR Type, FEATURETYPE rgType, ITRiASFeature **ppIFeat) { CHECKOUTPOINTER(ppIFeat); USES_CONVERSION; COM_TRY { // jetzt wirklich erzeugen CIID ClsId (Type, CIID::INITCIID_InitFromProgId); if (!ClsId) ClsId = CLSID_FastdbFeature; // default ClsId WTRiASFeatures BaseFeats; WDispatch Parent; THROW_FAILED_HRESULT(m_BaseUnk -> QueryInterface (BaseFeats.ppi())); THROW_FAILED_HRESULT(BaseFeats -> get_Parent (Parent.ppi())); // Parent muß hier Objektklasse sein WTRiASObjects Objs; THROW_FAILED_HRESULT(Parent -> QueryInterface (Objs.ppi())); // neuen Satz erzeugen und zu der Objektklasse hinzufügen LONG lCursor (GetPropertyFrom (Objs, g_cbObjectsCursor, 0L)); _ASSERTE(0 != lCursor); dbDatabase *pdb = GetRelatedDatabase(GetUnknown()); dbCursor<CDBClass> cursor (pdb); CDBClass *pClass = cursor.at (dbReference<CDBClass>(oid_t(lCursor))); if (NULL == pClass || cursor.isEmpty()) THROW_FAILED_HRESULT(FASTDB_E_OBJECTS_BADREFERENCE); CComVariant vVal; CDBFeatureDesc FDesc; THROW_FAILED_HRESULT(vVal.ChangeType (VT_BSTR, &Name)); FDesc.m_pName = OLE2A(V_BSTR(&vVal)); FDesc.m_rgType = rgType; FDesc.objclass = cursor.currentId(); dbCursor<CDBFeatureDesc> featuredesc (GetRelatedDatabase(GetUnknown())); featuredesc.at (pdb -> insert (FDesc)); THROW_FAILED_HRESULT(SetupFeature (ClsId, BaseFeats, featuredesc, Parent, ppIFeat)); } COM_CATCH; return S_OK; }
HRESULT CFastdbFeature::OnChangedName() { USES_CONVERSION; COM_TRY { // neuen Namen vom Bezugsobjekt besorgen CComBSTR bstrName; WTRiASFeature BaseFeat; THROW_FAILED_HRESULT(m_BaseUnk -> QueryInterface (BaseFeat.ppi())); THROW_FAILED_HRESULT(BaseFeat -> get_Name(CLEARED(&bstrName))) // zugehöriges DB-Objekt referenzieren LONG lCursor (GetPropertyFrom (BaseFeat, g_cbFeatureCursor, 0L)); if (0 != lCursor) { // Objekt fertig initialisiert dbCursor<CDBFeatureDesc> cursor (GetRelatedDatabase(GetUnknown()), dbCursorForUpdate); CDBFeatureDesc *pFeatDesc = cursor.at (dbReference<CDBFeatureDesc>(oid_t(lCursor))); if (NULL == pFeatDesc || cursor.isEmpty()) THROW_FAILED_HRESULT(FASTDB_E_FEATURE_BADREFERENCE); cursor -> m_pName = OLE2A(bstrName); cursor.update(); } } COM_CATCH; return S_OK; }