TSQLConnection.GetFieldNames не работает на 64-битной машине
У меня есть код 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 ответ
Используя запрос:
SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='TABLENAME';
затем обрезка возвращаемых результатов дает мне имена полей, и это работает на 64-битной машине.
Это не объясняет, почему программа работает по-разному при запуске на 64-битной машине, но дает мне работоспособное решение.