1

SQL を追加した後に TadsQuery をオープンしようとすると、5400 AE_INTERNAL_ERROR が発生します。同じ SQL を TadsQuery に直接配置すると、エラーは発生しません。あなたのヘルプ ファイルは、アドバンテージ テクニカル サポートに連絡して、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 ビット。OS: Windows 7。プログラミング: Delphi 2010。アドバンテージ バージョン: 9.10 64 ビット サーバー: ローカル。テーブル:無料。お知らせ下さい。どうぞよろしくお願いいたします。

-ボブ・アンドリュース

4

3 に答える 3

1

あなたのSQLは意味がありません。あなたのクエリ(i = 1の値)は文字通りです

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

これは Advantage の有効な SQL ではなく、生成されます

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

SBName と SBPath を表す 2 つの Char(10) 列を含むダミーの poSBSorted db で正常に動作します。

上記のコメントで述べたように、使用しようとしている実際のプレーン SQL を投稿してください (または、少なくともデータベース スキーマ、サンプル データ、取得しようとしている結果について説明してください)。

于 2010-12-03T19:31:17.983 に答える
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

または、開発者アカウントを取得してサポートをリクエストしてください。

于 2010-12-03T03:37:34.510 に答える
1

あなたが得ている 5400 エラーを再現することはできませんが、あなたが送信したコード スニペットには十分な質問があるので、いくつかの一般的なガイドラインを示します。もっとコードがなければ、私は Ken がしたよりもうまくできませんが、いくつかのことを試してみましょう。ADSConnection を使用しているかどうかはわかりませんが、使用しないと問題が発生します。Ken が提案するように、SQL ステートメントを変更する必要があります。それ以外の場合は機能しません。ADSQuery が、使用しているテーブル タイプと一致していることを確認する必要があります。

DM1 が表示されているという事実は、これを DLL で実行していることを示しているのでしょうか?

奇妙なエラーが発生していて、それを複製しようとした私たち 2 人は、いくつかの簡単な変更を加えることで、エラーを発生させずに、達成しようとしていることを達成できるというのは朗報だと思います。

追記として、Active と Open の両方を行う必要はありません。クエリを開くとアクティブになるか、Active を true に設定すると、クエリが開きます。そして、純粋にスタイル的には、パラメーターがない限り、メソッドの後に括弧は必要ありません。どちらも問題の原因ではありません (ADSconnection の問題に賭けるでしょう) が、単なるメモです。

私があなたの SQL ステートメントに加えたコードの変更は、Ken のものとまったく同じように見えます。

  HText := 'SELECT SBName, SBPath FROM poSBSorted ' +
       ' WHERE SBName LIKE ''' + CHR(i + 64) + '%'' ' +
       ' ORDER BY SBName';
于 2010-12-10T02:52:58.763 に答える