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" |
|