Источник 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. Этот вариант работает, а первый действительно нет.
Рабочий пример к статье находится в каталоге файлов.
Удачи!