2009-07-17 6 views
1

У меня возникла проблема с Delphi 6 + Oracle 10gR2 + ADO + ClientDataSet.Delphi 6 с ADO + Oracle возвращает NUMBER с различной точностью, генерируя переполнение BCD

Всякий раз, когда я запускаю агрегированную функцию в поле NUMBER (19,9), итоговый столбец возвращает тип данных NUMBER в Delphi, а на некоторых машинах он загружается как TBCDField с точностью 38, и все идет хорошо, но на некоторых машинах он загружается как TBCDField с точностью 255, и я получаю переполнение BCD на поле.

Чтобы воспроизвести проблему, просто создать таблицу с номером столбца (19,9), и запустить SELECT SUM ( column_name) имя_столбца ОТ table_name GROUP BY column_name.

Несмотря на то, что столбец представляет собой НОМЕР (19,9), итоговый столбец будет НОМЕР, без определенной точности.

В Delphi загрузите запрос в ADOQuery, связанный с ним DataSetProvider и ClientDataSet, связанный с DataSetProvider. После того, как я вызываю ClientDataSet.Open, на некоторых машинах я получаю сообщение переполнения BCD в поле NUMBER, но на многих машинах он работает хорошо.

Почему я получаю эту точность 255 на некоторых машинах, когда клиенты midas.dll, ADO, server, user, oracle все равно на обеих машинах? Есть идеи?

ответ

0

У меня нет окончательного ответа для вас, но вы уверены, что у вас одинаковые версии клиентских dll на обеих машинах? Может быть установлено другое программное обеспечение, которое мешает. Попробуйте запустить Windows Process Explorer на клиентских компьютерах и убедитесь, что ваши DLL-файлы, которые, по вашему мнению, вы используете, являются теми, которые фактически используются вашими клиентскими приложениями.

+0

Попробую с помощью Process Explorer. Хорошая идея. Но обе машины имеют одного и того же клиента, я уверен – Pascal

1

типа Try литые

Select **CAST(NUMBER_FLD as VARCHAR2(15))** as NUMBER_FLD from DUAL; 

На Delphi, является StringField (ClientDataSet) компонент, но если вы получите по псевдониму, как CdsOracleSQL.FieldByname('NUMBER_FLD').AsFloat или CdsOracleSQLNUMBER_FLD.AsFloat работ.

я не знаю, почему BCDField теряет десятичный разделитель и работает любит целое ...

 Смежные вопросы

  • Нет связанных вопросов^_^