Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

Как прочитать из поля и запихать в параметр число Int64 (Oracle)?   Найти похожие ветки 

 
ANB ©   (2005-06-08 21:08) [0]

В базе возможны целые числа, которые не лезут в Integer и я их пытаюсь хранить в Int64. Как с ними грамотно работать ? Когда у меня вылезла бага, некогда было разбираться и я сделал все через AsString. Но это, имхо, некошерно.


 
ANB ©   (2005-06-08 21:09) [1]

Странна, галку ставил на оракле, а вылез MySQL. Админы - обратите внимание на ошибку.


 
Anatoly Podgoretsky ©   (2005-06-08 23:09) [2]

AsLargeInt


 
ANB ©   (2005-06-08 23:15) [3]

В ParamByName я уже нашел. Правда вот так
qrSQL.ParamByName().AsNumber.AsLargeInt;
А вот - qrSQL.FieldByName("").AsLargeInt; - не комипляется.
И вот так - qrSQL.FieldByName("").AsNumber.AsLargeInt; - тоже.


 
Anatoly Podgoretsky ©   (2005-06-09 08:58) [4]

Тип поля в базе и в программе.


 
ANB ©   (2005-06-09 14:34) [5]

В базе - number без скобок (по моему, по умолчанию - 19). В программе - вообще никакой - получаю список полей после открытия датасета.


 
Anatoly Podgoretsky ©   (2005-06-09 14:36) [6]

ANB ©   (09.06.05 14:34) [5]
К вообще никакому обратиться нельзя.


 
Anatoly Podgoretsky ©   (2005-06-09 14:37) [7]

Не знаю Оракла, но сомневаюсь, что number это "Int64"


 
ANB ©   (2005-06-09 14:40) [8]

В интегер намбер нормально лезет, пока очень большое число не напишу. Да и какя разница, какого типа поле в программе - я же его через FieldByName() достаю с нужным мне представлением.


 
ANB ©   (2005-06-09 14:41) [9]

Кстати и в Int64 тоже, при тех же условиях.


 
Anatoly Podgoretsky ©   (2005-06-09 14:48) [10]

Разница большая и состоит в том что к типу ftInteger нельзя применять AsLargeInt, к тому же его просто нет в природе.


 
ANB ©   (2005-06-09 20:30) [11]

А почему к параметру можно ? И почему нельзя ? Вот я могу применить AsInteger к строковому полю (ftString), ошибку получу в рантайме. Но скомпиляется же. А LargeInt для полей я вообще не нашел. Почему и сижу с вопросом.


 
Petr V. Abramov ©   (2005-06-09 20:43) [12]

field.asfloat вполне корректно работает с number без скобок


 
ANB ©   (2005-06-09 20:45) [13]

А потом круглить ? Кстати, надо поэкспериментить.


 
Anatoly Podgoretsky ©   (2005-06-09 20:54) [14]

ANB ©   (09.06.05 20:30) [11]
Плохо ищешь TLargeintField


 
ANB ©   (2005-06-09 20:56) [15]

Это типа TLargeintField(FieldByName()) ? Ща попробую.


 
ANB ©   (2005-06-09 20:57) [16]

Не пахает так. И маленькие числа поломались.


 
Anatoly Podgoretsky ©   (2005-06-09 21:01) [17]

Какое к черту приведение, это же диверсия.
В конце концов пора бы уже сказать какой у тебя тип поля в программе.


 
ANB ©   (2005-06-09 21:05) [18]

Дык не заводил спецом. Ща попробую статически. . . Автоматом село как TFloatField. То есть придется заводить это поле ручками в рантайме ?


 
Anatoly Podgoretsky ©   (2005-06-09 21:08) [19]

А толку, это будет уже другое вредительство. Надо делать на сервере.


 
ANB ©   (2005-06-09 21:15) [20]

Это как ? Number без параметров я для ID юзаю, чтобы не кончились раньше времени. Получается, что они кончаться раньше, чем я думал ?


 
Anatoly Podgoretsky ©   (2005-06-09 22:00) [21]

Ну и как видишь это не LargeInt для Дельфи


 
Reindeer Moss Eater ©   (2005-06-09 22:08) [22]

Используй Double. Это проще.
Точности у типа number Оракла хватит для того что бы корректно сравнивать в Delphi две AsFloat величины содержащих значения полей (скажем number(12,0))


 
ANB ©   (2005-06-09 22:35) [23]

Number(12,0) - маловато будет.


 
ANB ©   (2005-06-09 22:36) [24]

