Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2011, 23:25   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Работа Delphi с *.accdb MS Access

сеичас первыи раз буду пробывать работать вообще с офисом, поетому не судите строго
нашел код для прочтения фаилов access да и вообще там много что описано, но по старым форматам *.mdb
а как открыть новым *.accdb наити не смог, может кто знает где об етом можно почитать или на примере покажет?
Добавлено
если ето возможно без сохранения под старые версии MS Access
Добавлено
Код:
 
  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
какое значение нужно придать TUsers.ConnectionString что б оно работало как надо
VirusN13

Последний раз редактировалось ArtGrek; 15.03.2011 в 00:31.
ArtGrek вне форума Ответить с цитированием
Старый 15.03.2011, 13:09   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Кажется так
Цитата:
Provider=Microsoft.ACE.OLEDB.12.0
Уже не Jet, чтоб они были здоровы...
До свидания

Последний раз редактировалось OlegVE; 15.03.2011 в 13:11.
OlegVE вне форума Ответить с цитированием
Старый 15.03.2011, 21:17   #3
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка

попробывал, но не прокатило, решил разобраца со старым форматом, зделаю выводы и может сам изменить смогу, но
в инете везде показывают етот пример, а у меня он чет ошибку выдает, ошибка во вложении, не подскажете
что еи нужно?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, ADODB;

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

var
  Form1: TForm1;
const 
  DBNAME = 'Database.MDB'; 
  DBPASSWORD = '123'; // Access DB Password Protected

implementation

{$R *.dfm}

function TForm1.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;

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

procedure TForm1.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
    Form1.Free;
end;

end.
Изображения
Тип файла: jpg Безымянный.JPG (68.7 Кб, 187 просмотров)
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 17.03.2011, 15:46   #4
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Извините, вчера никак не удалось попасть на programmersforum.ru, всё время Time out
1. Вы пробовали создать строку соединения (тут-же проверите наличие Поставщика данных) и указать таблицу в Object Inspector для TUsers? Конечно там-же потом указать Active = True.

2. Насчёт строки кода
Код:
...
  if Mystring = 'StandardJetDB' then 
...
StandardJetDB присутствует в mdb файлах БД Access. В Access 2007 записана строка Standard ACE DB (только что узнал ).

3. Попробуйте продублировать в самом Access 2007 таблицу Users под другим именем, например, zzzUsers и подключиться к ней в коде. (Думаю Вы знаете, что таблица Users или zzzUsers должна уже присутствовать в БД что mdb что в accdb до вызова ValidateAccessDB).

4. Попробуйте исправить строку
Код:
'Jet OLEDB:Database Password=' + DBPASSWORD;

на

'Jet OLEDB:Database Password=' + DBPASSWORD + ';';

До свидания

Примечание: У меня Office 2007 только по выходным и тогда я могу что-то проверить.

P.S. Если только начинаете, киньте на форму по 2 штуки TDataSource, TADOTable, TDBGrid каждого и заполните в одном наборе TADOTable в Object Inspector (указать Active = True, чтобы видеть при разработке), в другом заполните TADOTable в коде и сравнивайте.

Последний раз редактировалось OlegVE; 17.03.2011 в 16:01.
OlegVE вне форума Ответить с цитированием
Старый 17.03.2011, 15:57   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Обалдеть, сколько писанины, чтобы подключиться к *.mdb-файлу. Это делается за 2 щелчка мыши.
И вот это улыбнуло
Код:
  else Form1.Free;
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.03.2011, 16:30   #6
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Обалдеть, сколько писанины, чтобы подключиться к *.mdb-файлу...
1. к *.accdb
2.
Цитата:
сеичас первыи раз буду пробывать работать вообще с офисом
3. Функция CheckIfAccessDB не позволяет открывать в программе не Access файл, хотя и с расширением mdb (возможно это нужно ArtGrek, а может он пока считает, что это очень нужно, тогда смотри п. 2.).
OlegVE вне форума Ответить с цитированием
Старый 17.03.2011, 16:47   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ну, дык разницы нет. Я попробовал. Поставщик Microsoft.ACE.OLEDB.12.0
Нормально подключился вот такой строкой.
Код:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbdemos.accdb;Persist Security Info=False
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.03.2011, 16:51   #8
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Ему бы надо ещё и к таблице с именем Users подключиться. Проверить не смогу, т.к. сейчас нет Access 2007, может в нём это запрещённое слово...
Думаю можно пока остановить обсуждение, пока ArtGrek всё у себя не проверит.

Последний раз редактировалось OlegVE; 17.03.2011 в 16:57.
OlegVE вне форума Ответить с цитированием
Старый 17.03.2011, 17:15   #9
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Сейчас проверю...
Переименовал таблицу в Users. Открылась нормально
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.03.2011, 23:30   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Provider=Microsoft.ACE.OLEDB.12.0;D ata Source=ArtGrek.accdb;Persist Security Info=False
вот так смог подключица, трудность была из-за простои неопытности


Цитата:
И вот это улыбнуло
Код:

else Form1.Free;
как уже говорил код не мои, я на ето даже не смотрел, ошибка раньше была, на 2 строки

OlegVE и _SERGEYX_
обоим спасибо, +1, продолжаю разбираца дальше, буду теперь считывать и запишвать
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу открыть файл с расширением .accdb valerij Microsoft Office Access 3 25.01.2011 11:25
Delphi + ADO -> Access - работа на любом ПК без изменения кода arhiepiskop БД в Delphi 7 07.06.2010 07:31
Access + Delphi работа с таблицами Dotha БД в Delphi 11 23.11.2009 19:01
Работа с БД Access Nowichok БД в Delphi 13 01.02.2007 00:27