Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программное создание dbf [D7, XP]


Дмитрий ©   (2016-02-16 19:59:00) 

Всем привет!
Помогите. Создаю программно dbf.
  with Table1 do begin
     Active:=false;
     DatabaseName :='C:\_Work\Delphi\Create dbf\1';
     TableName :='try.dbf';
     TableType:=ttFoxPro;
     TableLevel:=4;
     FieldDefs.Clear;
  end;
  with Table1.FieldDefs.AddFieldDef do begin
     Name:='CText1';
     DataType:=ftString;
     Size:=15;
  end;
  with Table1.FieldDefs.AddFieldDef do begin
     Name:='CInt1';
     DataType:=ftFloat;
  end;

  Table1.CreateTable;

Нужно создать поле CInt1 с типом Float, размером 5 и 2 точки после  запятой.
Программно же создается поле с типом Number размером 20 и 4 знака после запятой.
Пробовал тип ftCurrency , тоже самое  c ftBCD + Precision - не работает.
Так как же все таки программно создать поле в таблице, например с двумя знаками после запятой?


Inovet   (2016-02-18 13:37:00) [1]

> [12] Inovet ©   (18.02.16 09:49)
> try

Не надо так называть таблицу, может оказаться ключевым словом, да и глаз режет.


Inovet   (2016-02-18 09:49:00) [2]

> [5] Дмитрий   (17.02.16 08:09)
> Нужно, чтобы в не в delphi отображалось два знака, а в любом
> просмотрщике DBF

Тогда причём тут Float? И не Float а Double и есть он не в люмом FoxPro а только в Visual FoxPro с какой-то там версии. А для хранения 5,2 нужен Numeric

И вообще надо так делать

create table try (
 CText1 c(15),
 CInt1 n(5, 2)
);


Германн   (2016-02-18 01:41:00) [3]

Удалено модератором


sniknik   (2016-02-18 01:12:00) [4]

> просто не проходит и выдает ошибку в RunTime
тип флоат имеет "жесткую" размерность, и наверняка проверяется. хотя там не совсем флоат конечно, в dbase такого нет, и поэтому "усреднение" конвертируется... 19.4 или 20.9 что-то типа, и скорее всего зависит от версии dbase, типа в 3-4й 1 вариант в 5й  2-ой.

попробуй  ftBcd. хотя не уверен (тоже не охота проверять). ну а вариант с bde функциями без оберток, что выше, точно сработает.


KilkennyCat   (2016-02-17 21:49:00) [5]

Во-первых, я не мастер.
Во-вторых, чтобы иметь сомнения в чей-то компетентности, надо свою нехилую иметь.
В-третьих, делфи у мня нет, попробовать не могу. Ради Вас покупать ее не буду.
В-четвертых,я не готовый код выдал, а направление, которое говорит, что Precision можно установить уже у существующего поля, а не при создании.
Ну уж и как оно на самом деле работает, и как там выдает - тут моей вины ваще ни грамма. Данное решение из справки.


Дмитрий   (2016-02-17 21:35:00) [6]


> KilkennyCat ©   (17.02.16 12:45) [7]
> bd.fieldDefs.Add(fname, ftFloat, 5);
> bd.fieldDefs[index_last_field].Precision := 2;

Я прошу прощения, но у меня очень большие сомнения в компетентности этого мастера!
Вы хоть сами то пробуете, что советуете. Или от балды пишете
Во-первых
bd.fieldDefs.Add(fname, ftFloat, 5);
просто не проходит и выдает ошибку в RunTime
Во-вторых
bd.fieldDefs[index_last_field].Precision := 2;
не работает, как выдавал 4 знака после запятой, так и выдает


KilkennyCat   (2016-02-17 12:45:00) [7]

bd.fieldDefs.Add(fname, ftFloat, 5);
bd.fieldDefs[index_last_field].Precision := 2;


sniknik   (2016-02-17 12:38:00) [8]

> Я могу завести данный формат поля (5.2) если буду создавать базу через какой-нибудь DBView ...
>  Вопрос заключается в том как это сделать программно?
Database Desktop в поставке D7 использует DbiCreateTable, там можно делать такие поля, и функция программная... без обертки оперирующей "усредненными" типами. хочется помучится, вперед. :)


Дмитрий   (2016-02-17 08:09:00) [9]

Нужно, чтобы в не в delphi отображалось два знака, а в любом просмотрщике DBF.

> написать разработчикам бд, чтоб они ввели поля для 5.2 в


Я могу завести данный формат поля (5.2) если буду создавать базу через какой-нибудь DBView, ведь разработчики БД уже предусмотрели такую возможность!!! Вопрос заключается в том как это сделать программно?


KilkennyCat   (2016-02-16 22:42:00) [10]

http://delphibasics.ru/Format.php- смотреть Fixed, а также внизу слева похожие команды


KilkennyCat   (2016-02-16 22:40:00) [11]


> Есть, что по вопросу?

есть. например, предложение: отделить мух от котлет, т.е. осознать разницу, что отвечает за хранение данных, а что - за отображение, и использовать Format.
Есть, конечно, вариант еще один (уж простите, не удержусь :) :
написать разработчикам бд, чтоб они ввели поля для 5.2 в частном случае, и для N.n в общем, и еще где все буквы "ы" будут автоматически подсчитаны.


Дмитрий   (2016-02-16 22:06:00) [12]


> >  поле с типом Number размером 20 и 4 знака после запятой.
>
>
> лекго вмещает в себя
> > размером 5 и 2 точки после  запятой.
>

Вмещает, согласен, но нужно, чтобы отображалось 2 цифры после запятой.
Абсолютно согласен, что устарел. Но это не предмет вопроса.

Есть, что по вопросу?


KilkennyCat   (2016-02-16 21:43:00) [13]


>  поле с типом Number размером 20 и 4 знака после запятой.

лекго вмещает в себя
> размером 5 и 2 точки после  запятой.

Float = Numeric
и вообще FoxPro не устарело ли?
да и есть же справка: https://www.google.ru/search?q=foxpro+%D1%82%D0%B8%D0%BF%D1%8B+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&oq=foxpro+%D1%82%D0%B8%D0%BF%D1%8B+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&aqs=chrome..69i57j0l3.1290j0j7&sourceid=chrome&es_sm=93&ie=UTF-8


Наверх

Титульная страница Поиск, карта сайта Написать письмо