Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Добавлено (25 Июль 2011, 01:08) --------------------------------------------- Нет. Не возможно. Для того что бы поменять, нужно заново создать базу. Отсюда все данные потеряются. Но это ИМХО.
Хотя, можно пойти другим путем. Экспортируешь свою базу, создаешь новую с новым типом. И импортируешь в новую базу данные. Заменяешь файл, и ву аля. Не хочешь читать хелп?
Да, тоже думал о том, что можно просто данные перенести в новый файл. Однако еще не пробовал этот вариант. Вдруг есть способ просто переопределить поля? Ведь есть команда позволяющая получить определения полей, в т.ч. тип данных (dbpGetFieldDefs). Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Переопределить, нет. Как ты себе это представляешь? Ты сидишь в жигулях, надо что бы жигули превратились в волгу не затронув тебя. Тебя надо от туда вынуть, сделать волгу и посадить в нее тебя. Можно скопировать содержимое поля в переменную, создать новое поле, вставить данные из переменной в новое поле, а старое удалить. Можно так, что бы не трогать всю базу. Будет быстрее. Не хочешь читать хелп?
Тип поля - это же просто метаданные, если я правильно понимаю. Перезаписать эти данные и всё. Я файл базы открыл через MS Access и там просто у каждого поля есть (в режиме конструктора) есть выпадающий список - вместо "числовой" выбрал "текстовый" и всё... Т.е. в файле .mdb где-то пишется для каждого поля свой тип.
У меня в проге сначала использовались разные типы данных, но когда я стал делать многосоставные фильтры (составные поисковые запросы), то обнаружилось, что автоматический поиск по базе, если встречаются разные типы данных - останавливается (правда, эту трудность можно обойти с помощью LIKE, но ... , короче проще оказалось типы поменять на одинаковые). Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Вопрос про тип полей, кто работал с NeoBookDBPro отпишитесь Дело в чем, понадобилось использовать числовые данные с разрядам после запятой (ХХХ,ХХ). Если присваиваю тип Integer, то идет округление, если тип Float, то после занесения данных получается такая хрень- в место 1,97 записывает 1,97000002861023
Нет в NeoBookDBPro типа ratio или что нить связаного с дробью
имеет свои правила. Вадим, ну а для манипуляций с модернизациями базы, просто нуна организовать в ней табличку с полем в каторам будет хранится версия базы данных, тады ты будеш знать что и куды преобразовывать.
Добавлено (05 Ноябрь 2011, 13:40) --------------------------------------------- И ваще то в любой базе мона узнать и тип и размер поля Ыщите.
для манипуляций с модернизациями базы, просто нуна организовать в ней табличку с полем в каторам будет хранится версия базы данных
Alex3A, спасибо, пригодится! Пока эта потребность отпала, но, полагаю, лишь на время... Все равно придется рано или поздно программно типы полей менять.
Quote (Сергей)
если тип Float, то после занесения данных получается такая хрень- в место 1,97 записывает 1,97000002861023
Сергей, ты заносишь в поле результат вычислений (например, переменную с результатом после математических вычислений) или просто 1,97? Как получается эта цифра 1,97? Надо понять, от куда берутся остальные цифры... Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Сообщение отредактировано Вадим - Сб, 05 Ноября 2011, 15:03
Сергей, ты заносишь в поле результат вычислений (например, переменную с результатом после математических вычислений) или просто 1,97? Как получается эта цифра 1,97? Надо понять, от куда берутся остальные цифры...
Так это нормальна.
Quote
Для выполнения сложных расчетов с дробными числами в программах зачастую используются числа, представленные в экспоненциальном виде (в формате с плавающей запятой). Для микроконтроллеров наиболее распространненым является формат float — 32х битных дробных чисел, также называемых числами одинарной точности.
В этом формате 1 бит отводится на хранение знака числа, 8 бит — на хранение экспоненты числа и 23 бита — на хранение дробной части числа.
1,97 это не число, хранимое в памяти, а символьное его отражение текст. Само число, хранится в памяти в вышеуказанном формате и его текстовое отображение может быть разным при разных форматах хранения, то есть дробная часть может быть разной, в зависимости от вычислительных ресурсов.
Quote
Классы чисел с плавающей запятой Все возможные вариации записи чисел с плавающей запятой разделены на ряд классов.
Нулевые значения Нормализованные числа Денормализованные числа Бесконечности NaN (Not A Number — не число) Числа в виде NaN используются для представления исключительных случаев, таких как значение квадратного корня из отрицательного числа. Каждый класс определяется тем, какие значения имеют экспонента и дробная часть.
Класс Экспонента Дробная часть
Нуль 0 0 Денормализованные числа 0 не ноль Нормализованные числа 1-254 любые значения Бесконечность 255 0 NaN (не число) 255 не ноль
Наиболее распространены нормализованные числа. Нормализованные дробные числа записываются в следующей форме:
(-1)s · m · 2e Здесь:
s — знак числа (0 — число положительное, 1 — отрицательное); m — мантисса (1 <= m < 2); e — экспонента. В числе хранится дробная часть мантиссы Fract, т.е. мантисса
m = 1,Fract
В числе хранится значение экспоненты Exp, смещенное на 127, т.е.
e = Exp - 127
Денормализованные числа записываются в аналогичной форме, только у них всегда экспонета e равна -126 и мантисса m равна 0,Fract.
Примечание: –126 это наименьшее возможное значение экспоненты для нормализованных чисел. Числа в нормализированном виде могут представлять значения из диапазона абсолютных значений от 1 · 10−38 до 1 · 1038. Числа в денормализированном виде могут представлять значения из диапазона абсолютных значений от 1 · 10−45 до 1 · 10−38.
Из приведенной выше записи чисел следует, что имеется два нуля +0 (когда s=0) и −0 (когда s=1), а также две бесконечности +∞ (когда s=0) и −∞ (когда s=1).
Добавлено (05 Ноябрь 2011, 15:26) --------------------------------------------- Для так скать визуализации числа типа флоат существует хвункции к примеру formatfloat в васике, там указывается скока знакофф после запятой выводить.
нет. Они вводились путем мат. действий в самом запросе. Но делал и через НБ, тоже самое Получается так field1[-/*]field2=field3, где field поля в бд
Quote (Вадим)
Сергей, ты заносишь в поле результат вычислений
да. В функции match разрядность по боку, там хоть 0 ставь, хоть 2, все равно результат такой же, т.е. дело не в НБ, а в типе. Таблица создается динамически, потому в ручную править нет возможности. А в плаге всего два типа Integer и Float. Придется приводить их к типу string, но тогда в запросе нельзя будет делать мат.действия. Ясно, что дело темное. Что, теперь переходить на солит, эхехе..
это как раз и не мешает, можно мой сабж превести в string и спокойно делать расчеты в НБ. Я то планировал расчеты делать уже в запросах, при нужной выборке нужный результат при малых затратах Но уперся в то, что математика в запросе канает только с числовыми типами. У меня до сабжа было два варианта, умножать в самом запросе сохранив тип. либо в нб после вывода, но подумал, что может кто еще что подскажет, много же кто работал с плагом, а я чего не доглядел. Получается других вариантов нет, жаль, но что поделать раз плагин не всемогущ Всем спасибо за помощь!
Но уперся в то, что математика в запросе канает только с числовыми типами.
Так 1,97000002861023 это то же самое что и 1.97, так что можеш делать свои расчеты. Тебя ведь не расчеты волнуют а их отображение, при последцующей выборке, так ты просто нормализуй их для отображения, при выводе.
Alex3A, Если я правильно понимаю, то само поле в базе преобразует в такой вид 1,97000002861023. В принципе с одной стороны ты правильно говоришь. Ничего не мешает сделать из
field1[-/*]field2=field3
field1[-/*]field2*100=field3
Это нормально будет если все числа идут дробные типа 12,445 или 1, 23. Но если к примеру число получается целое? 10*100 и т.д.
А вообще, если можно произвести матдействия, то можно и условие поставить, если после запятой столько то, умножить на то то, или не умножать. Не хочешь читать хелп?
mishem, поторяю ысшо раз, вся математика в базе коррекна и field1[-/*]field2=field3 вполне нормально, вид 1,97000002861023 числа 1,97 просто недостаток отображения, ну и еще, для опереторов сравнения <,>,= нужно будет приводить в нужный вид. А мож и нет. Длинная цифра просто неудобна для просмотра, и ее обычно форматируют, оставляя нужное количество знака после запятой. Просто есть такие цыфери, получающиеся от матопераций, точность которых лимитируется количеством отведенных разрядов для операции 10\3=3.33333333. Вот и возникают такие длинные цыфери, это связанно с форматом их хранения. Так что некаторыя комбинации стремятся тут же превратится "длинные" а=3.7 в строку получаем "длинную" (эт я так , к примеру, цыферь точно не помню, но удлиняется). В общем, не парьте головы, просто нормализуйте при выводе.
Alex3A,че ты мне разжовываешь, я уже давно все понял. Сергей просто интерисовался, есть ли такое поле, которое само бы преобразовало число без лишних телодвижений. Как выяснили, вроде бы как нет. Значит будет мудрить. Не хочешь читать хелп?
Проста цыфери флот бывают разной размерности, и скажем в иных языках с ними мона совладать выбрав нужную. А так как вычисления идут в базе акеса, то и нуна смотреть какие там у флоата размеры.
Добавлено (06 Ноябрь 2011, 02:26) --------------------------------------------- Да, ысшо, и какой флоат в нб.
Добавлено (06 Ноябрь 2011, 02:27) ---------------------------------------------
Quote (mishem)
Я по сей день не знаю что такое бит, байт, мегабайт...
А мну часто приходится иметь дело с подобным, и тут главнае разобратся с размерностью.
Char Символьные данные фиксированной длины с максимальной длиной 255* символов. Желательный размер определен в круглой скобке. Например: Char(35)
Memo Символьные данные переменной длины с максимальной длиной 64,000* символов. Этот тип поля иногда называют "Текстовым" полем.
Boolean Может содержать или "true" или "false". Этот тип поля иногда называют Bit.
Integer Целое число между-32 768 и 32,767*.
BigInt Очень большое целое число между-2 147 483 648 и 2,147,483,647*.
AutoInc Уникальное последовательное число автоматически вставляется, когда добавляется запись. Число будет увеличиваться на единицу для каждой новой записи.
Currency Денежные значения. Точность - 15 цифр слева от десятичной точки и 4 цифры справа. Этот тип поля иногда называют "Денежным".
Fundamental real types Type Range Significant digits Size in bytes Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6 Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4 Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8 Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10 Comp -2^63+1 .. 2^63 -1 19-20 8 Currency -922337203685477.5808.. 922337203685477.5807 19-20 8
Видать сингл 4 байта равно длине сего текста - хххх
Добавлено (06 Ноябрь 2011, 02:42) --------------------------------------------- А в тексте по приведенной выше ссылке пишуть что число 0.2 уж не сингл а дабл.