Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.02.11;
Скачать: CL | DM;

Вниз

Программное создание dbf   Найти похожие ветки 

 
Дмитрий   (2016-02-16 19:59) [0]

Всем привет!
Помогите. Создаю программно 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 - не работает.
Так как же все таки программно создать поле в таблице, например с двумя знаками после запятой?


 
KilkennyCat ©   (2016-02-16 21:43) [1]


>  поле с типом 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


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


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

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

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


 
KilkennyCat ©   (2016-02-16 22:40) [3]


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

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


 
KilkennyCat ©   (2016-02-16 22:42) [4]

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


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

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

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


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


 
sniknik ©   (2016-02-17 12:38) [6]

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


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

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


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


> 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 21:49) [9]

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


 
sniknik ©   (2016-02-18 01:12) [10]

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

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


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

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


 
Inovet ©   (2016-02-18 09:49) [12]

> [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)
);


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2018.02.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.004 c
11-1266590664
Dimaxx
2010-02-19 17:44
2018.02.11
Добавление айтемов одного PTree в другой


2-1455535545
i2e
2016-02-15 14:25
2018.02.11
Memo - как выводить данные в одну строку?


2-1455961562
JohnKorsh
2016-02-20 12:46
2018.02.11
Запись со входа аудиокарты.


2-1455641950
Дмитрий
2016-02-16 19:59
2018.02.11
Программное создание dbf


2-1454172714
Dmk
2016-01-30 19:51
2018.02.11
WM_WINDOWPOSCHANGED