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, тоже с ошибкой вылетает?
весь фокус в том, что 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 должны быть.
невидно было в описании. |
|