代码之家  ›  专栏  ›  技术社区  ›  Thomas Kjørnes

使用bde和delphi访问数据库文件的好方法是什么?

  •  1
  • Thomas Kjørnes  · 技术社区  · 14 年前

    首先,我必须声明,我是一个完全的新手,当谈到德尔福,虽然我做了一些涡轮帕斯卡编程在学校,大约14年前…

    我有一个商业Delphi程序,它使用DBase数据库和BDE来访问它们。我基本上需要将用C语言编写的另一个应用程序接口到这个数据库,以便能够执行SQL操作,如选择、插入、更新和删除。

    不幸的是,对数据库使用OLEDB会导致索引中断,只有本地的BDE应用程序才能安全地访问数据。

    一般的想法是创建一个简单的Delphi控制台应用程序,它可以从标准输入(read/readln)中读取SQL语句,并将csv数据输出到标准输出(writeln)。

    我该怎么做呢?

    我通过以下代码成功地获得了简单的工作访问权限:

    tbl := TTable.Create(nil);
    
    tbl.DatabaseName := 'Exceline';
    tbl.TableName := 'KUNDE.DBF';
    tbl.Active := True;
    
    WriteLn(tbl.RecordCount);
    
    tbl.Active := False;
    

    有没有一种方法可以做到这一点,但我可以执行直接的SQL语句?

    3 回复  |  直到 13 年前
        1
  •  8
  •   kludg    14 年前

    您可以使用tquery组件执行相同的操作:

    qry := TQuery.Create(nil);
    
    qry.DatabaseName := 'Exceline';
    qry.SQL.Add('SELECT COUNT(*) AS CNT FROM KUNDE');
    qry.Active := True;
    
    WriteLn(qry.FieldByName('CNT').AsString);
    
    qry.Active := False;
    
        2
  •  4
  •   dummzeuch Stijn Sanders    14 年前

    正如SERG已经写的那样:您可以使用TQuery对象对数据库表执行SQL查询。但是要注意:在Windows上,您建议这样做的方式——通过stdin将一个SQL查询传递给一个程序,并让它返回stdout上的结果——非常慢。

    此外,如果查询结果很大,您还必须向程序中添加额外的命令,以便批量返回数据。 用Delphi编写一个COM服务器,使用C编写一个COM服务器,可能会更容易,性能也会更好。

    最后一点:BDE已经有好几年没有得到Borland/Codegear/Embarcadero的支持。它仍然可以工作,但它越来越难保持这样的方式,特别是与较新的Windows版本比XP。另一种选择可能是TDBF(请参阅sourceforge),但我没有足够的经验来给您提供一个有见地的意见。

        3
  •  0
  •   Jeroen Wiert Pluimers    14 年前

    自从 BDE 自10年前被否决以来一直没有得到维护:

    你考虑过吗 Advantage Database Server ?它是一个可以访问DBase、Clipper和其他 xBase

    它真的很好用,而且 .NET Data Provider available for it .

    这将使您的解决方案路径更不复杂。

    ——杰罗恩

    推荐文章