|
|
|
Помогите с длинными полями.
|
|||
|---|---|---|---|
|
#18+
Всем доброе время суток. Подскажите уважаемые, на серваке есть база, которая создана в Ingrese, я её выкачиваю и мне нужно обработать несколько таблиц из неё. И тут как раз проблемма там числовые поля, размерностью DECIMAL 30, а в Фоксе только Numeric имеет максимальное значение 18 с учётом точки и знака. Подскажите, как подороть эту проблемму, чтобы не переписывать несколько рабочих проектов(они просто перестали работать после того, как размерность полей изменили с money на decimal 30). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 17:12 |
|
||
|
Помогите с длинными полями.
|
|||
|---|---|---|---|
|
#18+
Может не совсем понятно написал, но если какое либо ЧИСЛОВОЕ поле в Фоксе, чтобы его размерность была не менее 25 символов. Иначе как я думаю либо переводить из базы поля в символьные и потом работать с ними через преобразование типов данных Либо же разделять поле 30 на 2 поля длинной по 15 символов и потом их склеивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 17:48 |
|
||
|
Помогите с длинными полями.
|
|||
|---|---|---|---|
|
#18+
Я бы хотел уточнить, что именно Вы хотите получить в результате? Вас интересует точность до 30 значащих цифр или размерность? Под точностью, в данном случае понимается следующее - если в число записали 30 значащих цифр, то все 30 цифр будут отображены именно так, как и были записаны. Если это было 30 единиц, то и прочитано будет 30 единиц. Размерность - это количество знаков или, для числовых данных, максимально возможное значение, которое в принципе можно записать в поле. При этом точность уже особой роли не играет. Так вот, системным ограничением FoxPro является точность до 16 значащих цифр. Точнее, чуть меньше. Поэтому, с практической точки зрения можно говорить о точности до 15 значащих цифр. Это значит, что даже если Вы запишете в какое-либо числовое поле более 15 значащих цифра (Numeric - до 20, Double - до 307), но доверять Вы сможете только первым 15 из них. Простейшая проверка Код: plaintext Это команда вернет значение, округленное до 16 значащих цифр. Это системное ограничение FoxPro и обойти это невозможно. Если требуется более высокая точность расчетов, то необходимо хранить все числа в символьном представлении и писать собственные функции производящие расчет с такими данными. Либо в том же FoxPro, либо в языках, более приспособленных для расчетов с высокой точностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 18:41 |
|
||
|
Помогите с длинными полями.
|
|||
|---|---|---|---|
|
#18+
ВладимирМ - Спасибо ВАМ. В результате нужно было получить именно поле с 30 значащими цифрами, но т.к. фокс такое не может, по сначала 30-тизначное числовое поле из БД я просто перевожу в символ, а потом его разбиваю на два поля по 15 знаков и перевожу формат из символьного в числовой. Но тут же встал вопрос, как я смогу обработать такое число, если фокс воспринимает только 16 знаков, а больше он уже начинает округлять??? Может перейти на другой язык, что посоветуйте, где можно обрабатывать такие большие числовые поля, только чтобы синтаксис не очень отличался от SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2007, 13:19 |
|
||
|
Помогите с длинными полями.
|
|||
|---|---|---|---|
|
#18+
Прежде, чем что-то советовать, опять же надо уточнить постановку задачи. Это единственное поле, которое хранит данные с такой высокой точностью? Т.е. такая высокая точность - это исключительная ситуация для приложения или же ВСЕ приложение должно работать с такой высокой точностью? Как считать в FoxPro? Ну, просто вспомнить школьные уроки математики, как складывали и умножали столбиком и перевести этот алгоритм в FoxPro при работе с такими числами в символьном представлении. Можно написать собственные библиотеки на C, и выполнять расчет с такими числами из FoxPro через эти библиотеки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2007, 14:52 |
|
||
|
Помогите с длинными полями.
|
|||
|---|---|---|---|
|
#18+
ВладимирМПрежде, чем что-то советовать, опять же надо уточнить постановку задачи. Это единственное поле, которое хранит данные с такой высокой точностью? Т.е. такая высокая точность - это исключительная ситуация для приложения или же ВСЕ приложение должно работать с такой высокой точностью? Как считать в FoxPro? Ну, просто вспомнить школьные уроки математики, как складывали и умножали столбиком и перевести этот алгоритм в FoxPro при работе с такими числами в символьном представлении. Можно написать собственные библиотеки на C, и выполнять расчет с такими числами из FoxPro через эти библиотеки. Это поле является на самом деле единственным. Ранее тип поля БД на сервере был money и размерность его не превышала 16-18 знаков и всё решалось само собой, потому как всё умещалось в N(20.0) в Фоксе. После того, как тип поля БД на сервере был изменён на decimal 30 появилась базы, у которых размерность поля стала 25-26 знаков. Все знаки значащие и округление просто недопустимо. Вот и встал вопрос, что с этим делать, потому как все приложения просто не могут работать, Ошибка, переполнение поля. Счас в кротчайшие сроки нужно переделать приложения, чтобы они могли обрабатывать такие большие поля. Сейчас пока что выходим из положения тем, что выгружаем всё в символьном виде, потом его делим на два поля по 15 знаков(поля уже числовые), написали отдельные процедуры сложения, вычитания, умножения и деления . Но пока что это только так, работает на пробной таблице. А нужно все переделать на БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2007, 17:37 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=198&tid=1589280]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 356ms |

| 0 / 0 |
