Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Работа с таблицами MS Access в Delphi XE3: получение структур и сравнение баз данных

Delphi , Базы данных , Access

При разработке приложений с использованием Delphi XE3 для работы с базами данных MS Access часто возникает необходимость в получении списка таблиц, исключая из него представления и запросы. Это может потребоваться, например, для сравнения структур таблиц двух баз данных и создания скрипта для их модификации или синхронизации.

Проблема

Разработчик столкнулся с задачей получения списка таблиц в MS Access, исключая представления и запросы. Попытки использовать метод ADOConnection1.GetTableNames приводили к возвращению всех таблиц и представлений. Также была попытка использовать запрос к системе MS Access, но это требовало наличия файла System.mdw, который не всегда присутствует.

Решение

Для решения этой проблемы можно использовать метод OpenSchema, передавая в него значение _siTables, и затем отфильтровать результаты с помощью столбца TABLE_TYPE возвращаемого набора данных. В примере кода ниже демонстрируется, как можно получить список таблиц, исключая представления и запросы.

{$APPTYPE CONSOLE}
{$R *.res}
uses
  SysUtils,
  ActiveX,
  ComObj,
  Adodb,
  Variants;

procedure ListTables(const FileName: string);
var
  LADOConnection: TADOConnection;
  LADODataSet: TADODataSet;
begin
  LADOConnection := TADOConnection.Create(nil);
  try
    LADOConnection.ConnectionString := Format('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=False;', [FileName]);
    LADODataSet := TADODataSet.Create(nil);
    try
      LADODataSet.Connection := LADOConnection;
      LADOConnection.Open;
      LADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, LADODataSet);

      LADODataSet.Filter := '(TABLE_TYPE = ''TABLE'')'; // показывать только таблицы
      LADODataSet.Filtered := True;

      while not LADODataSet.EOF do
      begin
        Writeln(Format('Name %s Type %s', [LADODataSet.FieldByName('TABLE_NAME').AsString, LADODataSet.FieldByName('TABLE_TYPE').AsString]));
        LADODataSet.Next;
      end;
    finally
      LADODataSet.Free;
    end;
  finally
    LADOConnection.Free;
  end;
end;

begin
  try
    CoInitialize(nil);
    try
      ListTables('C:\Test\Northwind.MDB');
    finally
      CoUninitialize;
    end;
  except
    on E: EOleException do
      Writeln(Format('EOleException %s %x', [E.Message, E.ErrorCode]));
    on E: Exception do
      Writeln(E.Classname, ':', E.Message);
  end;
  Writeln('Press Enter to exit');
  Readln;
end.

Примечание

Благодарность пользователю RRUZ за предоставленный рабочий пример кода. Использование фильтра позволило успешно решить проблему, над которой разработчик работал несколько недель.

Заключение

При использовании Delphi XE3 для работы с базами данных MS Access, важно правильно использовать методы и свойства компонентов ADO для получения необходимой информации о структуре таблиц. Приведенный пример кода демонстрирует, как можно эффективно исключить представления и запросы из списка, получаемого с помощью OpenSchema. Это может быть полезно при разработке приложений для сравнения и синхронизации структур таблиц в разных базах данных.

Создано по материалам из источника по ссылке.

Разработчик использует Delphi XE3 для работы с базами данных MS Access и сталкивается с задачей получения списка таблиц, исключая представления и запросы, для сравнения структур баз данных.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Access ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:54:20/0.013972997665405/1