var i:integer; begin Table1.Active := False; Table1.Exclusive := True; Table1.IndexDefs.Update; for i:=0 to Table1.IndexDefs.Count-1 do begin if ixPrimary in Table1.IndexDefs[i].Options then begin Memo1.Lines.Add('主键名称:'+Table1.indexDefs[0].Name); Memo1.Lines.Add('主键字段:'+Table1.IndexDefs[0].Fields ); end; end; end;
ADO有封装这个吗?读系统表不知道行不行
kkgogo(kkgogo) 不行呀,那位大侠做过呀?
select a.name 主键名称 FROM syscolumns a inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' inner join sysobjects b on b.xtype='PK' and b.parent_obj = a.id and b.name in(SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid )) where d.name = 'jobs' --此处jobs替换为待查表名
function TForm1.getprimarykey(Adotable: Tadotable): string; var i:integer; begin Adotable.IndexDefs.Update; for i:=0 to Adotable.IndexDefs.Count-1 do if ixprimary in Adotable.IndexDefs[i].Options then Result := Adotable.IndexDefs[0].Fields else Result := ''; end; 问题已解决,以上是我测试过的代码!
i:integer;
begin
Table1.Active := False;
Table1.Exclusive := True;
Table1.IndexDefs.Update;
for i:=0 to Table1.IndexDefs.Count-1 do
begin
if ixPrimary in Table1.IndexDefs[i].Options then
begin
Memo1.Lines.Add('主键名称:'+Table1.indexDefs[0].Name);
Memo1.Lines.Add('主键字段:'+Table1.IndexDefs[0].Fields );
end;
end;
end;
FROM syscolumns a inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
inner join sysobjects b on b.xtype='PK' and b.parent_obj = a.id
and b.name in(SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))
where d.name = 'jobs' --此处jobs替换为待查表名
如果是其它数据库如果有系统表也就好办了,只要知道系统表的结构就行了
:)
var
i:integer;
begin
Adotable.IndexDefs.Update;
for i:=0 to Adotable.IndexDefs.Count-1 do
if ixprimary in Adotable.IndexDefs[i].Options then
Result := Adotable.IndexDefs[0].Fields
else
Result := '';
end;
问题已解决,以上是我测试过的代码!