Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Не могу программно создать таблицу DBF

Здравствуйте!

Пытаюсь программно создать DBF-файл: есть компонент tbl_dbf типа TTable

tbl_dbf.Active:=false;
tbl_dbf.DatabaseName:='D:\temp';
tbl_dbf.TableName:='test.dbf';
tbl_dbf.TableType:=ttDBase;
tbl_dbf.FieldDefs.Add('id', ftInteger, 0, false);
tbl_dbf.FieldDefs.Add('str', ftString, 30, false);
tbl_dbf.CreateTable;

Ошибок не выдается, но в результате получается странный DBF-файл:

Имя поля Тип Длина Точность
db866ru0 unknown 0 0
unknown 0 0
unknown 0 0
unknown 0 0
#1# # Dummy 19 0

Если задавать тип Paradox, то все нормально. Если использовать TQuery и
такой запрос:

CREATE TABLE "test.dbf"
(
id INT,
str CHAR(30)
);

,то создается точно такой же DBF-файл, что и при попытке использования
TTable.CreateTable.
Искал в Интернете, нашел много примеров, но все они одинаковые (см. выше).
В
чем моя ошибка, как надо правильно?
Если что, используется Delphi 7 и тот BDE, что идет с ней.

Спасибо за ответы-советы.

Ответить   Mon, 23 Jan 2006 18:44:21 +1000 (#504923)

 

Ответы:

Ошибки никакой нет.
Это формат DBase 7 (вроде такой номер версии).
В нем увеличена длина имен полей и добавлены другие расширения.

Чтобы создавались "обычные" файлы, нужно в настройках
драйвера DBASE сменить значение
параметра LEVEL с 7 на 5.

В TTable есть свойство TableLevel, используемое при создании таблицы.
Но воспользоваться им мне не удалось - валится по
ошибке "Таблица не существует" (Delphi 3.02).

А жаль, зависеть от настроек
драйвера неудобно.

Номер выпуска : 5138
Возраст листа : 856 (дней)
Количество подписчиков : 548
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/505110
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Tue, 24 Jan 2006 10:02:05 +0300 (#505110)

 

В сообщении от Вторник 24 Январь 2006 17:02 Емельянов Алексей написал(a):

Спасибо за ответ! Но, увы, не помогло... Причем не только изменение
TableType, но даже и изменение LEVEL в параметрах драйвера. На выходе все
равно получается этот непонятный DBF-файл. В документации к Delphi и BDE не
нашел, какой LEVEL какому формату соответствует.
Попробовал Halcyon - он без проблем создает "правильный" DBF нужного типа -

хоть DBaseIII, хоть IV или еще какой.

Ответить   Wed, 25 Jan 2006 18:37:57 +1000 (#506035)

 

Лучше не париться с созданием dbf, а запихнуть готовый пустой файл в
ресурс и выгружать, когда надо. :)

Номер выпуска : 5139
Возраст листа : 856 (дней)
Количество подписчиков : 548
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/505410
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Oleg Tue, 24 Jan 2006 09:39:02 +0000 (#505410)

 

В сообщении от Вторник 24 Январь 2006 19:39 Oleg написал(a):

Не подходит - нужно, чтоб было более-менее совместимо с используемым ПО
(работает с БД в формате DBF) и чтоб полученный файл могли редактировать и
пользователи в своей любимой программе.

Ответить   Wed, 25 Jan 2006 18:40:01 +1000 (#506037)

 

Редактировать данные или редактировать структуру файла?
Данные можно редактировать без проблем.

создаешь файл myres.rc
В нем строку
MYDBF RCDATA "mydbf.dbf"

компилишь его: brcc32 myres.rc
цепляешь полученный ресурс к экзешнику

Когда надо:
ResStream := TResourceStream.Create(HInstance, 'MYDBF', RT_RCDATA);
FileStream := TFileStream.Create(FileName, fmCreate);
FileStream.CopyFrom(ResStream, 0);

В FileName - путь к полученному файлу, делай с ним что хочещь. :)

Номер выпуска : 5147
Возраст листа : 859 (дней)
Количество подписчиков : 548
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/506634
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Oleg Thu, 26 Jan 2006 15:12:31 +0000 (#506634)

 

В сообщении от Пятница 27 Январь 2006 01:12 Oleg написал(a):

Спасибо за интересный и полезный ответ (я не иронизирую, это дйствительно
так :) ). Но что-то не подсказывает, что для полученного таким хитрым образом

файла самый удобный формат - DBF :) Просто в конторе это стандарт де-факто.
В общем, пока сотановился на Halcyon - работает и для моих задач его
возможностей вполне достаточно.

Ответить   Wed, 1 Feb 2006 19:28:41 +1000 (#509015)

 

Помимо уже отвеченного. Мож тебе надо не DBase-формат, а FoxPro?

--
С уважением, boroda

Номер выпуска : 5146
Возраст листа : 859 (дней)
Количество подписчиков : 548
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/506570
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Fri, 27 Jan 2006 17:18:44 +0300 (#506570)

 

В сообщении от Суббота 28 Январь 2006 00:18 Шматко А.А. написал(a):

Да нет, нужен именно DBase III (впрочем, IV тоже подходит - проверено).

Ответить   Wed, 1 Feb 2006 19:11:18 +1000 (#509035)

 

Дело хозяйское, но за FoxPro я не зря упомянул. Формат таблиц у него
такой же, но нет расширенного заголовка, который как раз и содержит db866ru
итп. Я и подумал, что простейший способ от него избавиться - это задать
драйвер как FOXPRO.

--
С уважением, boroda

Номер выпуска : 5171
Возраст листа : 870 (дней)
Количество подписчиков : 547
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/512071
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Tue, 7 Feb 2006 12:50:05 +0300 (#512071)

 

В сообщении от Вторник 7 Февраль 2006 19:50 Шматко А.А. написал(a):

Попробую.

Ответить   Sat, 11 Feb 2006 17:53:05 +1000 (#513682)