怎么得到ADO对象连接表的主键???主要是AdoDataset对象连接表的主键???(200分)

  • 主题发起人 主题发起人 wumeng
  • 开始时间 开始时间
W

wumeng

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么得到ADO原生对象连接表的主键???
 
self.ADODataSet1.GetIndexNames()
 
我试了,不行。返回的是空值。
这个问题我已经试了好久了。最后在ADO的帮助中看到。ADO有key和keys集合,当它的
Type 属性 是 adKeyPrimary 关键字是主关键字。
AdKeyForeign 关键字是外部关键字。
AdKeyUnique 关键字是唯一的。

我看到这,才知道也许能够用ADO的原生对象找到TABLE的关键字。
 
for Index:=0 to DataSet.Fields.Count-1 do
Dataset.fields.Fields[Index].IsIndexField=true
begin
//这里就是主键了
end
 
对了,我用的是SQL2K,不是本地数据库。以上两位的方法对本地数据库可能是可以得到
Index的,但对SQL2K,我刚才测试了一下,得到的是空值。

希望大家继续努力,谢谢!!!
 
不可能,我就是在SQL2K下测试的
 
to xiaoywh
你直接选择你的DATASET控件,然后在对象观察器中看IndexFieldNames和IndexName是不是
为空?我的是为空的,不管你的控件是不是ACTIVE。
 
BDE应该没问题呀,我试了
indexdefs中存放索引名
indexfieldNames='KeyField1;KeyField2'
 
不行就用这句SQL来取吧
SELECT b.name 表名, c.name 字段名
FROM sysindexkeys a INNER JOIN
sysobjects b ON a.id = b.id INNER JOIN
syscolumns c ON b.id = c.id AND a.colid = c.colid
WHERE (b.name = 'dttest2') //dttest2 是自定义的表名

可以把它写成一个函数扩充到你的ADO DATASET中 则能取出表的所有信息
 
GetIndexNames获得数据表的索引
主键列创建唯一索引强制数据的唯一性
代码:
//--获得AdoTable1的主键字段信息
var i:integer;
begin
  Adotable1.IndexDefs.Update ;
  for i:= 0 to Adotable1.IndexDefs.Count -1 do
  if ixPrimary in  AdoTable1.IndexDefs.Items[i].Options then
    caption:= AdoTable1.IndexDefs[i].Fields;
具体内部实现参考TCustomADODataSet.UpdateIndexDefs
 
xiaoywh给的SQL语句方法比较对,这样可取得表的所有索引,但不是主键。
取得主键应该使用系统的存储过程:sp_MStablekeys ‘表名’。
可得一条记录,其中的字段cKeyCol(1-16)不为空的是主键的字段名,如果有多列不这空,则
说明这个表使用的是多字段联合主键,同时也说明SQLServer的表,最多可以设置成16个字
段的联合主键(估计没人这么用)。

俺的《数据库文档生成器专业版》中取数据库主键用的就是这个方法!
http://cloud.prohosting.com/ccxx/
 
谢谢大家,我试过后现说。
 
我用的是:sp_MStablekeys ‘表名’。
谢谢大家的参与!!!
 
后退
顶部