C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
бага в ADO c __int64
Lepsik
Отправлено: 04.11.2005, 01:18


Ученик-кочегар

Группа: Участник
Сообщений: 3



Win2KPro SP4 MSSQL2000 SP4 IntelP4 ADO MDAC2.8
VS2005

есть такая таблица
SQL
CREATE TABLE [indx_picture] (
[hash] [bigint] NOT NULL ,
[fld] [int] NOT NULL
)


пытаюсь положить в hash __int64 .

CODE

// open the table
_RecordsetPtr rset("ADODB.Recordset");
rset->Open( L"indx_picture", (IDispatch*)pConnection, adOpenDynamic, adLockOptimistic, adCmdTable );

FieldsPtr flds = rset->Fields;
for(size_t i = 0; i < lstRecord.size(); i++)
{
 word_data &val = lstRecord[i];
 try
 {
    rset->AddNew();
    flds->Item[ L"hash" ]->Value    = 1000L;    /// отлично
// причем в flds->Item[ L"hash" ]->Type лежит adBigInt
    flds->Item[ L"hash" ]->Value    = (__int64)1000; // вот тут сразу вылетает


Error Code = 80020008 Code meaning = B Source = Provider Description = Bad variable type.
olegenty
Отправлено: 04.11.2005, 07:32


Ветеран

Группа: Модератор
Сообщений: 2412



а если вместо Value написать AsLargeint, тоже с ошибкой вылетает? smile.gif
весь фокус в том, что Value имеет тип Variant, который, в свою очередь, не кастится с __int64.

кстати, а зачем такой экзотический способ использования ADO?

Отредактировано olegenty — 05/11/2005, 09:17
Lepsik
Отправлено: 04.11.2005, 17:22


Ученик-кочегар

Группа: Участник
Сообщений: 3



ах совсем забыл что форму по CBuilder, в нем-то как раз все отлично.

но вот у variant_t нет такого оператора AsLargeInt
olegenty
Отправлено: 05.11.2005, 08:20


Ветеран

Группа: Модератор
Сообщений: 2412



ну и проверь, кастится он с __int64, или нет? посмотри, влазит ли туда столько? если да, то делай двойное приведение.
Lepsik
Отправлено: 07.11.2005, 17:33


Ученик-кочегар

Группа: Участник
Сообщений: 3



там SetItem внутри ADO не принимал.

Теперь все работает — там аргументы или long или bstr должны быть.

невидно было в описании.

Вернуться в Работа с базами данных в C++Builder