Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / sql ce и ошибка 80040E05 db_e_objopen / 12 сообщений из 12, страница 1 из 1
11.08.2012, 22:59
    #37913250
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Имеем:

1. ms sql ce 3.5
2. Delphi 5

Задача:

Подключится к БД.

Для проверки я написал следующую фунцию:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
function Test(AConStr:string;AQry:string):string;
var
  DObj:TAdoDataset;
begin
  Result:=format('Test(''%s'',''%s'')'#13#10'   ->',[AConStr,AQry]);
//  DObj:=TAdoQuery.Create(nil);
  DObj:=TAdoDataset.Create(nil);
  try
    try
      DObj.ConnectionString:=AConStr;
//      DObj.SQL.Text:=AQry;
      DObj.CommandText:=AQry;
      DObj.Open;
      Result:=format('%s RecordCount=%d',[Result,DObj.RecordCount]);
      DObj.Close;
    except
      on E:EOleException do
        Result:=(Format('%s %s: ''%s'' [ErrCode=$%x]',
          [Result,e.ClassName,e.Message,e.ErrorCode]));
      on e:exception do
        Result:=format('%s %s:''%s''',[Result,e.ClassName,e.Message]);
    end;
  finally
    DObj.Free;
  end;
end;



Результаты ее работы меня несколько смутили:

1. Для тестовой БД Northwind:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\Northwind35.sdf','select * from Categories')
   -> RecordCount=8
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\Northwind35.sdf','select * from Customers')
   -> RecordCount=91

...

Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\Northwind35.sdf','Select * from INFORMATION_SCHEMA.TABLES')
   -> EOleException: 'Объект был открыт' [ErrCode=$80040E05]
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\Northwind35.sdf','Select * from INFORMATION_SCHEMA.COLUMNS')
   -> EOleException: 'Объект был открыт' [ErrCode=$80040E05]



2. Для БД, с которой необходимо работать (это база программы предоставления информации о движении алкоголя):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from DecF1')
   -> RecordCount=0
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from DecF10')
   -> EOleException: 'Объект был открыт' [ErrCode=$80040E05]
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from DecF11')
   -> RecordCount=0
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from DecF12')
   -> RecordCount=0
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from DecF2')
....
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from DecF8')
   -> EOleException: 'Объект был открыт' [ErrCode=$80040E05]
...
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from ref_alckinds')
   -> EOleException: 'Объект был открыт' [ErrCode=$80040E05]
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from ref_declforms')
   -> EOleException: 'Объект был открыт' [ErrCode=$80040E05]
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf','select * from ref_declPeriod')
   -> RecordCount=4



Гуглинг нашел только некоторые сообщения, посвященные ошибке 80040E05 - она возникает, когда провайдер хочет, но не можетЮ открыть второе соединение. Это должно решаться заданием специального свойства "Multiple connections", котрое не все провайдеры поддерживают. Попытка его задания:

Код: sql
1.
2.
3.
4.
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf;Multiple Connection=True','select * from DecF10')
   -> EOleException: 'Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена' [ErrCode=$80040E21]
Test('Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=.\base.sdf;Multiple Connection=False','select * from DecF10')
   -> EOleException: 'Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена' [ErrCode=$80040E21]



Вопросы:
1. Есть ли эффективный способ борьбы с это странной ошибкой "объект открыт"?
2. Как из дельфи еще можно работать с БД SQL CE?

Спасибо.
...
Рейтинг: 0 / 0
12.08.2012, 00:25
    #37913305
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
TADOConnection
...
Рейтинг: 0 / 0
12.08.2012, 06:04
    #37913349
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
_Vasilisk_TADOConnection

Увы, с этим заклинанием пробовал - результат тотже.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
function TestConn(AConStr:string;AQry:string):string;
var
  DObj:TAdoDataset;
  Conn:TAdoConnection;
begin
  Result:=format('TestConn(''%s'',''%s'')'#13#10'   ->',[AConStr,AQry]);
  Conn:=TAdoConnection.Create(nil);
  DObj:=TAdoDataset.Create(nil);
  try
    try
      Conn.ConnectionString:=AConStr;
      Conn.LoginPrompt:=false;
      DObj.Connection:=Conn;
      DObj.CommandText:=AQry;
      DObj.Open;
      Result:=format('%s RecordCount=%d',[Result,DObj.RecordCount]);
      DObj.Close;
    except
      on E:EOleException do
        Result:=(Format('%s %s: ''%s'' [ErrCode=$%x]',
          [Result,e.ClassName,e.Message,e.ErrorCode]));
      on e:exception do
        Result:=format('%s %s:''%s''',[Result,e.ClassName,e.Message]);
    end;
  finally
    DObj.Free;
    Conn.Free;
  end;
end;
...
Рейтинг: 0 / 0
12.08.2012, 07:29
    #37913357
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Ошибка появляется, когда в выборке есть столбец nvarchar длиной более 127.

Но проблема-то осталась...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.11.2017, 13:47
    #39556814
Jenyok2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Аналогичная ситуация.
.
Как бороться ???
Есть решение ???
.
...
Рейтинг: 0 / 0
24.11.2017, 10:09
    #39558776
Jenyok2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Решения НЕТ совсем ???
.
...
Рейтинг: 0 / 0
18.12.2017, 06:46
    #39571156
Jenyok2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Поднимем темы !!!
.
Есть у кого либо решение по данному вопросу ?
.
...
Рейтинг: 0 / 0
18.12.2017, 08:47
    #39571163
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Jenyok2Поднимем темы !!!
.
Есть у кого либо решение по данному вопросу ?
.

CursorLocation := clUseServer не помогает?
...
Рейтинг: 0 / 0
24.12.2017, 19:43
    #39575038
Jenyok2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Tactical Nuclear PenguinJenyok2Поднимем темы !!!
.
Есть у кого либо решение по данному вопросу ?
.

CursorLocation := clUseServer не помогает?
.
Пробовали.
Не помогает.
Ошибка так и не исправлена в Delphi.
Как работать с базами данных с такой ошибкой НЕ понятно ???
Не возможно сделать простой запрос к БД , если в БД есть поле nvchar , длиной больше 127 символов.
.
Написано много у Delphi, а результата то НЕТ, НЕ работает...
Это напоминает, хотели как лучше, а получилось как всегда !!! В.С. Черномырдин.
.
...
Рейтинг: 0 / 0
24.12.2017, 21:11
    #39575053
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Jenyok2Tactical Nuclear Penguinпропущено...


CursorLocation := clUseServer не помогает?
.
Пробовали.
Не помогает.
Ошибка так и не исправлена в Delphi.
Как работать с базами данных с такой ошибкой НЕ понятно ???
Не возможно сделать простой запрос к БД , если в БД есть поле nvchar , длиной больше 127 символов.
.
Написано много у Delphi, а результата то НЕТ, НЕ работает...
Это напоминает, хотели как лучше, а получилось как всегда !!! В.С. Черномырдин.
.

Так ошибку и не исправят пока ее в QC не запилят, или там оракулы сидят?
...
Рейтинг: 0 / 0
06.01.2018, 20:19
    #39580150
Jenyok2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
Поднимем тему слегка.
.
...
Рейтинг: 0 / 0
06.01.2018, 20:38
    #39580161
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql ce и ошибка 80040E05 db_e_objopen
А смысл?
Во-первых, для Delphi 5 никто патчей не выпустит.
Во-вторых, если проблема встречается на последних версиях, ее надо постить в тикеты. Здесь про нее знают, а толку?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / sql ce и ошибка 80040E05 db_e_objopen / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]