![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с KOLEdb [Delphi, Windows]
Ricko © (2004-01-23 13:46:00)База данных MS SQL Server;поле ID; формат MONEY; значение 98000060023. Использую KOLEdb:
id:=QR.RFieldByName['ID'];
Получаю значение 73243.2496. Почему так?
Владимир Кладов (2004-02-25 15:14:00) [1]CURRENCY
A data type that is useful for calculations involving money or for fixed-point calculations in which accuracy is extremely important. This data type is used to store numbers with up to 15 digits to the left of the decimal point and 4 digits to the right. Because the Currency data type uses discrete values for all amounts, binary round-off isn’t a factor when calculating totals.
Ну и все. Trunc( Result/100 ) / 100 = вот вам и деньги.
Ricko (2004-02-25 09:43:00) [2]Разве 980000600230000 = 98000060023 ?
Boguslaw (2004-02-24 21:32:00) [3]By the way Vladimir ,could You add this two useful procedures to KOlOleDB
ShowLastOleError is for case when error should be shown only sometimes .
DummyOleError is replacement of old one which show OLE DB error description (which is hardly to find in docs so it nice feature)
I could also send You my all file but I;m not sure that I have the newest version modified.
Boguslaw Brandys
procedure ShowLastOleError;
var
hr : HRESULT;
pIErrorInfo : IErrorInfo;
Source,Description : WideString;
begin
hr := GetErrorInfo(0,pIErrorInfo);
// We've got the IErrorInfo interface pointer on the Error object
if (hr = 0) then
begin
pIErrorInfo.GetSource(Source);
pIErrorInfo.GetDescription(Description);
end;
// if Assigned(pIErrorInfo) then pIErrorInfo._Release;
ShowMsg('OLE DB error ' + ' [' + Source + '] ' + Description,mb_iconhand);
end;
procedure DummyOleError( Result: HResult );
var
HR : HRESULT;
pIErrorInfo : IErrorInfo;
Source,Description : WideString;
begin
hr := GetErrorInfo(0,pIErrorInfo);
// We've got the IErrorInfo interface pointer on the Error object
if (hr = 0) then
begin
pIErrorInfo.GetSource(Source);
pIErrorInfo.GetDescription(Description);
end;
// if Assigned(pIErrorInfo) then pIErrorInfo._Release;
ShowMsg( 'OLE DB error ' + Int2Hex( Result, 8 ) + ' [' + Source + '] ' + Description,mb_iconhand);
Halt;
end;
Владимир Кладов (2004-02-24 20:21:00) [4]Ну и чем второе решение не устраивает? Значение же верное возвращается. Или надо что-то другое чтобы получалось?
Ricko (2004-02-24 16:35:00) [5]А если вот так:
var id : int64;
id:=QR.LFieldByName['ID']
То получаем 980000600230000.
Что делать? Помогите.