Главная страница
    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.53 MB
Время: 0.04 c
5-1091566662
boband
2004-08-04 00:57
2005.07.31
Stack overflow - save your work and restart Delphi


3-1119340037
ali_tash
2005-06-21 11:47
2005.07.31
TOracleDataSet выводит поля с пробелами как пустые


14-1120102166
cyborg
2005-06-30 07:29
2005.07.31
Socket 754 vs Socket 939


8-1111166253
seregka
2005-03-18 20:17
2005.07.31
Cжатие jpg до определенного размера


6-1114148067
marcel
2005-04-22 09:34
2005.07.31
Автоматическое обновление компонентов ПО





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский