Четверг, 25.04.2024, 22:52
Приветствую Вас Гость | Регистрация | Вход

Отдел информационных технологий ГКБ №29 г.Новокузнецк

Меню сайта
Категории раздела
Секреты программирования [3]
Поиск
Наш опрос
Как Вы оцениваете качество материалов?
Всего ответов: 28
Полезные ссылки
  • Официальный блог
  • Сообщество uCoz
  • Технологии программирования
  • Сайт о здоровье
  • Друзья сайта
  • КМИАЦ Новокузнецка
  • Интернет университет
  • Дистанционное обучение
  • Статистика
    Деловая сеть Кемерово и Кемеровская область. Жёлтые страницы, телефонный справочник и каталог компаний, товаров и услуг. Rambler's Top100
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Погода
    Яндекс.Погода

    Каталог статей

    Главная » Статьи » Программирование в Delphi » Секреты программирования

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

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

    Удачи!

    Категория: Секреты программирования | Добавил: AdminGkb29 (15.09.2010)
    Просмотров: 19544 | Комментарии: 9 | Рейтинг: 4.3/3
    Всего комментариев: 9
    0  
    9 Max   (04.03.2014 21:44) [Материал]
    прива, а можно попросить сделать сразу без БДЕ, а то получилось так: "Мы вот сделали, много времени потратили, и вам для того чтобы сделать еще БДЕ надо поставить, но все можно сделать проще, просто то то и то поменяйте".
    И Спасибо большое за то что потратили время и это статью написали - искренне.

    0  
    8 Андрей   (19.09.2013 15:15) [Материал]
    Доброго времени суток, что то не получается запустить прогу под средствами делфи выдает ошибку [Error] ProjectDelphiDBF.dpr(11): Undeclared identifier: 'MainFormOnTaskbar' не чего в коде не менял просто решил запустить ProjectDelphiDBF. и уже из под него проверить код, а тут такая шляпа

    0  
    7 AdminGkb29   (17.07.2013 22:16) [Материал]
    обычно непредвиденная ошибка когда в поле таблицы пытаются ввести больше значение чем размерность поля

    0  
    5 Maks   (05.10.2011 12:42) [Материал]
    что это, на переменную вроде не похоже
    Source=Файлы dBASE;Mode=ReadWrite;Initial Catalog='+AppFolderPath;

    0  
    6 AdminGkb29   (25.10.2011 09:19) [Материал]
    Нет. Там все правильно, просто редактор так отображает.
    Не Source, а Data Source следует читать. когда скопируете код в Delphi - поймете.

    0  
    4 Maks   (05.10.2011 12:36) [Материал]
    у меня второй способ не работает

    0  
    3 AdminGkb29   (22.03.2011 11:12) [Материал]
    Если есть какие-то вопросы, спрашивайте, не стесняйтесь

    +1  
    1 Andrey   (17.03.2011 13:27) [Материал]
    Да ты умный просто, аж слов нет. А ты пробовал запускать на другом ПК где ни чего не стоит? или снорсить BDE которое с delphi стоит? У тебя он не запуститься 100% Как уже надоело видеть подобный бред, нужно думать прежде чем написать.

    0  
    2 AdminGkb29   (17.03.2011 14:08) [Материал]
    Значит кто-то повторил эксперимент, поздравляю!
    Действительно этот вариант не будет работать без BDE, но (!) есть вариант который все-таки будет работать.
    Его добавил ниже в статье

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]