Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> No mapping error code, Oracle8 - DbExpress - Delphi6 
:(
    Опции темы
Cetus
Дата 26.7.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



клиент написан на delphi6 тестировался на Oracle8,
при тестировании на Oracle 10 (у заказчика) стала возникать ошибка
(примерный текст) DBX Error: no mapping for error code.

Код


function  TDM.AddPerson(Id: string; Name, Surname, Patronymic, Phone, Note : string;
                        Id_Contractor : String;
                        DateIn, Rate, Id_Manager, Id_Position: string; PersonType: integer; isInsert : Boolean): boolean;
var
  TD : TTransactionDesc;
  dd : string;
  i : integer;
begin
  TD.TransactionID := 2;
  TD.IsolationLevel := xilREADCOMMITTED;
  SQLConnection.StartTransaction(TD);
  i := 0;
  if isInsert then
  try           ////////////   insert section
    // ввод данных о персоне
    SQLRq.Clear;
    SQLRq.Append(NoParam);
    SQLRq.Append(Surname);
    SQLRq.Append(Name);
    SQLRq.Append(Patronymic);
    SQLRq.Append(Phone);
    SQLRq.Append(Note);
    SQLRq.Append(NoParam);
    i := 1;
    if not InsRec(Tbl_Person, True, SQLRq) then
      raise exception.Create(NoParam);
    dd := '(SELECT Id FROM '+ Tables[Tbl_Person] +
          ' WHERE name=' + Quote + Name + Quote +  ' and surname=' + Quote + SurName + Quote + ' and Patronymic' + Patronymic + ' and Note' + Note +')';
    if (PersonType = ftPers_Employee) then
    begin
      // ввод работника
      SQLRq.Clear;
      SQLRq.Append(dd);
      SQLRq.Append(DateIn);
      SQLRq.Append(NoParam);
      SQLRq.Append(Id_Position);
      SQLRq.Append(Id_Manager);
      SQLRq.Append(Rate);
      SQLRq.Append(NoParam);
      i := 2;
      if not InsRec(Tbl_Employee, True, SQLRq) then
        raise exception.Create(NoParam);
    end
    else
    begin
      // ввод представителя
      SQLRq.Clear;
      SQLRq.Append(dd);
      SQLRq.Append(Id_Contractor);
      SQLRq.Append(NoParam);
      i := 3;
      if not InsRec(Tbl_Contact_Person, True, SQLRq) then
        raise exception.Create(NoParam);
    end;
    SQLConnection.Commit(TD);
    Result := True;
  except
    Result := False;
    SQLConnection.Rollback(Td);
  end
  else /////////////  update section
  try
    // update
    dd := '  UPDATE ' + Tables[Tbl_Person]  + ' SET ' +
          '  surname = ' + Surname +
          ', name = ' + Name+
          ', patronymic = ' + Patronymic +
          ', Phone = ' + Phone +
          ', note = ' + Note +
          '  WHERE Id=' + Id;
    i := 4;
    if not SQLExec(dd) then
      raise exception.Create(NoParam);
    dd := '  UPDATE ' + Tables[Tbl_Employee] + ' SET ' +
          '  Enrolment_date = ' + DateIn +
          ', Position_Id = ' + Quote + Id_Position + Quote +
          ', Manager_Id = ' + Quote + Id_Manager + Quote +
          ', Rate = ' + Quote + Rate + Quote +
          '  WHERE Id = ' + Id;
    i := 5;
    if (PersonType = ftPers_Employee) then
      if not SQLExec(dd) then
        raise exception.Create(NoParam);
    SQLConnection.Commit(TD);
    Result := True;
  except
    Result := False;
    SQLConnection.Rollback(Td);
  end;                  //////////  end all sections

  if not Result then
    Case DM.ErrorCode of
      NoError    : begin
                     AlarmBox('Данные о персоне были удалены другим пользователем');
                     Result := True;
                   end;
      cOraUnique : if (i = 1) or (i = 4) then
                     InfoBox('Человек с таким ФИО уже введен');
      cOraParent : if (i = 2) or (i = 5) then
                     AlarmBox('Термин должности был удален другим пользователем')
                   else if (i = 3) then
                     AlarmBox('Данные о контрагенте были удалены другим пользователем')
                   else
                     AlarmBox('Отсутствует одна из ведущих записей');
    else
      ErrorBox(DM.ErrorMessage);
    end;
end;



function TDM.SQLExec(SQLText: string): boolean;
begin
  try
    FRowsAffected := SQLConnection.Execute(SQLText, nil);
    Result := (FRowsAffected = 1);
    FErrorMessage := '';
    FErrorCode := NoError;
  except on E: Exception do begin
    FErrorMessage := E.Message;
    FErrorCode := GetOraError(FErrorMessage);
    Result := False;
  end; end;
end;


// добавление записи
function TDM.InsRec(TblNo: integer; LastDate :boolean; SQLRq : TStrings): boolean;
var
  dd, txt : string;
  i : integer;
begin
  Result := False;
  if (SQLRq.Count < 2) then exit;
  dd := '';
  for i := 0 to SQLRq.Count - 1 do
  begin
    txt := SQLRq.Strings[i];
    if (i = 0) then
      dd := Quote + txt + Quote;
    else
      dd := dd + Comma + Quote + txt + Quote;
  end;
  dd := 'INSERT INTO ' + Tables[TblNo] + ' VALUES (' + dd + ')';
  Result := SQLExec(dd);
end;





предполагаю что ошибка из-за использования транзакции, но что это может быть за баг??
использовались стандартные компоненты со вкладки bExpress

--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Cetus
Дата 26.7.2005, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



DBX: No mapping for error code found
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
LSD
Дата 27.7.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



В справке по Delphi 2005 я ничего про эту ошибку не нашел, а в 6-ке про нее чтонибудь написанно? И еще вопрос, в какой точке выкидывается ошибка. И кстати обновлять BDE, не пробовали?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Cetus
Дата 27.7.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



в файле sqlconst.pas:

-------------------
SDBXUNKNOWNERROR = 'DBX Error: No Mapping for Error Code Found';
-------------------

Использую не BDE, а DbExpress. последний есть в 6-ке а в 7 версии делфи его нет(по крайней мере каких-то компонент), про 2005 не знаю.

как я понял ошибка возникает при использовании транзакций.
(убрал транзакции и ошибка пропала).

отловить конкретный момент, когда возникает ошибка не могу.

баг, скорее всего, в используемых *.dll-ках DbExpress, на эту мысль подтолкнуло сообщение с королевства делфи, вопрос № 29378.

прогу тестировали на машине с делфи 7, oracle10, испольтзуемые .dll :
oci.dll от oracle 10;
dbexpint.dll и dbexpora.dll от delphi 6;

P.S. где брать обновление bde (и dbexpress?)
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
LSD
Дата 27.7.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Cetus @ 27.7.2005, 14:06)
Использую не BDE, а DbExpress. последний есть в 6-ке а в 7 версии делфи его нет(по крайней мере каких-то компонент), про 2005 не знаю.

В 2005 dbExpress есть, там у TSQLConnection есть свойство Multiple Transaction попробуй поменять его.

Цитата(Cetus @ 27.7.2005, 14:06)
P.S. где брать обновление bde (и dbexpress?)

BDE доступен для скачивания с борландовского сайта всем, а вот dbExpress обновляются вместе с Delphi, а эти обновления только для зарегестрированных пользователей.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Cetus
Дата 29.7.2005, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



не нашел Multiply transaction в delphi6.
Кстати есть ли какие либо компоненты в 2005 у DbExpress для кеширования данных? ( в 6-ке это TSQLClientDataSet)
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
LSD
Дата 29.7.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Там есть: TSQLDataSet, TSQLQuery, TSQLTable, TSimpleDataSet, а вот кто из них кеширует не знаю.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Cetus
Дата 30.7.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



ладно, будем разбираться при необходимости smile
Всем спасибо!
Будем считать что, проблема решается правильной подменой Dll
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0963 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.