Проблема срочно не стоит. Раз вылезла на промышленной конвертации, но сроки горели и я залатал дырку через StrToInt(AsString). Все отработало. Но теперь интересно - неужели только так по дубовому ?


 
Anatoly Podgoretsky ©   (2005-06-09 23:23) [25]

ANB ©   (09.06.05 22:35) [23]
Сколькно новых записей в сутки?


 
Reindeer Moss Eater ©   (2005-06-10 00:02) [26]

number(12,0)  это не предел.
Просто для примера приведено.
Работай с Double и будет счастье.


 
ANB ©   (2005-06-10 00:39) [27]


> Anatoly Podgoretsky ©   (09.06.05 23:23) [25]
- это уже не у меня. Но примерно :
В базе около 500 тысяч человек. На каждого приходится в месяц около 20 записей в связанных таблицах, то есть около 10 миллионов новых записей в самой детализованной таблице в месяц.


 
ANB ©   (2005-06-10 00:40) [28]


> Работай с Double и будет счастье.
- ID с типом Double - как то несерьезно. :(((


 
Reindeer Moss Eater ©   (2005-06-10 00:44) [29]

Ну тогда извращайся с квадратными колесами.
А способ-то с double - верный.


 
ANB ©   (2005-06-10 00:47) [30]

Млин, я в новом проекте уже везде Int64 напихал. Хотя тут маловероятно переполнение - больше 1000 записей в день я не генерю . . . И то только в одной таблице. На крайняк - придется только для нее изгальнутся.


 
Reindeer Moss Eater ©   (2005-06-10 00:48) [31]

Тебе в паскале-то зачем этот id?
Заселектить в одном месте и использовать в качестве параметра запроса в другом?
Тогда забудь про ENABLE INTEGERS и работай с TFloatField.
Заодно навсегда забудешь про нехватку диапазона Integer.


 
ANB ©   (2005-06-10 00:52) [32]

В дабл только 15 цифр влезает, дальше округление начнется, а в Int64 - 19. Хотя, экспериментально, я в number только 14 цифр смог запихать, дальше отрезание началось


 
ANB ©   (2005-06-10 00:54) [33]


> Тебе в паскале-то зачем этот id?
> Заселектить в одном месте и использовать в качестве параметра
> запроса в другом?
- ну да. Снять с грида и отправить параметром в полезную функцию. Я их уже все на int64 повесил.


 
Reindeer Moss Eater ©   (2005-06-10 00:55) [34]

У Оракла в типе NUMBER 38(тридцать восемь!) значащих цифр.
Сравни с точностью паскалевского типа Double и все сразу станет ясно. (Это про корректность операций сравнения)
Или ты хочешь сказать, что значения кодов и в диапазон Double у тебя не влезает?
Ты часом не атомы во вселенной решил пересчитать?
:)


 
Reindeer Moss Eater ©   (2005-06-10 00:56) [35]

- ну да. Снять с грида и отправить параметром в полезную функцию. Я их уже все на int64 повесил.

Используй Double.
И все.
Ничего изобретать не надо.


 
ANB ©   (2005-06-10 01:02) [36]


> Сравни с точностью паскалевского типа Double
- посмотрел на дабл - 15 значащих цифр.


> У Оракла в типе NUMBER 38(тридцать восемь!) значащих цифр.
- я тоадом, ручками пытался число запихать поболее, с 15 - цифры началось округление. Хотя, это может быть глюк тоада.


 
ANB ©   (2005-06-10 01:07) [37]

Обалдет, и правда 38 цифр влезло. Это я и в Int64 не запихаю. Правда смотреть можно только в виде to_char


 
Anatoly Podgoretsky ©   (2005-06-10 07:39) [38]

ANB ©   (10.06.05 00:47) [30]
При 1000 записях в день 12.0 хватит на 2 739 726 лет


 
<Lelik>   (2005-06-16 10:36) [39]

Удалено модератором
Примечание: Тебе кто то запретил задавать вопросы в форуме?



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.078 c
1-1121068357
Grant
2005-07-11 11:52
2005.07.31
Работа с компонентом Image


3-1118393371
Dummes
2005-06-10 12:49
2005.07.31
Запрос и ProgressBar


1-1121338649
webpauk
2005-07-14 14:57
2005.07.31
Свойства файла


14-1120923281
dec
2005-07-09 19:34
2005.07.31
На чем лучше писать сервер ?


3-1119527942
XpbI
2005-06-23 15:59
2005.07.31
Едет крыша не спеша тихо сиквелом шурша... F1