Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TSQLConnection.GetFieldNames在64位计算机上不工作_Delphi_Firebird_Dbexpress_Wow64_Delphi 2005 - Fatal编程技术网

Delphi TSQLConnection.GetFieldNames在64位计算机上不工作

Delphi TSQLConnection.GetFieldNames在64位计算机上不工作,delphi,firebird,dbexpress,wow64,delphi-2005,Delphi,Firebird,Dbexpress,Wow64,Delphi 2005,我有用于检索数据库表字段名的Delphi 2005代码。 它在32位计算机(Windows XP、Windows Vista、Windows 7)上运行时没有问题 但是,在64位计算机(Windows Vista或Windows 7)上运行时,它不会返回任何字段名 代码如下所示: uses Db, SQLExpr; procedure TForm1.ShowFieldNames(SQLConnection: TSQLConnection;

我有用于检索数据库表字段名的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位计算机上,显示“字段计数=0”

当我用Delphi2006或Delphi2007重新编译时,问题就消失了

(我正在使用Firebird 2.5)

我想修复这个问题,而不必将程序升级到更高版本的Delphi

我还想了解为什么会出现这个问题——为什么程序在64位Windows上的行为会有所不同

您能给我一些建议吗。

使用查询:

SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='TABLENAME';  
然后对返回的结果进行修剪,得到字段名,它在64位机器上也能工作


这并不能解释为什么程序在64位机器上运行时工作方式不同,但它确实给了我一个可行的解决方案。

听起来像是D2005中的一个bug。(这不会让我感到惊讶;D2005中有很多bug。)我不得不问,如果你有D2006和D2007可用,为什么你不想更新?从2005年到2007年,我没有注意到任何重大的兼容性问题……这可能是D2005中的一个bug,但我不明白为什么它只出现在64位机器上。不升级的主要原因是我的客户没有D2006和D2007的许可证,他们希望能够维护代码。我认为第三方图书馆也存在一些问题。我将尝试从RDB$RELATION_字段中提取字段名称。您是否始终连接到同一FireBird服务器,即唯一更改的是编译的exe(使用Delphi 2005 vs Delphi 2006)和客户端操作系统(32位Win vs 64位Win)?我安装了相同版本的FireBird(32位客户端和32位服务器)在新的64位计算机和Windows-7 32位虚拟机上。该代码在许多32位计算机(主要运行Windows XP和Vista)上运行,但在至少4台64位计算机(运行Vista和Windows 7)上失败