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

Вниз

Десятичные знаки в DBF   Найти похожие ветки 

 
Катерина   (2002-04-12 11:49) [0]

Подскажите, пожалуйста, как при описании полей создаваемой таблицы 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 десятичных знака!
Что делать?


 
Lusha   (2002-04-12 11:54) [1]

Установить свойство TFieldDef.Preciosion в 2...


 
Катерина   (2002-04-12 12:01) [2]

Тем более не работает, уже пробовала.


 
Lusha   (2002-04-12 12:06) [3]

>Тем более не работает, уже пробовала
Примерчик кода, пожалуйста...


 
Lusha   (2002-04-12 12:23) [4]

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

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;


 
Johnmen   (2002-04-12 12:30) [5]

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


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

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


 
Lusha   (2002-04-12 12:44) [7]

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

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


 
Johnmen   (2002-04-12 12:49) [8]

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


 
Lusha   (2002-04-12 12:52) [9]

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




 
Lusha   (2002-04-12 12:57) [10]

>Johnmen © (12.04.02 12:49)

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


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

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


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

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

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


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

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


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

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


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

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



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

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 14:50) [17]

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

Целую...


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

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


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

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


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

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

?


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

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:30) [22]

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


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

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



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

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

Наверх




Память: 0.52 MB
Время: 0.011 c
3-17487
62mkv
2002-04-11 15:58
2002.05.06
Левые пустые страницы в отчете - как убрать ?


14-17678
lipskiy
2002-03-04 15:48
2002.05.06
Антивирусная защита программы


4-17730
TCP
2002-03-01 18:49
2002.05.06
Треей и ДАта


3-17485
dim-
2002-04-11 17:55
2002.05.06
Выборка по датам


1-17615
Сергей Чурсин
2002-04-20 19:31
2002.05.06
В OnMouseMove не срабатывает Form.Cursor:=... ?