Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 14:37   #1
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию Delphi (*.dbf)

Приветствую!

Посоветуйте что нибудь?
в dbf есть поле Numeric размером 12 (7 дробные). Проблема в том, что прога на delphi не может записать в базу целое из 5 символов (только 4). Хотя Foxpro это делает за счет символа из дробной части
Эта проблема решаема с помощью delphi?
VadEr вне форума Ответить с цитированием
Старый 09.06.2011, 14:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

через MS FoxPro OLE DB Provider пробовали писать?
Возможно, у него будет такое же поведение, как и у FoxPro....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.06.2011, 14:47   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Foxpro это делает за счет символа из дробной части
Это как это так ?)

Хочу, к примеру, записать в поле NUMERIC(12,7) значение 12345.
Ты утверждаешь что Фокс сохранит его в этом поле как 1234.5 ?
Это же нонсенс)..
Но даже если гипотетически предположить успех такого фокуса, то при считывании поля Фокс откуда, спрашивается, узнает, что ст.разряд дробной части был "арендован" для хранения мл.разряда целой части ?
mss вне форума Ответить с цитированием
Старый 09.06.2011, 14:48   #4
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

к сожалению вся работа через Advantage (компонент TADSTable) - другого не дано
VadEr вне форума Ответить с цитированием
Старый 09.06.2011, 14:51   #5
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Ты утверждаешь что Фокс сохранит его в этом поле как 1234.5 ?
Код:
нет если я пишу 1234, то будет: 1234.0000000
а если 12345,               то: 12345.000000
расширить поле начальство не позволит

Последний раз редактировалось VadEr; 09.06.2011 в 14:55.
VadEr вне форума Ответить с цитированием
Старый 09.06.2011, 15:06   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
если я пишу 1234, то будет: 1234.0000000
Так это же не "за счет дробной части")
Строго ж наоборот - дробная часть расширяется за счет неиспользованной целой !
Абсолютно нормальное для Фокса поведение ..

Ну да ладно, вернемся к нашим баранам)..

Цитата:
прога на delphi не может записать в базу целое из 5 символов (только 4)
Наверно вот прямо так и говорит "не могу" ?
mss вне форума Ответить с цитированием
Старый 09.06.2011, 15:13   #7
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
пишу 1234, то будет: 1234.0000000
Вообще говоря эта "фича", если она и работает (по дифолту или опционально) в каких-то фоксовых реализациях, видится мне абсолютно бестолковой.
mss вне форума Ответить с цитированием
Старый 09.06.2011, 15:16   #8
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Строго ж наоборот - дробная часть расширяется за счет неиспользованной целой !
Нет всего 12 символов (7 на дробь, 1 на точку, 4 на целое)
в моем случае фокс умудряется целое расширить до 5 знаков. Это поведение необходимо реализовать через delphi

Цитата:
Сообщение от mss Посмотреть сообщение
Наверно вот прямо так и говорит "не могу" ?
Именно так и пишет: Numeric out of range.
VadEr вне форума Ответить с цитированием
Старый 09.06.2011, 15:16   #9
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

в делфи ето возможно = )
Есть переменная K и пусть она принадлежит Real
все что надо, так ето округлить ее до нужного десятка следующим образом:

Код:
   K:=12345,12345; // вот такое K
     // если округлим до едениц 
   K:=(round(K)/1); // получим [12345]
     // если округлим до сотых долей 
   K:=(round(K)/-2); // [12345,12]
     // если округлим до статысячных долей 
   K:=(round(K)/-5); // [12345,12345]
при необходимости можно описать действие с К прямо в скобках перед округлением.
Apostol13 вне форума Ответить с цитированием
Старый 09.06.2011, 15:35   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
к сожалению вся работа через Advantage (компонент TADSTable) - другого не дано
Тогда к чему вопрос?

Если Вы работаете через него и он строго следит за соблюдением заданной в таблице размерности поля (что, в общем-то, логично!), а не так, как FoxPro допускает вольности..
И не позволяет Вам писать размерность БОЛЬШУЮ, чему указано в заголовке (структуре) таблицы, то что Вы от нас хотите то?
Нужно или менять способ(метод/компоненты) доступа к данным или смириться с тем, что есть...
Или что Вы ожидали услышать?!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBF + Delphi Samkoff БД в Delphi 18 16.05.2011 15:01
Работа с файлами dbf в Delphi. santaIsAbsent БД в Delphi 10 02.09.2010 10:16
БД dbf + Delphi (оплата сразу) netruxa Фриланс 5 21.04.2010 10:08
из dbf в mssql через delphi kyc0k БД в Delphi 1 22.12.2008 15:25
сохранение результата выборки из DBF файла в DBF файл с такой же структурой таблицы GazimagomedovM БД в Delphi 5 06.11.2007 17:58