Вы устанавливаете соединение и открываете его как обычно (используя 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);
Это выглядит великолепно. Это просто .. как написать VarArrayOf ([DatabaseName, SchemaName, TableName]) в C++ Builder? – Tracer
@Tracer: [документация] (http://docwiki.embarcadero.com/Libraries/XE4/en/System.Variants.VarArrayOf) показывает синтаксис C++ Builder (есть ссылка на пример кода C++ внизу эта страница также). –
Спасибо. Я этого не видел. Теперь я попытаюсь закодировать это. – Tracer