2

データベーステーブルのフィールド名を取得するために使用するDelphi2005コードがあります。
32ビットマシン(Windows XP、Windows Vista、Windows 7)では問題なく動作します。

ただし、64ビットマシン(WindowsVistaまたはWindows7)で実行すると、フィールド名は返されません。

コードは次のようになります。

uses  Db, SQLExpr;  

procedure TForm1.ShowFieldNames(SQLConnection: TSQLConnection;  
                                FieldNames: TStringList);  
  var FieldIndex: Integer;  
begin  
  SQLConnection.GetFieldNames('TABLENAME', FieldNames);  
  ListBox.Items.Add('Field Count = ' + IntToStr(FieldNames.Count));  
  for FieldIndex:=0 to FieldNames.Count - 1 do  
    ListBox.Items.Add('FieldName = ' + FieldNames[FieldIndex]);  
  end;  

32ビットマシンでは、これはゼロ以外のカウントを示し、フィールド名を一覧表示します。64ビットマシンでは、これは「フィールドカウント=0」を表示します</p>

Delphi2006またはDelphi2007で再コンパイルすると、問題は解決します。

(Firebird 2.5を使用しています)

プログラムをDelphiの新しいバージョンにアップグレードせずにこれを修正したいと思います。

また、問題が発生している理由、つまり64ビットWindowsでプログラムの動作が異なる理由についても理解したいと思います。

アドバイスをお願いします。

4

1 に答える 1

1

クエリを使用する:

SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='TABLENAME';  

次に、返された結果をトリミングすると、フィールド名が得られ、64 ビット マシンで動作します。

これは、64 ビット マシンで実行したときにプログラムの動作が異なる理由を説明するものではありませんが、実行可能な解決策を提供してくれます。

于 2011-08-31T12:09:36.783 に答える