Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 sql ce и ошибка 80040E05 db_e_objopen  [new]
x1ca4064
Member

Откуда:
Сообщений: 838
Имеем:

1. ms sql ce 3.5
2. Delphi 5

Задача:

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

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

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:
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. Для БД, с которой необходимо работать (это база программы предоставления информации о движении алкоголя):
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", котрое не все провайдеры поддерживают. Попытка его задания:

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?

Спасибо.
11 авг 12, 22:59    [12998917]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
TADOConnection
12 авг 12, 00:25    [12999263]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
x1ca4064
Member

Откуда:
Сообщений: 838
_Vasilisk_
TADOConnection


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

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;
12 авг 12, 06:04    [12999750]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
x1ca4064
Member

Откуда:
Сообщений: 838
Ошибка появляется, когда в выборке есть столбец nvarchar длиной более 127.

Но проблема-то осталась...
12 авг 12, 07:29    [12999768]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Jenyok2
Member

Откуда:
Сообщений: 12
Аналогичная ситуация.
.
Как бороться ???
Есть решение ???
.
21 ноя 17, 13:47    [20972062]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Jenyok2
Member

Откуда:
Сообщений: 12
Решения НЕТ совсем ???
.
24 ноя 17, 10:09    [20979967]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Jenyok2
Member

Откуда:
Сообщений: 12
Поднимем темы !!!
.
Есть у кого либо решение по данному вопросу ?
.
18 дек 17, 06:46    [21041491]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2468
Jenyok2
Поднимем темы !!!
.
Есть у кого либо решение по данному вопросу ?
.


CursorLocation := clUseServer не помогает?
18 дек 17, 08:47    [21041547]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Jenyok2
Member

Откуда:
Сообщений: 12
Tactical Nuclear Penguin
Jenyok2
Поднимем темы !!!
.
Есть у кого либо решение по данному вопросу ?
.


CursorLocation := clUseServer не помогает?

.
Пробовали.
Не помогает.
Ошибка так и не исправлена в Delphi.
Как работать с базами данных с такой ошибкой НЕ понятно ???
Не возможно сделать простой запрос к БД , если в БД есть поле nvchar , длиной больше 127 символов.
.
Написано много у Delphi, а результата то НЕТ, НЕ работает...
Это напоминает, хотели как лучше, а получилось как всегда !!! В.С. Черномырдин.
.
24 дек 17, 19:43    [21058743]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 976
Jenyok2
Tactical Nuclear Penguin
пропущено...


CursorLocation := clUseServer не помогает?

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


Так ошибку и не исправят пока ее в QC не запилят, или там оракулы сидят?
24 дек 17, 21:11    [21058862]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Jenyok2
Member

Откуда:
Сообщений: 12
Поднимем тему слегка.
.
6 янв 18, 20:19    [21084949]     Ответить | Цитировать Сообщить модератору
 Re: sql ce и ошибка 80040E05 db_e_objopen  [new]
Любезный
Member

Откуда:
Сообщений: 460
А смысл?
Во-первых, для Delphi 5 никто патчей не выпустит.
Во-вторых, если проблема встречается на последних версиях, ее надо постить в тикеты. Здесь про нее знают, а толку?
6 янв 18, 20:38    [21084992]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить