![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длинное целое [Pervasive SQL 2000i]
Рамиль © (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()
позволяет "вытащить" данные поля безо всяких преобразований