Здравствуйте!
Как мне кажется перерыл тонну документации — результат 0. Проблема в следующем. На стороне OLE DB Provider генерирую ошибку следующим образом:
//Query interface
hr = pErrorInfo->QueryInterface
(
IID_IErrorRecords,
(void**)&pErrorRecords
);
if (pErrorRecords != NULL && hr == S_OK)
{
ERRORINFO errorinfo;
errorinfo.clsid = CLSID_MySqlProv;
errorinfo.dispid = NULL;
errorinfo.dwMinor = dwError;//dwError приходит в функцию
errorinfo.hrError = hrError;//hrError приходит в функцию
errorinfo.iid = IID_ICommand;//приходит в функцию
// Set up a parameter to pass to the object.
VARIANTARG varg;
VariantInit (&varg);
DISPPARAMS dispparams = {&varg, NULL, 1, 0};
varg.vt = VT_BSTR;
varg.bstrVal = SysAllocString(A2WBSTR(pszText));//pszText приходит в функцию
hr = pErrorRecords->AddErrorRecord(&errorinfo, errorinfo.dwMinor, &dispparams,NULL,0);
VariantClear(&varg);
hr = SetErrorInfo(0, pErrorInfo);
}
}
}
if (pErrorRecords)
pErrorRecords->Release();
if (pErrorInfo)
pErrorInfo->Release();
if(pErrorObjectFactory)
pErrorObjectFactory->Release();
return hrError;
На стороне клиента в Басице делаю следующее:
Dim cmd As New ADODB.Command
On Error GoTo err_section
conn.CursorLocation = adUseServer
conn.Open "Provider=MySqlProvAS;Data Source=mydb;Integrated Security="""";Password=""blabla"";User ID=lama;Location=localhost;Extended Properties="""""
cmd.ActiveConnection = conn
cmd.CommandText = "select * from mytable" 'такой таблицы нет
cmd.Execute
Exit Sub
err_section:
MsgBox conn.Errors(0).Description & vbCrLf & conn.Errors(0).NativeError & vbCrLf _
& conn.Errors(0).Number & vbCrLf & conn.Errors(0).Source _
& vbCrLf & conn.Errors(0).SQLState
в итоге получаю только NativeError и Number. Description кудато замылился.
Пробовал в AddErrorRecord пихать IErrorInfo, созданный CreateErrorInfo и заполненный — все нормально, но мне туда надо ISQLErrorInfo пихать. Тогда как быть с Description. Что то я запутался. Помогите кто может. Заранее спасибо.