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

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

Десятичные знаки в DBF [D6, dBase, FoxPro]


Страницы:   1 2

Катерина ©   (2002-04-12 11:49:00) 

Подскажите, пожалуйста, как при описании полей создаваемой таблицы DBF задавать точность вещественных чисел (например, тип BCD).

Давно бьюсь этой проблемой. В BDE установила Enable BCD в TRUE и для DBase, и для FoxPro, создаю таблицу:

with Table do
begin
Active := FALSE;
TableName := SaveDialog.FileName;
TableType := ttFoxPro;

FieldDefs.Clear;
FieldDefs.Add("ID",ftInteger,0,TRUE);
FieldDefs.Add("LONGITUDE",ftBCD,6,TRUE);
FieldDefs.Add("LATITUDE",ftBCD,6,TRUE);
FieldDefs.Add("DEPTH",ftBCD,1,FALSE);

CreateTable;
Active := TRUE;

...
end;

А на выходе все равно имею файл DBF, где для всех BDE длина - 14, а точность - 4 десятичных знака!
Что делать?


Катерина   (2002-04-13 10:54:00) [1]

Получилось! :-* !!! Правда только для таблиц ttDBase ver.3 (а на самом деле 4), а не для ttFoxPro, но это одно и то же. Спасибо!


Lusha   (2002-04-13 10:30:00) [2]

Это лечится... :)
В свойстве Table.Databasename укажите имя Alias, в котором как Вы ранее говорили, Вы установили значение Enable BCD = TRUE (Если Вы используете TDatabase, то Table.DatabaseName установите Database.DatabaseName ). Если этого не сделать, то BDE возьмет настройки по умолчанию, а по умолчанию Enable BCD = FALSE.


Катерина   (2002-04-13 10:17:00) [3]

with Table do
begin
active := false;
TableName := "123.dbf";

FieldDefs.Clear;
with FieldDefs.AddFieldDef do
begin
name := "F1";
DataType := ftBCD;
precision := 11;
size := 6;
end;
with FieldDefs.AddFieldDef do
begin
name := "F2";
DataType := ftBCD;
precision := 11;
size := 2;
end;
with FieldDefs.AddFieldDef do
begin
name := "F3";
DataType := ftFloat;
end;

CreateTable;

active := TRUE;
end;

Все 3 поля - N(20,4)


Lusha   (2002-04-13 10:07:00) [4]

>Не катит даже (10,6).

?


Катерина   (2002-04-13 09:43:00) [5]

Не катит даже (10,6). А для необходимой точности при хранении геокоординат нужно не менее 6 знаков после дес. точки. А 15-16 знаков (FLOAT) заказчик не хочет - таблицу трудно просматривать. Я выходила из положения, создавая шаблон таблицы с описанием полей в ArcView. Там все честно: какой размер, тип и точность укажешь, так в шапке DBF и пропишется, а затем этот файл копировала в своей программе и заполняла новую таблицу. Но надоело. Хочу создавать таблицу в DELPHI!


Lusha   (2002-04-12 15:13:00) [6]

А обязательно надо NUMBER(20,6)? Может достаточно NUMBER(19,6)? Оно прокатит...


Lusha   (2002-04-12 14:50:00) [7]

Поле NUMBER(20,6) не создастся. Максимальная размерность поля BCD NUMBER(20,4). А все остальное будет работать... :)

Целую...


Катерина   (2002-04-12 14:38:00) [8]

with Table do
begin
Active := FALSE;
TableName := "111.dbf";

FieldDefs.Clear;
with FieldDefs.AddFieldDef do
begin
Name := "ID";
DataType := ftInteger;
end;
with FieldDefs.AddFieldDef do
begin
Name := "Data6";
DataType := ftBCD;
Precision := 20;
Size := 6
end;
with FieldDefs.AddFieldDef do
begin
Name := "Data2";
DataType := ftBCD;
Precision := 12;
Size := 2
end;
CreateTable;
Active := FALSE;
end;


Lusha   (2002-04-12 13:46:00) [9]

>Катерина © (12.04.02 13:31)
Катя, солнышко, радость моя... Код... Где код?...
В Database Desktop таблица с такой структурой создается?


Катерина   (2002-04-12 13:31:00) [10]

Size для BDE - оговорка, конечно же, для ttBCD. В BDE все настроено.


sniknik   (2002-04-12 13:19:00) [11]

чего мучится? sql проще
CREATE TABLE ChChart.dbf (Ch NUMERIC(16,2), ............
или дело принципа, или я чего не понимаю?


Lusha   (2002-04-12 13:09:00) [12]

>Катерина © (12.04.02 13:05)
Стоп! Посредством DBD Вам это тоже не удалось? Я правильно понял?

>...Size для BDE - действительно точность...
Для BCD, сударыня, для BCD...


Катерина   (2002-04-12 13:05:00) [13]

Все правильно, Size для BDE - действительно точность, а не размер. А код - такой, как ты пишешь: и Size, и Precition`ом я жонглировала, всяческие значения им присваивала. И таблицу создавала и программно и средствами Delphi, - результат один.


Lusha   (2002-04-12 12:57:00) [14]

>Johnmen © (12.04.02 12:49)

Да! Это вообще особенность BCD. Для него вся инициализация через... (не при дамах будет сказано)
Сходи в DBTables.pas и поищи там строчку ftBCD - очень интересно...


Lusha   (2002-04-12 12:52:00) [15]

>Катерина © (12.04.02 12:34)
Проверьте! Enable BCD должно быть у того Alias который указан в свойстве TTable.DatabaseName... Иначе будут создаваться поля 20,4



Johnmen   (2002-04-12 12:49:00) [16]

>Lusha © : Круто ! И поле получается N(14,2) ?


Lusha   (2002-04-12 12:44:00) [17]

>Johnmen © (12.04.02 12:30)
Будешь смеяться, но это рабочий код. Я проверил...

>Катерина © (12.04.02 12:34)
Ну, так где код?


Катерина   (2002-04-12 12:34:00) [18]

Извините, уходила на обед. Не работает ни в том, ни в другом варианте. В кодах созданной таблицы упорно появляется N 14 4.


Johnmen   (2002-04-12 12:30:00) [19]

>Lusha © : Вкралась неточность ;)))
...
FieldDef.Size := 14;
FieldDef.Precision := 2;
...


Lusha   (2002-04-12 12:23:00) [20]

Ох, уж эти женщины. Фиг дождешься...

var FieldDef : TFieldDef;

...

with Table1 do
try
FieldDef := Fielddefs.AddFieldDef;
FieldDef.FieldNo := 0;
FieldDef.Name := "FIELD1";
FieldDef.DataType := ftBCD;
FieldDef.Size := 2;
FieldDef.Precision := 14;
finally
CreateTable;
end;


Страницы:   1 2

Наверх

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