Advantage 5400 AE_INTERNAL_ERROR

当我在添加SQL后尝试打开TadsQuery时,我得到5400 AE_INTERNAL_ERROR . 当我将相同的SQL直接放在TadsQuery中时,没有错误 . 您的帮助文件指示我联系Advantage技术支持,以便研发部门可以解决问题 . 技术支持建议我在这里发布 .

这是一段代码(Doug Johnson建议):

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.00GHz 2.00 Ghz已安装内存:4.00 GB系统类型:64位 . 操作系统:Windows 7.编程:Delphi 2010.优势版:9.10 64位服务器:本地 . 表:免费 . 请指教 . 谢谢你,有一个美好的一天 .

  • 鲍勃安德鲁斯

回答(3)

3 years ago

以下是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

或者获取开发者帐户并请求支持 .

3 years ago

你的SQL毫无意义 . 您的查询(对于值i = 1)是字面上的

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

这不是有效的SQL for 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

它适用于包含两个Char(10)列的虚拟poSBSorted db来表示SBName和SBPath .

正如我在上面的评论中所说,发布您尝试使用的实际纯SQL(或至少解释您的数据库架构,示例数据以及您尝试获取的结果),也许有人可以帮助您 .

3 years ago

我无法复制您收到的5400错误,但您提交的代码段中有足够的问题,我将为您提供一些一般性指导 . 没有更多的代码,我不能比肯做得更好,但我会给你一些尝试 . 我不知道您是否使用ADSConnection,但如果不这样做,您将遇到问题 . 您的SQL语句需要像Ken建议的那样进行修改 . 否则它不起作用 . 您需要确保您的ADSQuery与您正在使用的表类型匹配 .

我看到DM1的事实可能表明你在DLL中这样做了吗?

我想好消息是你得到了一个奇怪的错误,而我们这两个试图复制它的人可以通过做一些简单的改变来完成你想要完成的任务而没有错误 .

另外,您不需要同时执行Active和Open . 当您打开查询时它会变为活动状态,或者如果将“活动”设置为“真”,它将打开查询 . 并且,纯粹风格上,除非有参数,否则您不需要方法之后的parens . 这些都没有导致你的问题(我打赌ADSconnection问题),但只是一个注释 .

我对您的SQL语句所做的代码更改看起来就像Ken的 .

HText := 'SELECT SBName, SBPath FROM poSBSorted ' +
       ' WHERE SBName LIKE ''' + CHR(i + 64) + '%'' ' +
       ' ORDER BY SBName';