TSQLConnection.GetFieldNames не работает на 64-битной машине - PullRequest
2 голосов
/ 31 августа 2011

У меня есть код Delphi 2005, который я использую для получения имен полей таблицы базы данных.
Он работает без проблем на 32-разрядных компьютерах (Windows XP, Windows Vista, Windows 7).

Однако этоне возвращает имена полей при запуске на 64-битной машине (Windows Vista или Windows 7).

Код выглядит следующим образом:

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-битной машине это отображает «Field Count = 0»

Когда я перекомпилирую с Delphi 2006 или Delphi 2007, проблема исчезнет.

(я использую Firebird 2.5)

Я хочу исправить это, не обновляя программу до более поздней версии Delphi.

Я также хотел бы понять, почемупроблема возникает - почему программа ведет себя по-разному в 64-битной Windows.

Можете ли вы дать мне какой-нибудь совет, пожалуйста.

1 Ответ

1 голос
/ 31 августа 2011

Использование запроса:

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

затем обрезка возвращаемых результатов дает мне имена полей, и это работает на 64-битной машине.

Это не объясняет, почему программа работает по-разному при запуске на 64-битной машине, но дает мне работоспособное решение.

...