Эта программа успешно работает если заменить adDecimal на adDouble (хотя дробная часть безжалостно округляется, что меня и не устраивает). А так при выполнении execute падает исключение (error #3105, "Multiple-step OLE DB operation generated error").
Подскажите чайнику, кто виноват? и что делать?
_bstr_t txt(L"insert into timet (yield) values (?)"), zero(L"");
_ConnectionPtr cn("ADODB.Connection");
_CommandPtr cmd("ADODB.Command");
cn->Open("Data Source=MQIS;Initial Catalog=quotes;", zero, zero, adConnectUnspecified);
cmd->PutRefActiveConnection(cn);
cmd->PutCommandText(txt);
CComVariant v("234567891235,739987");
TESTHR( v.ChangeType(VT_DECIMAL) );
_ParameterPtr pp = cmd->CreateParameter(zero, adDecimal, adParamInput, -1, v);
pp->Value = v;
cmd->Parameters->Append(pp);
cmd->Execute(NULL, NULL, adCmdText);
cn->Close();
Здравствуйте, gluq, Вы писали:
G>Эта программа успешно работает если заменить adDecimal на adDouble (хотя дробная часть безжалостно округляется, что меня и не устраивает). А так при выполнении execute падает исключение (error #3105, "Multiple-step OLE DB operation generated error").
G>Подскажите чайнику, кто виноват? и что делать?
G>_bstr_t txt(L"insert into timet (yield) values (?)"), zero(L"");
G>_ConnectionPtr cn("ADODB.Connection");
G>_CommandPtr cmd("ADODB.Command");
cn->>Open("Data Source=MQIS;Initial Catalog=quotes;", zero, zero, adConnectUnspecified);
cmd->>PutRefActiveConnection(cn);
cmd->>PutCommandText(txt);
G>CComVariant v("234567891235,739987");
G>TESTHR( v.ChangeType(VT_DECIMAL) );
G>_ParameterPtr pp = cmd->CreateParameter(zero, adDecimal, adParamInput, -1, v);
pp->>Value = v;
cmd->>Parameters->Append(pp);
cmd->>Execute(NULL, NULL, adCmdText);
cn->>Close();
Читаем хелп
CreateParameter Method
...
If you specify a numeric data type (adNumeric or adDecimal) in the Type argument, then you must also set the NumericScale and Precision properties.
Так что
pp->put_Precision(16); // put value from your DB decimal field setting 'precision'
pp->put_NumericScale(6); // // put values from your DB decimal field setting 'scale'
спасут отца русской демократии
С уважением. Алик.