delphi 应用程序无法从数据库收集列名

tzdcorbm  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(116)

我有以下建设 Delphi 窗体〉ADO连接〉Otero ODBC驱动程序〉RBase数据库
(忽略请异国名字)
从用户的逻辑Angular 来看,这一切都是经典的:ADO连接〉ADO查询〉数据源〉DBGrid
这种构造在大多数计算机上都能很好地工作,但有一台除外。在这台计算机上,当它不能按预期工作时,ADO将返回列说明而不是列名。
一般都是这样的
第一个
但在这台有问题的机器上

SystemUserId System Autonumber Numero unico de identificacao da Collection FK
 ------------------------------ ------------------------------------------------------------ 
                              1 Administrator

有问题的系统是Windows 2019 -但在其他Windows 2019上同样的应用程序运行良好,我可以将应用程序ape副本带到任何其他机器上,它的工作效果和预期的一样,机器上安装了相同版本的DB和ODBC驱动程序。
效果是,当我调用

myAdoQuery.FieldByName('SystemUserId').asInteger ....

出现错误:
字段系统用户ID不存在
我试着给列命名

Select SystemUserId as mycolumn from SystemUsers

...没运气
我尝试将字段添加到字段编辑器-效果相同。
我可以通过索引(Field[i])调用字段,但这意味着重新设计整个应用程序。
有人知道这里会出什么问题吗?

vktxenjb

vktxenjb1#

结果发现,数据库服务器版本不同(我以为是一样的,但实际上是不同的)。我们更新了数据库服务器,所有的问题都消失了。
谢谢大家

hgb9j2n6

hgb9j2n62#

您可以使用以下代码段获取表的字段名:

procedure TestTable1;
var cnt   : Integer;
    msgStr: String;
begin
try
  msgStr := '';
  with Table1 do
  begin
    Close;
    DatabaseName := '';
    TableName := OpenDialog1.FileName;
    Open;

    for cnt := 0 to Table1.FieldDefs.Count - 1 do
    msgStr := msgStr + Table1.Fields.Fields[cnt].FieldName;

    Close;
    ShowMessage(msgStr);
  end;
except
  on E: Exception do
  begin
    ShowMessage('Exception occur:' + #13#10 + E.Message);
  end;
end;

这将显示Table1中的所有字段名称
希望这对Jens有帮助

相关问题