Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2018.02.11;
Скачать: [xml.tar.bz2];

Вниз

Программное создание 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.001 c
15-1470346201
Юрий
2016-08-05 00:30
2018.02.11
С днем рождения ! 5 августа 2016 пятница


4-1283707527
irzyxa
2010-09-05 21:25
2018.02.11
Отмена меню пуск


2-1456006403
AgroFish
2016-02-21 01:13
2018.02.11
Помогите прочитать файл


2-1456134213
Мочалка
2016-02-22 12:43
2018.02.11
сочетания без повторений


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский