您像往常一样建立连接并打开它(使用TADOConnection.ConnectionString 和TADOConnection.Open),然后使用OpenSchema 请求架构。您作为最后一个参数提供的 TADODataSet 将包含一个 RecordSet,您可以像使用任何其他数据集一样使用它。
这是我放在一起的一个快速示例(感谢@bummi 对第三个参数的更正 - Unassigned 和 Null 都已编译,但在测试时实际上并没有工作)。我在一个新表单上删除了TADOConnection、TADODataSet 和TMemo,并快速配置了TADOConnection 以指向一个简单的SQL Server Express 数据库,我有一些测试用——我包含了连接字符串;我对其所做的唯一更改是在Data Source 部分中提供的计算机名称中)。
procedure TForm3.FormShow(Sender: TObject);
var
i: Integer;
sLine: string;
begin
Memo1.Clear;
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;' +
'Integrated Security=SSPI;' +
'Persist Security Info=False;' +
'Initial Catalog=Contacts;' +
'Data Source=MyComputer\SQLEXPRESS';
ADOConnection1.Connected := True;
ADOConnection1.OpenSchema(siPrimaryKeys, Unassigned, EmptyParam, ADODataSet1);
sLine := '';
for i := 0 to ADODataSet1.FieldCount - 1 do
sLine := sLine + ADODataSet1.Fields[i].FieldName + #9;
Memo1.Lines.Add(sLine);
Memo1.Lines.Add('');
while not ADODataSet1.Eof do
begin
sLine := '';
for i := 0 to ADODataSet1.FieldCount - 1 do
sLine := sLine + ADODataSet1.Fields[i].AsString + #9;
Memo1.Lines.Add(sLine);
ADODataSet1.Next;
end;
end;
SchemaInfo 值的可能值(传递给 OpenSchema 的第一个参数)可以在 ADODB 单元中找到 - 它们记录在 Delphi help file 中(请注意,文档中说并非所有其中可通过 ADO 获得):
TSchemaInfo = (siAsserts, siCatalogs, siCharacterSets, siCollations,
siColumns, siCheckConstraints, siConstraintColumnUsage,
siConstraintTableUsage, siKeyColumnUsage, siReferentialConstraints,
siTableConstraints, siColumnsDomainUsage, siIndexes, siColumnPrivileges,
siTablePrivileges, siUsagePrivileges, siProcedures, siSchemata,
siSQLLanguages, siStatistics, siTables, siTranslations, siProviderTypes,
siViews, siViewColumnUsage, siViewTableUsage, siProcedureParameters,
siForeignKeys, siPrimaryKeys, siProcedureColumns, siDBInfoKeywords,
siDBInfoLiterals, siCubes, siDimensions, siHierarchies, siLevels,
siMeasures, siProperties, siMembers, siProviderSpecific);