Advantage 5400 AE_INTERNAL_ERROR

时间:2010-12-02 19:47:24

标签: delphi delphi-2010 advantage-database-server

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

这是一段代码(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位 服务器:本地。 表:免费。 请指教。谢谢你,祝你有个美好的一天。

-Bob Andrews

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你的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数据库可以很好地表示SBName和SBPath。

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

答案 2 :(得分:1)

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

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

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

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

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

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