Advantage 5400 AE_INTERNAL_ERROR - PullRequest
       14

Advantage 5400 AE_INTERNAL_ERROR

1 голос
/ 02 декабря 2010

Я получаю 5400 AE_INTERNAL_ERROR при попытке открыть TadsQuery после добавления SQL. Когда я помещаю тот же SQL прямо в TadsQuery, ошибки не возникает. Ваш файл справки направляет меня в службу технической поддержки Advantage, чтобы НИОКР могли решить проблему. Техническая поддержка предложила мне выложить здесь.

Вот фрагмент кода (предложенный Дугом Джонсоном):

if (Value = '**') or (StartUp) then
with DM1.qadSBSort do
begin
  DisableControls;
for i := 1 to 26 do
begin
  if Active then Close;
  Active := False;
  HText := 'SELECT SBName, SBPath FROM poSBSorted ' +
           ' WHERE [SBName LIKE ''' + CHR(i + 64) + '''] ' +
           ' ORDER BY SBName';
  SQL.Clear();
  SQL.Text := HText;
  try
     try
        Screen.Cursor := crHourGlass;
        Open();

     finally
        Screen.Cursor := crDefault;
     end;

  except
     On E: Exception do
     begin
        if( E.Message <> 'The SQL statement did not '+
              'generate a cursor handle.  Use ' +
              'TAdsQuery.ExecSQL to execute SQL ' +
              'statements that are not SELECT statements' )then
           MessageDlg( E.Message, mtWarning, [ mbOK ], 0 );
     end;
  end;
  Active := True;

Вот статистика системы:

Процессор: процессор INTEL® Core ™ 2 DUO @ 2,00 ГГц, 2,00 ГГц Установленная память: 4,00 ГБ Тип системы: 64 бит. ОС: Windows 7. Программирование: Delphi 2010. Версия Advantage: 9.10 64bit Сервер: локальный. Таблицы: бесплатно. Пожалуйста, порекомендуйте. Спасибо и хорошего дня.

-Боб Эндрюс

Ответы [ 3 ]

1 голос
/ 03 декабря 2010

Ваш SQL не имеет смысла.Ваш запрос (для значения i = 1) буквально

SELECT SBName, SBPath FROM poSBSorted 
 WHERE [SBName LIKE 'A']
 ORDER BY SBName

Это не является допустимым SQL для Advantage и генерирует

poQuery: Error 7200:  AQE Error:  State = 42000;   NativeError = 2115;  [iAnywhere Solutions][Advantage SQL Engine]Expected lexical 
element not found: IN, NOT IN, LIKE, NOT LIKE, BETWEEN, NOT BETWEEN There was a problem parsing the WHERE clause in your 
SELECT statement

Если я изменю его на правильный ADS SQL:

SELECT SBName, SBPath FROM poSBSorted 
 WHERE SBName LIKE 'A%'
 ORDER BY SBName

Отлично работает с фиктивной базой данных poSBSorted, содержащей два столбца Char (10) для представления SBName и SBPath.

Как я уже говорил в моем комментарии выше, опубликуйте фактический простой SQLвы пытаетесь использовать (или, по крайней мере, объяснить схему своей базы данных, примеры данных и результаты, которые вы пытаетесь получить), и, возможно, кто-то может вам помочь.

1 голос
/ 10 декабря 2010

Я не могу продублировать полученную вами ошибку 5400, но во фрагменте кода, который вы отправляете, достаточно вопросов, которые я собираюсь дать вам несколько общих рекомендаций.Без большего количества кода я не смогу сделать для вас намного лучше, чем Кен, но я дам вам кое-что попробовать.Я не могу сказать, используете ли вы ADSConnection или нет, но у вас будут проблемы, если вы этого не сделаете.Ваш оператор SQL должен быть изменен, как предлагает Кен.Это не работает иначе.Вы должны убедиться, что ваш ADSQuery соответствует типу таблицы, которую вы используете.

Тот факт, что я вижу DM1, может указывать на то, что вы делаете это в DLL?

Я думаю, хорошоновость заключается в том, что вы получаете странную ошибку, и двое из нас, кто пытался ее дублировать, могут выполнить то, что вы пытаетесь выполнить, без ошибки, внеся некоторые простые изменения.

В качестве дополнительного примечания выне нужно делать как активный, так и открытый.Когда вы открываете запрос, он становится активным или, если для Active установлено значение true, он открывает запрос.И, чисто стилистически, вам не нужны парены после методов, если нет параметров.Ни один из них не вызывает вашей проблемы (я бы поставил на проблему с ADSconnection), но только примечание.

Изменение кода, которое я внес в ваш оператор SQL, выглядит точно так же, как и в случае с Кеном.

1 голос
/ 03 декабря 2010

Вот список кодов ошибок ADS: http://devzone.advantagedatabase.com/dz/webhelp/advantage9.1/mergedprojects/adserror/err5xxx/advantage_5xxx_error_codes.htm

Ошибка # 5400 Состояния

This error is an Advantage JDBC Driver internal error. Please send a small re-creation to Advantage Technical Support demonstrating the problem so that Advantage R&D can fix the issue.

Я бы опубликовал некоторый код в их группах новостей: http://devzone.advantagedatabase.com/dz/content.aspx?key=7

Или получите учетную запись разработчика и запросите поддержку.

...