// Читаем Access`овскую базу используя ADO // Проверяе являеться ли файл .mdb Access// Записываем запись в базу // Нужны компаненты- // TADOtable,TDataSource,TOpenDialog,TDBGrid, // TBitBtn,TTimer,TEditTextBox program ADOdemo;
uses Forms, uMain in 'uMain.pas' {frmMain};
{$R *.RES}begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
/////////////////////////////////////////////////////////////////// unit uMain;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Buttons,
ComObj;
type
TfrmMain = class(TForm)
DBGridUsers: TDBGrid;
BitBtnClose: TBitBtn;
DSource1: TDataSource;
EditTextBox: TEdit;
BitBtnAdd: TBitBtn;
TUsers: TADOTable;
BitBtnRefresh: TBitBtn;
Timer1: TTimer;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure ConnectToAccessDB(lDBPathName, lsDBPassword: string);
procedure ConnectToMSAccessDB(lsDBName, lsDBPassword: string);
procedure AddRecordToMSAccessDB;
function CheckIfAccessDB(lDBPathName: string): Boolean;
function GetDBPath(lsDBName: string): string;
procedure BitBtnAddClick(Sender: TObject);
procedure BitBtnRefreshClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
function GetADOVersion: Double;
procedure Button1Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
frmMain: TfrmMain;
Global_DBConnection_String: string;
const
ERRORMESSAGE_1 = 'No Database Selected';
ERRORMESSAGE_2 = 'Invalid Access Database';
implementation{$R *.DFM}procedure TfrmMain.FormCreate(Sender: TObject);
begin
ConnectToMSAccessDB('ADODemo.MDB', '123'); // DBName,DBPassword end;
procedure TfrmMain.ConnectToMSAccessDB(lsDBName, lsDBPassword: string);
var
lDBpathName: string;
begin
lDBpathName := GetDBPath(lsDBName);
if (Trim(lDBPathName) <> '') thenbeginif CheckIfAccessDB(lDBPathName) then
ConnectToAccessDB(lDBPathName, lsDBPassword);
endelse
MessageDlg(ERRORMESSAGE_1, mtInformation, [mbOK], 0);
end;
function TfrmMain.GetDBPath(lsDBName: string): string;
var
lOpenDialog: TOpenDialog;
begin
lOpenDialog := TOpenDialog.Create(nil);
if FileExists(ExtractFileDir(Application.ExeName) + '\' + lsDBName) then
Result := ExtractFileDir(Application.ExeName) + '\' + lsDBName
elsebegin
lOpenDialog.Filter := 'MS Access DB|' + lsDBName;
if lOpenDialog.Execute then
Result := lOpenDialog.FileName;
end;
end;
procedure TfrmMain.ConnectToAccessDB(lDBPathName, lsDBPassword: string);
begin
Global_DBConnection_String :=
'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' + lDBPathName + ';' +
'Persist Security Info=False;' +
'Jet OLEDB:Database Password=' + lsDBPassword;
with TUsers dobegin
ConnectionString := Global_DBConnection_String;
TableName := 'Users';
Active := True;
end;
end;
// Check if it is a valid ACCESS DB File Before opening it. function TfrmMain.CheckIfAccessDB(lDBPathName: string): Boolean;
var
UnTypedFile: fileof Byte;
Buffer: array[0..19] of Byte;
NumRecsRead: Integer;
i: Integer;
MyString: string;
begin
AssignFile(UnTypedFile, lDBPathName);
reset(UnTypedFile,1);
BlockRead(UnTypedFile, Buffer, 19, NumRecsRead);
CloseFile(UnTypedFile);
for i := 1 to 19 do MyString := MyString + Trim(Chr(Ord(Buffer[i])));
Result := False;
if Mystring = 'StandardJetDB' then
Result := True;
if Result = Falsethen
MessageDlg(ERRORMESSAGE_2, mtInformation, [mbOK], 0);
end;
procedure TfrmMain.BitBtnAddClick(Sender: TObject);
begin
AddRecordToMSAccessDB;
end;
procedure TfrmMain.AddRecordToMSAccessDB;
var
lADOQuery: TADOQuery;
lUniqueNumber: Integer;
beginif Trim(EditTextBox.Text) <> '' thenbegin
lADOQuery := TADOQuery.Create(nil);
with lADOQuery dobegin
ConnectionString := Global_DBConnection_String;
SQL.Text :=
'SELECT Number from Users';
Open;
Last;
// Generate Unique Number (AutoNumber in Access)
lUniqueNumber := 1 + StrToInt(FieldByName('Number').AsString);
Close;
// Insert Record into MSAccess DB using SQL
SQL.Text :=
'INSERT INTO Users Values (' +
IntToStr(lUniqueNumber) + ',' +
QuotedStr(UpperCase(EditTextBox.Text)) + ',' +
QuotedStr(IntToStr(lUniqueNumber)) + ')';
ExecSQL;
Close;
// This Refreshes the Grid Automatically
Timer1.Interval := 5000;
Timer1.Enabled := True;
end;
end;
end;
procedure TfrmMain.BitBtnRefreshClick(Sender: TObject);
begin
Tusers.Active := False;
Tusers.Active := True;
end;
procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
Tusers.Active := False;
Tusers.Active := True;
Timer1.Enabled := False;
end;
function TfrmMain.GetADOVersion: Double;
var
ADO: OLEVariant;
begintry
ADO := CreateOLEObject('adodb.connection');
Result := StrToFloat(ADO.Version);
ADO := Null;
except
Result := 0.0;
end;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
begin
ShowMessage(Format('ADO Version = %n', [GetADOVersion]));
end;
end.
Программа на Delphi!
Вот разбивка кода:
Общие замечания
Проект использует ADO (ActiveX Data Objects) для взаимодействия с базой данных Access.
Он состоит из единственной формы (frmMain) с различными контролами, включая DBGrid, кнопки и текстовое поле.
Создание формы
В процедуре FormCreate программа подключается к базе данных Access с помощью процедуры ConnectToMSAccessDB.
Подключение к базе данных
ConnectToMSAccessDB принимает два параметра: lsDBName (имя базы данных) и lsDBPassword (пароль).
Она проверяет, существует ли файл, а затем использует его как строку подключения к базе данных.
Строка подключения сохраняется в глобальной переменной Global_DBConnection_String, которая будет использоваться позднее.
Проверка Access DB
Функция CheckIfAccessDB принимает имя пути к файлу в качестве входного параметра.
Она проверяет, является ли файл базой данных Access, прочитав первые 19 байт файла.
Если файл не является Access-датасбазой, отображается сообщение об ошибке.
Добавление записи в базу данных
Процедура AddRecordToMSAccessDB добавляет новую запись в таблицу "Users" в базе данных.
Она генерирует уникальное число для записи, используя последнее число из таблицы плюс 1.
Запись вставляется с помощью SQL, а затем grid обновляется.
Обновление grid
Процедура BitBtnRefreshClick обновляет grid, установив свойство Active компонента TUsers в False и затем True.
Процедура Timer1Timer делает то же самое, что и BitBtnRefreshClick, но используя таймер.
Проверка версии ADO
Функция GetADOVersion возвращает версию ADO в виде вещественного числа.
Она создает экземпляр объекта ADODB.Connection с помощью OLEVariant и затем получает свойство версии.
Событие клика кнопки
Процедура Button1Click отображает сообщение об ошибке с версией ADO.
В целом, это проект демонстрирует, как подключаться к базе данных Access с помощью ADO в Delphi, добавлять записи в базу данных и обновлять компонент grid.
Записываем в Access базу данных используя ADO (ActiveX Data Objects) и Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.