TSQLConnection.GetFieldNames 无法在 64 位计算机上运行

发布于 2024-12-01 23:41:00 字数 898 浏览 1 评论 0原文

我有 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 上的行为不同。

您能给我任何建议吗?

I have Delphi 2005 code that I use to retrieve database table field names.
It works with no problems on 32-bit machines (Windows XP, Windows Vista, Windows 7).

However it does not return any field names when run on a 64 bit machine (Windows Vista or Windows 7).

The code looks like this:

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;  

On 32-bit machines, this shows a non-zero count, and list the field names, on a 64 bit machine, this displays “Field Count = 0”

When I recompile with Delphi 2006 or Delphi 2007, the problem goes away.

(I'm using Firebird 2.5)

I want to fix this without having to upgrade the program to a later version of Delphi.

I’d also like to understand why the problem is occurring – why is the program behaving differently on 64-bit Windows.

Can you give me any advice please.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

高跟鞋的旋律 2024-12-08 23:41:00

使用查询:

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

然后修剪返回的结果为我提供字段名称,并且它确实可以在 64 位计算机上运行。

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

Using a query:

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

then trimming the results returned gives me the field names, and it does work on a 64-bit machine.

This doesn't explain why the program is working differently when run on a 64-bit machine, but it does give me a workable solution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文