Advantage 5400 AE_INTERNAL_ERROR

Я получаю 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 CPU @ 2,00 ГГц 2,00 ГГц Установленная память: 4,00 ГБ Тип системы: 64 бит. ОС: Windows 7. Программирование: Delphi 2010. Версия Advantage: 9.10 64-битный Сервер: локальный. Таблицы: бесплатно. Пожалуйста, порекомендуйте. Спасибо и хорошего дня.

Боб Эндрюс

3 ответа

Ваш 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, который вы пытаетесь использовать (или хотя бы объясните схему своей базы данных, примеры данных и результаты, которые вы пытаетесь получить), и, возможно, кто-то может вам помочь.

Вот список кодов ошибок 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

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

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

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

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

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

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

  HText := 'SELECT SBName, SBPath FROM poSBSorted ' +
       ' WHERE SBName LIKE ''' + CHR(i + 64) + '%'' ' +
       ' ORDER BY SBName';
Другие вопросы по тегам