Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.004 c
14-17676
cok
2002-03-27 18:13
2002.05.06
Дебугеры!


14-17682
Knight
2002-03-28 17:35
2002.05.06
Поставил Оперу и балдею... но этого мало...


1-17631
agrig
2002-04-21 19:43
2002.05.06
TCheckBox - как програмно поменять Checked, чтобы не произошло ..


3-17510
Flagman
2002-04-11 09:42
2002.05.06
Прога требует чтобы текущий юзверь был админом... :(


14-17696
Merlin
2002-03-30 06:42
2002.05.06
найдено в инете





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский