![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программное создание 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