Полето Float на TQuery е имплицитно закръглено до цяло число, когато се използва ODBC

Запитвам 1 стойност от таблицата. В db стойността му е 48,8

Когато приложението ми използва родния драйвер на Oracle SQL Link на BDE, всичко е наред, все още е 48.8.

След това карам приложението да използва друг псевдоним на BDE, който използва ODBC източник на данни (най-нов драйвер от Oracle). Сега показаната стойност е 48,0


Подробности

Колоната е factW NUMBER(10, 3).

Тестови код:

var
  q: TQuery;
begin
  q := TQuery.Create( SELF );
  try
    q.DatabaseName := 'Realize';
    q.SQL.Text := 'SELECT factW, TO_CHAR(factW) charW'
                 +'FROM bSertific WHERE id_sertific = :id';
    q.ParamByName('id').AsInteger := dm1.Sertif1ID_SERTIFIC.AsInteger;
    q.Open;

    ShowMessage( ' factW = ' 
                 + FloatToStrF( 
                        q.FieldByName('factW').AsFloat, 
                        ffFixed, 
                        5, 3 )                                   // here 48.000
                 + ' charW = ' + q.FieldByName('charW').AsString // here 48.8
    );
  finally
    q.Free;
  end;
end;

person Alexander Malakhov    schedule 24.11.2011    source източник
comment
Знаете, че BDE е отхвърлен от около десетилетие, нали? Няма гаранция, че ще работи с който и да е от ODBC драйверите, пуснати преди около 10 години, и решаването на проблеми с каквито и да било драйвери от този момент не е твърде вероятно.   -  person Ken White    schedule 24.11.2011
comment
@Ken Знам, че е отхвърлен от 2002 г.. Стар е и създава главоболия и всъщност се опитвам да премина към ODBC поради някои проблеми с BDE на Win7. Като се има предвид това, имам проблем сега и пренаписването на всички приложения не е работа за няколко дни   -  person Alexander Malakhov    schedule 24.11.2011
comment
Тогава не актуализирайте драйвера на Oracle. :) Този проблем се създаваше почти десет години и това е достатъчно време, за да го премахнем от проблем. Ако сте успели да настоявате вашите клиенти/клиенти/каквото и да мине през процеса на инсталиране и конфигуриране на BDE толкова дълго, можете да ги помолите да не надграждат Oracle ODBC клиента за известно време.   -  person Ken White    schedule 24.11.2011
comment
@Ken проблемът се показва само на Win7 (на XP всичко е наред), така че клиентите не са имали проблеми преди. Това трябва да бъде поправено сега. Единствената ми надежда е, че проблемът е с драйвера, а не с BDE. Пренаписването на 15-годишно (скапано) приложение Delphi 6 не е това, за което мечтая, знаете :) Още повече, че е планирано за пълно прекрояване и пренаписване в Java EE през следващите 12-15 месеца. Нещо бързо и мръсно би било добре   -  person Alexander Malakhov    schedule 24.11.2011
comment
съжалявам Дали клиентите са имали проблеми преди или не, няма значение. Нито вашето усещане за пренаписване, нито пък бъдещите планове за дизайн. „Нещо бързо и мръсно трябваше да се случи през 2001 г.; след това не е толкова бързо, но много по-мръсно. Бързото и мръсно е да кажете на клиента си да не актуализира своите ODBC драйвери, докато не можете да предоставите по-добра алтернатива, и тогава вие разбиете задната ни страна, предоставяйки тази по-добра алтернатива.   -  person Ken White    schedule 24.11.2011


Отговори (1)


Не бях намерил подходящо решение. Заобиколното решение е да направите заявка за полето като низ и да го конвертирате напред и назад от страна на клиента.

person Alexander Malakhov    schedule 05.02.2015