{codecitation class="brush: pascal; gutter: false;" width="600px"}

function ConvertTo852(S: string): string;

var

A: integer;

Ch: char;

begin

setlength (Result,Length (S));

for A:= 1 to length (S) do

begin

case S[A] of

: Ch:=

: Ch:=

else Ch:= S[A];

end;

Result[A]:= Ch;

end;

end;

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

Автор: Vit

WEB-сайт: http://forum.vingrad.ru

Говорит мол невозможно открыть файл. И на самом деле еще виден файл блокировки Access. Как закрыть базу так чтоб этот файл исчез и я мог сохранить.

Ответ:

session.close

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

// Читаем 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;

interface

uses

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) '') 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;

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 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: file of 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 = False then

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;

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;

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;

end.

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

Может кто-нибудь, предпочтительно из персонала Borland, ПОЖАЛУЙСТА, дать мне ПОЛНЫЙ рассказ о том, как с помощью Delphi и сопутствующего программного обеспечения получить доступ и работать с базами данных MS Access. Среди прочего, мне необходимо узнать…

Нижеследующая инструкция в точности повторяет ту технологию, с которой я работаю на данный момент, надеюсь, что это поможет.

Драйвер ODBC, предусмотренный для доступа к Access 2.0, разработан только для работы в пределах среды Microsoft Office. Для работы со связкой ODBC/Access в Delphi, вам необходим Microsoft ODBC Desktop Driver kit, part# 273-054–030, доступный через Microsoft Direct за $10.25US (если вы живете не в США, воспользуйтесь службой WINEXT). Он также доступен в январском выпуске MSDN, Level 2 (Development Platform) CD4 \ODBC\X86 как часть ODBC 2.1 SDK. Имейте в виду, что смена драйверов (в частности Desktop Drivers) может негативно сказаться на работе других приложений Microsoft. Для информации (и замечаний) обращайтесь в форум WINEXT.

Также вам необходимы следующие файлы ODBC:

Минимум:

ODBC.DLL 03.10.1994, Версия 2.00.1510

ODBCINST.DLL 03.10.1994, Версия 2.00.1510

ODBCINST.HLP 11.08.1993

ODBCADM.EXE 11.08.1993, Версия 1.02.3129

Рекомендуется:

ODBC.DLL 12.07.1994, Версия 2.10.2401

ODBCINST.DLL 12.07.1994, Версия 2.10.2401

ODBCINST.HLP 12.07.1994

ODBCADM.EXE 12.07.1994, Версия 2.10.2309

Нижеследующие шаги приведут вас к искомой цели:

Используя администратора ODBC, установите источник данных (datasource) для вашей базы данных. Не забудьте задать путь к вашему mdb-файлу. Для нашего примера создайте источник с именем MYDSN.

Загрузите утилиту BDE Configuration.

Выберите пункт «New Driver».

Назначьте драйверу имя (в нашем случае ODBC_MYDSN).

В выпадающем списке драйверов выберите "Microsoft Access Driver (*.mdb)

В выпадающем списке имен выберите MYDSN

Перейдите на страницу «Alias» (псевдонимы).

Выберите «New Alias» (новый псевдоним).

Введите MYDSN в поле имени.

Для Alias Type (тип псевдонима) выберите ODBC_MYDSN.

На форме Delphi разместите компоненты DataSource, Table, и DBGrid.

Установите DBGrid1.DataSource на DataSource1.

Установите DataSource1.DataSet на Table1.

Установите Table1.DatabaseName на MYDSN.

В свойстве TableName компонента Table1 щелкните на стрелочку «вниз» и вы увидите диалог «Login». Нажмите OK и после короткой паузы вы увидите список всех имен ваших таблиц. Выберите одно.

Установите свойство Active Table1 в True и данные вашей таблицы появятся в табличной сетке.

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

От: Святой Петр

Кому: Всем на Земле

Дата Октябрь, 1999 от рождества Христова

Тема: Не помирать!

Для ускорения регистрационного процесса у врат Рая, мы стали использовать Microsoft Access, после чего у нас начались серьeзные проблемы. А посему, пожалуйста, не помирайте пока!

var

Access: Variant;

begin

// Открываем Access

try

Access:= GetActiveOleObject ('Access.Application');

except

Access:= CreateOleObject ('Access.Application');

end;

Access.Visible:= True;

// Открываем базу данных

// Второй параметр указывает — будет ли база открыта в Exclusive режиме

Access.OpenCurrentDatabase ('C:\My Documents\Books.mdb', True);

// открываем отч?т

{Значение второго пораметра может быть одним из следующих

acViewDesign, acViewNormal, or acViewPreview. acViewNormal,

которые устанавливаются по умолчанию, для печати отч?та.

Если Вы не используете библиотеку типов, то можете определить

эти значения следующими:

const

acViewNormal = $00000000;

acViewDesign = $00000001;

acViewPreview = $00000002;

Третий параметр — это имя очереди для текущей базы данных.

Четв?ртый параметр — это строка для SQL-евского WHERE -

то есть строка SQL, минус WHERE.}

Access.DoCmd.OpenReport ('Titles by Author', acViewPreview, EmptyParam,

EmptyParam);

// Закрываем базу данных

Access.CloseCurrentDatabase;

// Закрываем Access

{const

acQuitPrompt = $00000000;

acQuitSaveAll = $00000001;

acQuitSaveNone = $00000002;}

Access.Quit (acQuitSaveAll);

end;

{/codecitation}