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

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

Добавил на всякий случай, чтобы не забыть…. Немного подправил! =)

// Читаем файл (любой версии)
// Проверяем что это ACCESS MDB
// Нужны компаненты:
// TADOtable,TDataSource,TOpenDialog,TDBGrid,TBitBtn.
// Исправил: TUsers на ADOTable1 - Не всем просто сразу понятно, что такое TUsers
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
	ADOTable1.ConnectionString :=
	'Provider=Microsoft.Jet.OLEDB.4.0;' +
	'Data Source=' + lDBPathName + ';' +
	'Persist Security Info=False;' +
	'Jet OLEDB:Database Password=' + DBPASSWORD;
	ADOTable1.TableName := 'Users';
	ADOTable1.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 7.

Источник: http://www.delphisources.ru/pages/faq/base/read_access_with_ado.html