Àêæàí â ñåòè - Íà óðîâåíü ââåðõ(VCL, BDE) Äåëàåì ApplyUpdates. Åñëè ïpè insert(update) ïpîèçîøëà îøèáêà (ïîëå null, ñpàáîòàë check, etc.), òî BDE âñåãäà ãîâîpèò "General SQL Error" âìåñòî íîpìàëüíîãî ñîîáùåíèÿ îá îøèáêå :-( Áåç CU âñå íîpìàëüíî, pàçóìååòñÿ. Êàê áîpîòü ýòîò áàã?

Èñïîëüçyé íîpìàëüíyþ òpàíñëÿöèþ îøèáîê â Application.OnException.

Âpîäå ýòî.

procedure DBExceptionTranslate(E: EDBEngineError);

  function OriginalMessage: String;
  var
    I: Integer;
    DBErr: TDBError;
    S: String;
  begin
    Result := '';
    for I := 0 to E.ErrorCount - 1 do
    begin
      DBErr := E.Errors[I];
      case DBErr.NativeError of
        -836: { Intebase exception }
        begin
          S := DBErr.Message;
          Result := #13#10 + Copy(S, Pos(#10, S) + 1, Length(S));
          Exit;
        end;
      end;
      S := Trim(DBErr.Message);
      if S <> '' then Result := Result + #13#10 + S;
    end;
  end;

begin
  case E.Errors[0].ErrorCode of
    $2204:
      E.Message := LoadStr(SKeyDeleted);
    $271E,$2734:
      E.Message := LoadStr(SInvalidUserName);
    $2815:
      E.Message := LoadStr(SDeadlock);
    $2601:
      E.Message := LoadStr(SKeyViol);
    $2604:
      E.Message := LoadStr(SFKViolation) + OriginalMessage;
    else
    begin
      E.Message := Format(LoadStr(SErrorCodeFmt), [E.Errors[0].ErrorCode]) +
        OriginalMessage;
    end;
  end;
end;

Vladimir Gaitanoff

vg@divo.ru
www.tsinet.ru/~vg
(2:5017/5.69)