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