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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
14-1640
Best Guns
2003-08-12 20:06
2003.09.01
Сайт delphimaster не отвечал


14-1650
Khloo!
2003-08-11 13:42
2003.09.01
База данных...


6-1530
Akni
2003-06-17 14:40
2003.09.01
Socket.OnWrite


1-1460
Layner
2003-08-18 15:17
2003.09.01
Мастера, подскажите! есть поток, при нажатии делает опр. действия


14-1607
k-man
2003-08-13 18:37
2003.09.01
Странности





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