- GIS论坛-GIS空间站 ( http://bbs.gissky.net/Default.asp )
-- ESRI(ArcGIS) ( http://bbs.gissky.net/ShowForum.asp?forumid=10 )
--- 如何知道某一字段是主键 ( http://bbs.gissky.net/ShowPost.asp?id=44691 )
作者:liwenxuan
发表时间:2008-6-19 8:51:18
<DIV class=t_msgfont id=postmessage_287333>IFeatureWorkspacePtr ipFeatWorkspace(m_ipWS); ITablePtr ipTable; BSTR bstrTableName = L"abc"; //BSTR bstrTableName = L"townshp";Overlay3_On_LINE1 hr = ipFeatWorkspace->OpenTable(bstrTableName, &ipTable); IFieldsPtr pFields; hr = ipTable->get_Fields(&pFields); IQueryDefPtr queryDef; ipFeatWorkspace->CreateQueryDef(&queryDef); hr = queryDef->put_Tables(bstrTableName); long lFieldCount; hr = pFields->get_FieldCount(&lFieldCount); lFieldCount -= 1;
IQueryName2Ptr queryName2(CLSID_TableQueryName); CComBSTR bstrFields; for(long k = 0; k <= lFieldCount; k++) { IFieldPtr pField; hr = pFields->get_Field(k,&pField); BSTR bstrFieldName; hr = pField->get_Name(&bstrFieldName); hr = bstrFields.AppendBSTR(bstrFieldName); if(k < lFieldCount) hr = bstrFields.Append(","); } hr = queryDef->put_SubFields(bstrFields.m_str); hr = queryName2->put_QueryDef(queryDef); BSTR primaryFieldName; hr = queryName2->get_PrimaryKey(&primaryFieldName); 表中有主键,为什么primaryFieldName是空的 如何知道该字段是主键 </DIV>
作者:liwenxuan
发表时间:2008-6-19 9:32:46
上面的方法为什么得不到主键,我不知原因。从开发帮助上看,采用这种方法查询时,大多是设置PrimaryKey,而不是获取PrimaryKey. 从开发帮助上看,判断一个表是否有主键,可能是判断其是否有Object ID (OID)。因为OID是唯一的。 我写了一个判断的小例子如下: IFeatureWorkspacePtr ipFeatWorkspace(m_ipWS); ITablePtr ipTable; //BSTR bstrTableName = L"abc"; //Access文件 表,无OID BSTR bstrTableName = L"townshp"; //shapefile文件,有oid //BSTR bstrTableName = L"Overlay3_On_LINE1";//Access文件 表,有OID hr = ipFeatWorkspace->OpenTable(bstrTableName, &ipTable); IClassPtr pClass(ipTable); VARIANT_BOOL bHasOID; pClass->get_HasOID(&bHasOID);
发表您的观点,进入该主题参与讨论...
作者:tsing_feng
发表时间:2008-6-20 13:04:07
替换your tabe name为你的表名即可 select count(*) from [sysobjects] where xtype = 'pk'and parent_obj in (select [id] from [sysobjects] where [name] = 'your table')
发表您的观点,进入该主题参与讨论...
作者:tsing_feng
发表时间:2008-6-20 13:04:56
返回1表示有主键,0则相反。 取主键字段名称和类型 select [name], CASE xtype WHEN 34 THEN 'Image' WHEN 35 THEN 'Text' WHEN 48 THEN 'TinyInt' WHEN 52 THEN 'SmallInt' WHEN 56 THEN 'Int' WHEN 58 THEN 'SmallDateTime' WHEN 59 THEN 'Real' WHEN 60 THEN 'Money' WHEN 61 THEN 'DateTime' WHEN 62 THEN 'Float' WHEN 99 THEN 'NText' WHEN 104 THEN 'Bit' WHEN 106 THEN 'Decimal' WHEN 122 THEN 'SmallMoney' WHEN 127 THEN 'BigInt' WHEN 165 THEN 'VarBinary' WHEN 167 THEN 'VarChar' WHEN 173 THEN 'Binary' WHEN 175 THEN 'Char' WHEN 231 THEN 'NVarChar' WHEN 239 THEN 'NChar' ELSE '!MISSING' end as type from syscolumns where [id] in (select [id] from [sysobjects] where [name] = 'your tabe name') and colstat=1
发表您的观点,进入该主题参与讨论...
|