Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длинное целое [Pervasive SQL 2000i]


Страницы:   1 2

Рамиль ©   (2003-12-09 10:22:00) 

В БД первичный ключ имеет разрядность 64 бит. Как его вытащить в программу? Если пользоваться BDE то он преобразует его в число с плавающей точкой. ADO пишет BCD overflow. Обращение к полю как Variant тоже ничего не дает. Единственный приемлемый вариант, который я нашел, это преобразовывать число в строку в select функцией СУБД. Может еще как нибудь можно?


Апач   (2003-12-09 14:14:00) [21]

а ты не пользовался бетривовскими юнитами PvTables, BtvTables,
там гдето функция есть
DirectBtrCall( , , , , , );
нудно но зато все правильно и быстро


Рамиль   (2003-12-09 14:11:00) [22]


> Запрети драйверу использовать BCD поля.
> Работай c ftFloat полем.

А как? С остальными полями что делать? Провайдер MSDASQL, свой родной не хочет работать ни в какую.


Рамиль   (2003-12-09 14:09:00) [23]


> ADOTable1.UpdateCursorPos;
> Panel1.Caption := ADOTable1.Recordset.Fields["nrec"].Value;

Хм... Это работает.

> подробней про "билеберду"..

При использовании ADO это не работает вообще, пишет не могу преобразовать Decimal в Currency. При использовании BDE вместо 2000000007 возвращает 4746175416023121920, например.

Кстати ошибка возникает также при попытке запуска программы с использованием ADO в IDE, при запуске exe не ругается...

Даже если воспользоваться [9], все равно непонятно как избавиться от появления ошибки в IDE
Вообщем фигня полная...


Reindeer Moss Eater   (2003-12-09 13:23:00) [24]

Запрети драйверу использовать BCD поля.
Работай c ftFloat полем.


Digitman   (2003-12-09 13:21:00) [25]


> А это что?
> > new(vr);


миль пардон, проглядел


> Такая конструкция дает билеберду


подробней про "билеберду"..


ZrenBy   (2003-12-09 13:15:00) [26]

А что дает

ADOTable1.UpdateCursorPos;
Panel1.Caption := ADOTable1.Recordset.Fields["nrec"].Value;


Рамиль   (2003-12-09 13:14:00) [27]


> Digitman © (09.12.03 13:00) [7]

А это что?
> new(vr);

Ну поставлю я
vr := AllocMem(8), от этого ничего не изменится.


Digitman   (2003-12-09 13:00:00) [28]

а кто за тебя будет память выделять ? Пушкин ?


Рамиль   (2003-12-09 12:56:00) [29]


> а попробуй в дизайнере полей указать явно это поле как Largeint

ADOTable1: Type mismatch for field "nrec": excepting LargeInt actual: BCD

вот:(


Hooch   (2003-12-09 11:55:00) [30]

а попробуй в дизайнере полей указать явно это поле как Largeint


Рамиль   (2003-12-09 11:52:00) [31]

В Gride пишет BCD Overflow, соответственно и при обращении.


Hooch   (2003-12-09 11:49:00) [32]

ADO ошибку выдает про открытии или при обращению к полю ?


Рамиль   (2003-12-09 11:38:00) [33]

Такая конструкция дает билеберду
var
vr: PInt64;
begin
new(vr);
Table1.FieldByName("nrec").GetData(vr);
end;

(DataSize возвращает 8)
Это значит надо разобраться как число физически хранится в БД, при этом Locate еще не будет доступно... Я правильно понимаю?


Digitman   (2003-12-09 10:39:00) [34]

см. метод TField.GetData()
позволяет "вытащить" данные поля безо всяких преобразований


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо