No mapping error code

 
0
 
Oracle
ava
Cetus | 26.07.2005, 20:36
клиент написан на 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
Comments (7)
ava
Cetus | 26.07.2005, 20:07 #
DBX: No mapping for error code found
ava
LSD | 27.07.2005, 10:47 #
В справке по Delphi 2005 я ничего про эту ошибку не нашел, а в 6-ке про нее чтонибудь написанно? И еще вопрос, в какой точке выкидывается ошибка. И кстати обновлять BDE, не пробовали?
ava
Cetus | 27.07.2005, 13:06 #
в файле 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?)
ava
LSD | 27.07.2005, 13:38 #
Цитата (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, а эти обновления только для зарегестрированных пользователей.
ava
Cetus | 29.07.2005, 10:11 #
не нашел Multiply transaction в delphi6.
Кстати есть ли какие либо компоненты в 2005 у DbExpress для кеширования данных? ( в 6-ке это TSQLClientDataSet)
ava
LSD | 29.07.2005, 10:50 #
Там есть: TSQLDataSet, TSQLQuery, TSQLTable, TSimpleDataSet, а вот кто из них кеширует не знаю.
ava
Cetus | 30.07.2005, 11:47 #
ладно, будем разбираться при необходимости smile
Всем спасибо!
Будем считать что, проблема решается правильной подменой Dll
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
ava  LSD   Cetus
advanced
Submit