Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

Проблема с ADOQuery   Найти похожие ветки 

 
igor666 ©   (2006-11-08 10:49) [0]

Проблема вот в чём, в АДОКвери генерится запрос (в запросе используются хранимы процедуры, которые в зависимости от данных в БД генерят различное кол-во полей для вывода, поэтому заранее я не могу знать сколько полей будет выведено в запросе). Так вот, в БД имеются поля типа decimal(18,5), т.е. 5 знаков после запятой, а кверя во время выборки присваивает им тип TBCD, который не выводит больше 4х знаков после запятой, а мне важно именно 5 знаков!!!. Подскажите плз как этого можно избежать, как вдрать 5 знаков из БД?

Спасибо.


 
Stanislav ©   (2006-11-08 10:55) [1]

Я удалял эти поля в Query, и пересоздавал их как Float. Только делал это в конструкторе программно не приходилось.


 
igor666 ©   (2006-11-08 10:59) [2]

В том то и дело что в конструкторе это не проблема, но я же писал что кол-во полей динамическое и названия их тоже, поэтому в конструкторе я просто этого сделать не могу. А стандартная процедура TField.SetDataType() - в дэлфи просто пустая, её либо забыли написать, либо просто шутки у борланда такие, в модуле просто begin end и всё :), а между ними пусто.


 
Stanislav ©   (2006-11-08 11:14) [3]

В запросе преобразовывой в float.


 
sniknik ©   (2006-11-08 11:31) [4]

> в модуле просто begin end и всё :),
ага, шутки, и главная шутка в слове abstract в описании.  
и ты не туда смотришь, в моем дельфи SetDataType с одной строчкой внутри
procedure TField.SetDataType(Value: TFieldType);
begin
 FDataType := Value;
end;
 

> decimal(18,5)
этого многие уже не поддерживают, но тип TBCD имеет до 99 знаков после запятой... другое дело что в дельфе приведение идет через currency у которого действительно 4 знака после запятой (вернее это вообще целочисленный тип, просто принили что 4 разряда под дробь).
так что ADOQuery тут не причем (как бы не нелюбил я его но справедливость дороже ;о)), это дельфя, если хочеш можеш попробовать сделать приведение сам, дабавить свой метод asBcd, без этого недостатка (currency).


 
igor666 ©   (2006-11-08 12:09) [5]

мдя, прийдётся занчит везде в запросе CAST добавлять и конвертить во float, спасибо всем


 
igor666 ©   (2006-11-08 12:11) [6]

кстати, а на счёт SetDataType у меня он действительно пустым был, теперь поставил FDataType := Value; :)


 
igor666 ©   (2006-11-09 13:52) [7]

Всё оказалось намного проще, в ADO есть свойство EnableBCD, если его поставить в false, то всё конвертится без проблем и все знаки после запятой сохраняются :))


 
sniknik ©   (2006-11-09 14:05) [8]

> если его поставить в false
то конвертация идет не через currency а через float (что тоже плохо для денежных данных. т.к. тип с плавающей точкой)



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

Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.061 c
3-1163531908
Kolan
2006-11-14 22:18
2007.02.04
Неужели циклы в T-SQL так тупо сделаны - неверю...


3-1163160336
Kolan
2006-11-10 15:05
2007.02.04
Как колонки сделать строками(SQL)


2-1169158460
AlexeyT
2007-01-19 01:14
2007.02.04
Печать TImage/TBitmap?


15-1168617357
Ringo
2007-01-12 18:55
2007.02.04
Первым местом поселения современного человека в Европе была...


1-1165436256
Pattern
2006-12-06 23:17
2007.02.04
Зависание программы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский