我正在使用Synopse mORMot从Delphi 7访问SQLite数据库。我希望建立连接并直接通过SQL查询数据库,而无需使用mORMot的ORM(对象关系映射)功能。

您能否提供不依赖于mORMot的ORM功能而执行SQL查询的代码示例?

最佳答案

简而言之:最好通过SynDB.pas类在SynSQLite3.pas上使用SynDBSQLite3.pas层,因为这将使您的代码将来可以与通过OleDB/ODBC甚至直接访问(例如对于Oracle)访问的任何数据库一起使用。

例如,使用变体保存列数据:

procedure Test(Props: TSQLDBConnectionProperties);
var Customer: Variant;
begin
  with Props.Execute('select * from Customers where AccountNumber like ?',
    ['AW000001%'],@Customer) do
    while Step do
      assert(Copy(Customer.AccountNumber,1,8)='AW000001');
end;

var Props: TSQLDBConnectionProperties;

  Props := TSQLDBSQLite3ConnectionProperties.Create('databasefile.db3','','','');
  try
    Test(Props);
  finally
    Props.Free;
  end;

因此,对于您的问题,请阅读mORMot文档中与SynDB相关的部分以及所有related blog articles。这些类由ORM使用,但是您可以在没有ORM的情况下使用。

首先,在TQuery中有一个SynDB.pas包装器,该包装器与SQLite3配合得很好,并允许“经典”代码级编程。

但是,与这些单元之间没有100%的RAD直接访问。只是一些TClientDataSet“填充器”。这不是他们的目的:他们希望通过代码而不是通过UI管道快速,直接地访问数据库。

10-04 18:40