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

Вниз

отрицательные числа отображаются как положительные   Найти похожие ветки 

 
victor_ch   (2003-08-05 10:44) [0]

Добрый день Всем!!!
Столкнулся с такой проблемой: в базе данных у меня есть в каком то поле есть как отрицательные значения так и положительные, но вот при выводе значений этого поля в какой то элемент управления типа DBGrid,DBedit, итд - отрицательные значения отображаются как положительные т.е отсутствует знак "-", тип поля в базе MSSQL decimal, тип поля в Delphi TIntegerField.
Работаю через ADO компоненты, может быть в них есть какая то настройка, для правильного отображения отрицательных значений


 
Fiend ©   (2003-08-05 11:35) [1]

а почему у тебя дробное число (decimal) представлено как целое?
и приведи запрос


 
victor_ch   (2003-08-05 11:39) [2]

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

select * from <table>


 
ZrenBy ©   (2003-08-05 11:48) [3]

Это глюки Delphi

Попробуйте сделать следующее


// ADOQuery1.SQL.Text := "select A_ID, A_VL from TBL_A";
// [int] A_ID = 1;
// [bigint] A_VL = -1234567890987654321

Panel1.Caption := ADOQuery1.Fields[1].Value;
// имеем 1234567890987654321

Panel2.Caption := IntToStr( VarAsType(ADOQuery1.Fields[1].Value,varInt64) );
// имеем -1318314831

ADOQuery1.UpdateCursorPos;
Panel3.Caption := ADOQuery1.Recordset.Fields[1].Value;
// имеем -1234567890987654321


Я в подобных случаях работаю напрямую с RecordSet"ом


 
sniknik ©   (2003-08-05 11:58) [4]

какого типа поле в базе? поточнее decimal(?, ?), потому как у меня с ним все нормально. покажи запрос на создание если есть.

попробуй приведение типа к интеджеру в самом mssql-е, думаю поможет
SELECT CAST (хххх AS integer) as xxxx FROM ххххх


 
victor_ch   (2003-08-05 12:08) [5]

все разобрался

переделал в MSSQL тип данных с decimal на int и все нормально отображается

спасибо за советы


 
MW8   (2003-08-07 17:13) [6]

в модуле adodb.pas есть ошибки что касается этой проблемы
она связана с работой с Variant

function TCustomADODataSet.GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean;

...

procedure VarToBuffer;
...
у них так
ftLargeInt: LargeInt(Buffer^) := Decimal(Data).Lo64;
а надо так
ftLargeInt:
if Decimal(Data).sign > 0 then
LargeInt(Buffer^) := -1*Decimal(Data).Lo64
else
LargeInt(Buffer^) := Decimal(Data).Lo64;
...
procedure TCustomADODataSet.SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean);
...

procedure BufferToVar(var Data: OleVariant);
...
ftLargeInt:
begin
TVarData(Data).VType := VT_DECIMAL;
у них так
Decimal(Data).Lo64 := Int64(Buffer^);
а надо так
if LargeInt(Buffer^) < 0 then
begin
Decimal(Data).sign := 128;
Decimal(Data).Lo64 := -1*LargeInt(Buffer^);
end
else
Decimal(Data).Lo64 := LargeInt(Buffer^);
end;

для Delphi 7 достаточно
для Delphi 5, 6 возможно аналогично надо сделать для ftInteger

вообще там не только это
к сожалению Borland уже не тот что раньше



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
3-1319
styopkin
2003-08-08 12:14
2003.09.01
MIDAS, DCOM


14-1585
Феликс
2003-08-13 22:24
2003.09.01
Вы в курсе, что сегодня и завтра в Ин-нет лучше не выходить?


14-1642
Anikul
2003-08-14 02:11
2003.09.01
Как передать нажатия клавишь?


8-1517
Intell
2003-04-20 13:02
2003.09.01
Как показать уровень звука?


14-1648
SergP
2003-08-12 14:23
2003.09.01
И снова о Proxy-Сервере