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

Читаем файл Access используя ADO

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

Читаем файл Access используя ADO


// Читаем файл (любой версии) 
// Проверяем что это ACCESS MDB 
// Нужны компаненты: 
// TADOtable,TDataSource,TOpenDialog,TDBGrid,TBitBtn. 
unit uMain; 

interface 

uses 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
Db, DBTables, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Buttons; 

type 
  TfrmMain = class(TForm) 
    DSUsers: TDataSource; 
    DBGridUsers: TDBGrid; 
    BitBtn1: TBitBtn; 
    OpenDialog1: TOpenDialog; 
    TUsers: TADOTable; 
    procedure FormCreate(Sender: TObject); 
    procedure ValidateAccessDB; 
    function CheckIfAccessDB(lDBPathName: string): boolean; 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 

var 
  frmMain: TfrmMain; 
const 
  DBNAME = 'ADODemo.MDB'; 
  DBPASSWORD = '123'; // Access DB Password Protected 

implementation 

{$R *.DFM} 

procedure TfrmMain.FormCreate(Sender: TObject); 
begin 
  validateAccessDB; 
end; 

procedure TfrmMain.ValidateAccessDB; 
var 
  lDBpathName : String; 
  lDBcheck : boolean; 
begin 
  if FileExists(ExtractFileDir(Application.ExeName) + '\' + DBNAME) then 
    lDBPathName := ExtractFileDir(Application.ExeName) + '\' + DBNAME 
  else if OpenDialog1.Execute then 
    // Set the OpenDialog Filter for ADOdemo.mdb only 
    lDBPathName := OpenDialog1.FileName; 

  lDBCheck := False; 
  if Trim(lDBPathName) <> '' then 
    lDBCheck := CheckIfAccessDB(lDBPathName); 

  if lDBCheck = True then 
  begin 
    // ADO Connection String to the MS-ACCESS DB 
    TUsers.ConnectionString := 
      'Provider=Microsoft.Jet.OLEDB.4.0;' + 
      'Data Source=' + lDBPathName + ';' + 
      'Persist Security Info=False;' + 
      'Jet OLEDB:Database Password=' + DBPASSWORD; 
    TUsers.TableName := 'Users'; 
    TUsers.Active := True; 
  end 
  else 
    frmMain.Free; 
end; 

// Check if it is a valid ACCESS DB File Before opening it. 

function TfrmMain.CheckIfAccessDB(lDBPathName: string): Boolean; 
var 
  UnTypedFile: file of byte; 
  Buffer: array[0..19] of byte; 
  NumRecsRead: Integer; 
  i: Integer; 
  MyString: string; 
begin 
  AssignFile(UnTypedFile, lDBPathName); 
  reset(UnTypedFile); 
  BlockRead(UnTypedFile, Buffer, High(Buffer), NumRecsRead); 
  CloseFile(UnTypedFile); 
  for i := 1 to High(Buffer) do 
    MyString := MyString + Trim(Chr(Ord(Buffer[i]))); 
  Result := False; 
  if Mystring = 'StandardJetDB' then 
    Result := True; 
  if Result = False then 
    MessageDlg('Invalid Access Database', mtInformation, [mbOK], 0); 
end; 
end.

Перевод контента на русский язык:

Код написан на Delphi и использует ADO (ActiveX Data Objects) для чтения файла базы данных Access. Вот разбивка кода:

Основная форма Основная форма (TfrmMain) имеет несколько компонентов:

  • DSUsers: источник данных
  • DBGridUsers: компонент DB grid
  • BitBtn1: кнопка (не используется в этом примере)
  • OpenDialog1: диалог открытия компонента
  • TUsers: компонент таблицы ADO

Событие FormCreate основной формы вызывается при создании формы и вызывает процедуру ValidateAccessDB.

ValidateAccessDB Эта процедура проверяет, существует ли файл базы данных Access или нужно его открыть с помощью диалога открытия OpenDialog1. Если файл существует или открывается успешно, она проверяет, является ли файл валидной базой данных Access с помощью функции CheckIfAccessDB. Если это валидная база данных Access, она настраивает строку подключения ADO и активную таблицу.

CheckIfAccessDB Функция проверяет, является ли данный файл пути к валидной базе данных Access, прочитав первые 20 байт файла и проверив наличие строки "StandardJetDB". Это не foolproof метод, потому что другие файлы также могут иметь эту строку в их заголовке. Лучше использовать функциональность ADO для проверки, является ли это валидной базой данных Access.

Предложения по улучшению кода Вот несколько предложений по улучшению кода:

  • Вместо жесткого кодирования имени файла базы данных (DBNAME), рассмотрите возможность позволить пользователю выбрать другой файл с помощью диалога открытия OpenDialog1.
  • Функция CheckIfAccessDB могла быть улучшена, проверив расширение файла (MDB) и используя функциональность ADO для проверки, является ли это валидной базой данных Access.
  • Обработка ошибок минимальна. Рассмотрите возможность добавления более robust обработки ошибок для случаев, когда файл не может быть открыт или прочитан.
  • Код использует глобальную переменную (frmMain). Рассмотрите возможность передачи формы в процедуры, которые нуждаются в доступе к ее компонентам.

Альтернативное решение Вместо использования функции CheckIfAccessDB можно использовать функциональность ADO для проверки, является ли это валидной базой данных Access. Можно создать объект подключения ADO и попытаться подключиться к файлу с помощью провайдера OLEDB. Если подключение успешно, то вероятно, что это валидная база данных Access. Вот пример:

function TfrmMain.IsAccessDB(lDBPathName: string): Boolean;
var
  Conn: TADOConnection;
begin
  Conn := TADOConnection.Create(nil);
  try
    Conn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + lDBPathName + ';';
    Conn.Open;
    Result := True;
  except
    Result := False;
  end;
  Conn.Free;
end;

Функция создает объект подключения ADO, настраивает строку подключения к файлу с помощью провайдера OLEDB и пытается открыть соединение. Если соединение успешно, она возвращает True. Иначе, она возвращает False.

В статье описывается пример использования ActiveX Data Objects (ADO) для чтения файла Microsoft Access (MDB) в программе на языке Delphi.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 00:31:22/0.0034961700439453/0