Все ленты — последние статьи

Работа с DBF в Delphi без BDE

Источник http://gkb29asu.ucoz.ru/publ/programmirovanie_v_delphi/sekrety_programmirovanija/rabota_s_dbf_iz_delphi/9-1-0-9

 

Часто в поиске вижу запрос: "чтение DBF в Delphi", "работа с DBF в Delphi". 

Такая насущная проблема действительно существует, особенно у начинающих, когда с BDE заморачиваться не хочется, но нужно подключиться к DBF и считать из него или заполнить файл.

Описываемый ниже способ использует стандартные компоненты, без использование BDE и tDBF.

В качестве среды использована Delphi 2010

Собственно всё подключение сводится к настройке ADOConnection.

 

 

procedure TForm5.Button1Click(Sender: TObject);
var
AppFolderPath: string;
begin
// подключаемся к ДБФ и выводим данные в таблицу
AppFolderPath:=copy(ExtractFilePath(Application.ExeName),1,length(ExtractFilePath(Application.ExeName))-1);


  TabDBF.Active:=false;
  CnDBF.Connected:=false;

  CnDBF.ConnectionString:='Provider=MSDASQL;Password="";Persist Security Info=True;Data Source=Файлы dBASE;Mode=ReadWrite;Initial Catalog='+AppFolderPath;
  CnDBF.DefaultDatabase:=AppFolderPath;
  cnDBF.LoginPrompt:=false;


  CnDBF.Connected:=true;
// err.dbf находится в папке AppFolderPath (в данном случае в папке с программой)
  TabDBF.TableName:='err';
  TabDBF.Active:=true;

// Подключение выполнено

end;

procedure TForm5.Button2Click(Sender: TObject);
begin

// пример добавления записи
  TabDBF.Append;
  TabDBF.FieldByName('sl_id').Value:=0;
  TabDBF.FieldByName('id_med').Value:=0;
  TabDBF.FieldByName('ter_mu').Value:=0;
  TabDBF.FieldByName('kod_mu').Value:=0;
  TabDBF.FieldByName('kod_err').Value:=0;
  TabDBF.FieldByName('Prim').Value:='новая строка';
  TabDBF.Post;
end;

 

Как справедливо заметили в комментарии, это вариант работает, но при наличии установленного BDE.

Для того чтобы обойти эту проблему можно использовать подключение через Microsoft.Jet.OLEDB

При этом процедура TForm5.Button1Click примет следующий вид:

procedure TForm5.Button1Click(Sender: TObject);
var
AppFolderPath: string;
begin
// подключаемся к ДБФ и выводим данные в таблицу
AppFolderPath:=copy(ExtractFilePath(Application.ExeName),1,length(ExtractFilePath(Application.ExeName))-1);


TabDBF.Active:=false;
CnDBF.Connected:=false;


CnDBF.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source="' +AppFolderPath + '";Extended Properties="DBASE IV;";"';

CnDBF.LoginPrompt:=false;
cnDBF.Mode:=cmReadWrite;
CnDBF.Connected:=true;

CnDBF.Connected:=true;
// err.dbf находится в папке AppFolderPath (в данном случае в папке с программой)
TabDBF.TableName:='err';
TabDBF.Active:=true;

// Подключение выполнено


end;

 

Опробовано на машине где стоит голый Windows XP и нет BDE. Этот вариант работает, а первый действительно нет.

Рабочий пример к статье находится в каталоге файлов.

Удачи!