C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
C++ Builder — создание таблиц в БД Access, задание точности поля типа real
AlexM
Отправлено: 09.03.2007, 14:33


Ученик-кочегар

Группа: Участник
Сообщений: 3



Помогите, пожалуйста, разобраться в следующем вопросе:
В программе необходимо динамически создавать таблицы БД Access, содержащие поля со значениями real.
Пробовал это делать 2-мя путями, используя BDE.
1.
Table1->Active = false;
Table1->DatabaseName = "DBName";
Table1->TableType = ttDefault;
Table1->TableName = Edit1->Text;

Table1->FieldDefs->Clear();

TFieldDef *pNewDef = Table1->FieldDefs->AddFieldDef();

pNewDef->Name = "Field";
pNewDef->DataType = ftFloat;

Table1->CreateTable();

Таблица создается и ее появление в БД можно обнаружить функцией GetTableNames(), но
при попытке записи значений в это поле оно округляется до ближайшего целого.
Возможно ли таким путем добиться записи в поле значений с десятичным знаками?

2. Попытался создать таблицу через SQL запрос:

Query1->SQL->Clear();
Query1->SQL->Add("create table "+TableName+"(ID_int counter primary key, Field real)");
Query1->ExecSQL();

Таблица создается, но функция GetTableNames() ее не обнаруживает. При этом таблицу можно вывести на форму и в поле вводятся значения с десятичными знаками.
Но при выходе из этой таблицы и повторном ее вызове в этом поле значения отображаются с 14 десятичными знаками после запятой. (Например, вводил 2.1, выводится 2,09999990463257)
Как добиться появления имени таблицы в списке имен и отображения данных в поле с нужной точностью?

Admin
Отправлено: 09.03.2007, 17:11


Владимир

Группа: Администратор
Сообщений: 1190



А что это за числа будут храниться в базе ?
Если деньги — рубли/копейки то удобнее умножить на 100
и хранить в виде целого числа.
Так значительно лучше чем связываться с округлениями.

AlexM
Отправлено: 10.03.2007, 09:23


Ученик-кочегар

Группа: Участник
Сообщений: 3



В таблицу должны вводится параметры для системы регулирования, которая "заточена" на указанный тип данных.
Поэтому ваше предложение не подходит.
Тем не менее Спасибо за внимание!
AVC
Отправлено: 12.03.2007, 12:44


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (AlexM @ 09.03.2007, 13:33)
Как добиться появления имени таблицы в списке имен и отображения данных в поле с нужной точностью?

1. Перечитать список или подождать пока access одумается
2. Округлять перед отображением.
Admin
Отправлено: 12.03.2007, 13:12


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE
2. Округлять перед отображением.


Ага. Или например использовать: FloatToStrF()

и еще раз внимательно посмотреть на разработку базы:
параметры для системы регулирования, которая "заточена" на указанный тип данных может и имеют тип real, но это не значит
что и в таблице базы данных их нужно хранить с этим типом.

По практической работе могу сказать что столкнулся с различными
чужими проектами баз данных где real-числа хранились именно в
виде целого числа.
AlexM
Отправлено: 13.03.2007, 15:24


Ученик-кочегар

Группа: Участник
Сообщений: 3



QUOTE (AVC @ 12.03.2007, 12:44)
1. Перечитать список или подождать пока access одумается

Поподробнее, пожалуйста! Как определить, что access уже одумался?

И все-таки, как добиться, используя DBGrid, в динамически создаваемых таблицах отображения данных с нужной точностью?
Что я делаю не так в обоих описанных вариантах?
AVC
Отправлено: 13.03.2007, 18:15


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

как добиться, используя DBGrid, в динамически создаваемых таблицах отображения данных с нужной точностью?

(TNumericField*)->DisplayFormat = "0.00"

Вернуться в Работа с базами данных в C++Builder