Форум: "Базы";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
ВнизДесятичные знаки в 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c