Как читать и писать DBF по-родному? - PullRequest
8 голосов
/ 26 сентября 2010

В Delphi для Win32 как читать и записывать dbf-файл родным способом, без BDE?Я знаю, что в сети есть некоторые компоненты, но я никогда не использовал ни один из них, поэтому я не знаю, какой выбрать (если есть).

Ответы [ 6 ]

16 голосов
/ 26 сентября 2010

Вы можете использовать ADO для доступа к файлу DBF.

См. Пример кода (с использованием компонентов TAdoConnection и TAdoDataSet).

var
dbf_folder : string;
begin
  dbf_folder:='c:\bdd';//set your dbf folder location here 
  ADOConnection1.LoginPrompt:=false;
  ADOConnection1.ConnectionString:=Format('Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;Extended Properties=dBase IV;',[dbf_folder]);
  try
  ADOConnection1.Connected:=True;
  ADODataSet1.CommandText:='Select * from file.dbf'; //make your SQL query using the name of the dbf file
  ADODataSet1.Open;
   while not ADODataSet1.eof do
   begin
   //do your stuff here
   //ADODataSet1.FieldByName('').AsString
   ADODataSet1.Next;
   end;
  except
    on E : Exception do
      ShowMessage(E.Message);
  end;
end;
9 голосов
/ 26 сентября 2010

Я использовал TDBF , когда еще работал с файлами DBF (некоторые старые приложения).Я до сих пор использую его для поддержки этих приложений здесь и там.Он бесплатный, имеет множество функций и хорошо работает.

2 голосов
/ 26 сентября 2010
2 голосов
/ 26 сентября 2010

Я использовал Топаз от Software Science много лет, прежде чем начал работать с Firebird. Это всегда была отличная библиотека, отличное руководство и хорошая техническая поддержка. Он поддерживает индексы и даже имеет опцию в памяти. Я думаю, что это был бы хороший выбор.

1 голос
/ 12 августа 2016

ADO не работает для меня, но мне удалось открыть файл dbf с помощью BDE:

В разделе Доступ к данным (или BDE, зависит от вашей версии Delphi) я поставил компоненты TDataBase и TTable (вы можете использовать TQuery, если хотите).

Двойным щелчком по компоненту TDataBase я открыл диалог настройки. Заполнил поле Имя 'db_name' (имя произвольно), имя драйвера = 'STANDARD', поле Параметры: 'PATH = C: \ Path \ To \ DBF_FILES \'. Затем я установил Connected = True.

Затем в компоненте TTable я устанавливаю DatabaseName = 'db_name' - тот, который я установил в компоненте TDataBase. И свойство TableName устанавливает 'DB_FILE.dbf', который находится в указанной папке. Active = True.

Вы знаете, что делать дальше

0 голосов
/ 26 сентября 2010

Нетрудно прочитать файл DBF, если вам не нужны индексы. Формат довольно прост. За заголовком следуют фиксированные размеры регистров. В каждом регистре есть флаг, который указывает, удален он или нет. Я предлагаю искать компонент, который делает то, что вы хотите. Вы можете найти на страницах Torry's Delphi .

...