У меня есть минималистский проект с FireDac FDConnection и FDSqlQuery, DataSetProvider и ClientDataSet, и я пытаюсь получить доступ к примеру Employee.FDB, который поставляется с пакетом Firebird 2.5, который я сегодня скачал с SourceForge.
Все установлено по умолчанию, поскольку они вышли из палитры, за исключением имени базы данных на всплывающей вкладке информации FDConnection и Sql FDQuery, для которого установлено значение select * from employee
.
FDQuery открывается нормально, но как только я пытаюсь открыть CDS в среде IDE или запускаю свое приложение, я получаю нарушение прав доступа.
Это весь мой код:
FDQuery1.Open;
Caption := IntToStr(FDQuery1.RecordCount); // this shows 42 on the form's caption
CDS1.Open; // AV here
Таким образом, FDQuery открывается нормально, а CDS — нет.
Во время выполнения здесь возникает исключение:
function TCustomClientDataSet.CreateDSBase: IDSBase;
begin
CreateDbClientObject(CLSID_DSBase, IDSBase, Result);
Check(Result.SetProp(dspropANSICODEPAGE, DefaultSystemCodePage)); <-- Exception here
Check(Result.SetProp(dspropUTF8METADATA, NativeUInt(True)));
Check(Result.SetProp(dspropUTF8ERRORMSG, NativeUInt(True)));
end;
Сообщение об исключении
Проект FBTest1 поднял класс исключения $C0000005 с сообщением «нарушение доступа по адресу 0x0075d05b: чтение адреса 0x00000000».
В среде IDE я получаю аналогичное исключение, если пытаюсь установить Active = True на CDS, что, как сказано в сообщении, произошло в DSnap200.Bpl.
В первый раз, когда это произошло во время выполнения, у меня появилось всплывающее окно «Отчет об инциденте», предлагающее сообщить об этом в Embarcadero. Впервые такое вижу.
Если я подставлю SqlConnection и SqlQuery для компонентов FDac, я получу ту же ошибку.
Итак, я думаю, мой вопрос заключается в том, можно ли спровоцировать CDS на такое поведение, просто используя настройки свойств по умолчанию для такого простого проекта, как этот, то есть я пропустил какой-то шаг, или это, вероятно, вещь EMBA QC?
CreateDbClientObject(CLSID_DSBase, IDSBase, Result)
возвращаетnil
в результате. Можно предположить, что он не может загрузить MIDAS.DLL или что-то в этом роде. Я бы подумал, что это вызовет ошибку времени выполнения, но кто знает. Вы можете попробовать добавить MidasLib в пункт использования вашего проекта. - person Graymatter   schedule 06.08.2014