RUS  ENG 

Ошибка BDE

Страницы: 1
RSS
Ошибка BDE
 
Добрый день.
Столкнулся с проблемой.
Подключаюсь к карте локально.
Выполняю запросы к базе данных слоя через zb.dll.
При одновременном запуске нескольких приложений иногда появляется ошибка при вызове метода IZbQueryInfo.QueryByExample():
"Не выполнить запрос.
An error occurred while attempting to initialize the Borland Database Engine (error $210D) (Код ошибки 0х8BDE210D)"
Как можно её избежать?
 
Пока трудно что либо сказать без дополнительных данных. Например, в какой среде разрабатывается приложение ? Delphi ? Используются ли компоненты Delphi для доступа к данным (BDE) в этом приложении (например часть запросов через Zb.dll, часть напрямую через Delphi) и т.д.
"Иногда появляется ошибка" - при каких обстоятельствах, какие запросы, в каком порядке выполнялись ?
 
Использую Microsoft Visual C# 2010, Windows 7 Максимальная.
BDE использует только компоненты Zulu.
Запрос к данным выполняется один раз после подключения к карте (или переподключения).
Если возникла данная ошибка, то необходимо закрыть все приложения использующие zb.dll, причем работающие другие приложения могут выполнять запрос к данным.
При каждом запуске приложения производится регистрация компонентов Zulu.
В настройках BDE:
SHAREDMEMLOCATION - 5BDE
SHEREDMEMSIZE - 4096

Вот так выглядит метод, использующий zb.dll:
Layer Layer = axZuluMap.Map.Layers[(short)index];
ZbDatabase DataBase = null;
try
{
DataBase = new ZbDatabase();
if (!DataBase.Open(Layer.BaseName))
{
return false;
}
DataTable tempTable = new DataTable();
IZbDataset Dataset = null;
IZbQueryInfo QueryInfo = DataBase.Queries[index2];
int QueryResult = 0;
QueryInfo.QueryByExample("", null, ref QueryResult, ref Dataset);//В этом месте возникает эта ошибка
if (Dataset == null)
return false;
Dataset.MoveFirst();
while (!Dataset.Eof)
{
DataRow Row = tempTable.NewRow();
for (int i = 0; i < ListFilds.Count; i++)
{
Row[i] = Dataset.get_FieldDisplayValue(i);
}
tempTable.Rows.Add(Row);
Dataset.MoveNext();
}
return true;
}
catch
{
return false;
}
finally
{
if (DataBase != null)
DataBase.Close(true);
}
 
Ошибка с кодом 210D - "Shared memory conflict". Попробуйте изменить параметр SHAREDMEMLOCATION, его рекомендуют выбирать из диапазона 1000 - 7F00 (например 6BDE или 7BDE)
 
Спасибо за вашу помощь :)
 
Your information is not adequate enough to provide you the right solution. The only fault I have found is the one Douser said, that SHAREDMEMLOCATION, it is recommended to choose from a range of 1000 - 7F00. Try correcting this and execute the program once again.
Страницы: 1