Written on . Posted in [Delphi] Базы данных. Access
// Читаем 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;
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) <> '') then begin if CheckIfAccessDB(lDBPathName) then ConnectToAccessDB(lDBPathName, lsDBPassword); end else 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 else begin lOpenDialog.Filter := 'MS Access DB|' + lsDBName; if lOpenDialog.Execute then Result := lOpenDialog.FileName; end; end;
with TUsers do begin 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; begin if Trim(EditTextBox.Text) <> '' then begin lADOQuery := TADOQuery.Create(nil); with lADOQuery do begin 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;
function TfrmMain.GetADOVersion: Double; var ADO: OLEVariant; begin try 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;