如何使用FieldDefs在运行时创建新的SQLite文件和表?

布赖恩·弗罗斯特

我正在使用Delphi Seattle在全新的SQLite文件中创建全新的表,并且仅使用FieldDefs和非可视代码。我可以使用ExecSQL('CREATE TABLE ....')语法创建一个表,但是不能如下所示(我执行'CreateDataSet'调用时会得到'No such table'MyTable')。我想要一些允许我与FieldDefs一起使用的解决方案。此代码以此处的示例为模型不过,我注意到,有关CreateDataSet的说明仅适用于TFDMemTable。有没有在不使用ExecSQL的情况下创建SQLite表的运行时方法?

procedure Test;
const
  MyDBFile = 'c:\scratch\hope.db';
var
  Connection : TFDConnection;
  DriverLink : TFDPhysSQLiteDriverLink;
  Table : TFDTable;
begin
  DeleteFile( MyDBFile );
  DriverLink := TFDPhysSQLiteDriverLink.Create( nil );
  Connection := TFDConnection.Create( nil );
  try
    Connection.Params.Values['DriverID'] := 'SQLite';
    Connection.Params.Values['Database'] := MyDBFile;
    Connection.Connected := True;

    Table := TFDTable.Create( nil );
    try
      Table.TableName := 'MyTable';
      Table.Connection := Connection;
      Table.FieldDefs.Add( 'one', ftString, 20 );
      Table.FieldDefs.Add( 'two', ftString, 20 );
      Table.CreateDataSet;

      // I would add records here....
    finally
      Table.Free;
    end;
  finally
    Connection.Free;
    DriverLink.Free;
  end;
end;
马丁·A

CreateDataSet通常是用于将客户端数据集初始化为空状态的本地操作。如果要使用TClientDataSet,则无法使用它创建服务器端表。

要创建实际的服务器表,我希望必须构造DDL SQL来创建表,然后使用ExecSQL在(客户端)数据集上执行该表,就像您已经尝试过的那样。

更新

尽管使用了不显示FieldDefs的TFDTable组件,但以下内容似乎满足了您在代码中进行所有操作的要求,因此我改用了代码创建的TFields。在D10西雅图测试。

procedure TForm3.CreateDatabaseAndTable;
const
  DBName = 'd:\delphi\code\sqlite\atest.sqlite';
var
  AField : TField;
begin
  if FileExists(DBName) then
    DeleteFile(DBName);

  AField := TLargeIntField.Create(Self);
  AField.Name := 'IDField';
  AField.FieldName := 'ID';
  AField.DataSet := FDTable1;

  AField := TWideStringField.Create(Self);
  AField.Size := 80;
  AField.Name := 'NameField';
  AField.FieldName := 'Name';
  AField.DataSet := FDTable1;

  FDConnection1.Params.Values['database'] := DBName;
  FDConnection1.Connected:= True;

  FDTable1.TableName := 'MyTable';
  FDTable1.CreateTable(False, [tpTable]);
  FDTable1.Open();
  FDTable1.InsertRecord([1, 'First']);
  FDConnection1.Commit;


  FDConnection1.Connected:= False;
end;

我希望,如果有人通过FDTableAdaptor正确地将其连接到服务器端组件(FDCommand?),则可以使用TFDMemTable的FieldDefs做一个比我熟悉的人做类似的事情。

首先,我使用了LargeInt ID字段和WideString Name字段,因为前一段时间尝试将Sqlite与D7一起使用,尝试使用Integer和string字段没有麻烦。

顺便说一句,如果您知道部署前需要的结构,则可能会发现,只要将空的数据库+表复制到适当的位置,而不是尝试就地创建表,就可以得到更可预测/更可靠的结果。Ymmv,当然。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Entity Framework 6在运行时创建数据库和表?

来自分类Dev

如何在运行时使用python动态创建新的类实例?

来自分类Dev

如何在运行时使用依赖注入创建新对象

来自分类Dev

如何从可以在运行时使用的资源文件中创建和调用类对象?

来自分类Dev

在运行时在 Rails 中创建数据库和表

来自分类Dev

如何动态创建css / js / html文件并使用ASP.NET MVC在运行时提供服务

来自分类Dev

如何动态创建css / js / html文件并使用ASP.NET MVC在运行时提供服务

来自分类Dev

如何在运行时根据其他表中的值添加新列?

来自分类Dev

如何在运行时创建数据库表

来自分类Dev

在运行时从protobuf文件动态创建python类?

来自分类Dev

在运行时通过 Java 创建 XML 文件的问题

来自分类Dev

Delphi Firemonkey 在运行时创建 TExpanders 和 TLabels

来自分类Dev

如何在运行时在 C# MVC 中在运行时向已经存在的数据表添加新行

来自分类Dev

如何在运行时在python中创建文件句柄?

来自分类Dev

如何在运行时在Tomcat中创建hibernate.properties文件

来自分类Dev

如何在运行时在python app-engine上创建文件:live或localhost

来自分类Dev

如何在运行时使用java脚本运行exe文件

来自分类Dev

如何在运行时从C ++创建QQmlComponent?

来自分类Dev

如何在运行时递归创建ActionBar?

来自分类Dev

如何创建要在运行时着色的模板图像

来自分类Dev

如何在运行时创建表达式

来自分类Dev

如何在运行时动态创建Predicate <T>

来自分类Dev

如何在运行时创建该类的实例

来自分类Dev

如何在运行时递归创建ActionBar?

来自分类Dev

如何在运行时创建表达式

来自分类Dev

JavaFx:如何验证在运行时创建的多个 TextFields?

来自分类Dev

Python如何在运行时创建类的方法

来自分类Dev

如何在运行时映射表创建?

来自分类Dev

如何使用ui-router在运行时挂钩新的子状态?

Related 相关文章

  1. 1

    如何使用Entity Framework 6在运行时创建数据库和表?

  2. 2

    如何在运行时使用python动态创建新的类实例?

  3. 3

    如何在运行时使用依赖注入创建新对象

  4. 4

    如何从可以在运行时使用的资源文件中创建和调用类对象?

  5. 5

    在运行时在 Rails 中创建数据库和表

  6. 6

    如何动态创建css / js / html文件并使用ASP.NET MVC在运行时提供服务

  7. 7

    如何动态创建css / js / html文件并使用ASP.NET MVC在运行时提供服务

  8. 8

    如何在运行时根据其他表中的值添加新列?

  9. 9

    如何在运行时创建数据库表

  10. 10

    在运行时从protobuf文件动态创建python类?

  11. 11

    在运行时通过 Java 创建 XML 文件的问题

  12. 12

    Delphi Firemonkey 在运行时创建 TExpanders 和 TLabels

  13. 13

    如何在运行时在 C# MVC 中在运行时向已经存在的数据表添加新行

  14. 14

    如何在运行时在python中创建文件句柄?

  15. 15

    如何在运行时在Tomcat中创建hibernate.properties文件

  16. 16

    如何在运行时在python app-engine上创建文件:live或localhost

  17. 17

    如何在运行时使用java脚本运行exe文件

  18. 18

    如何在运行时从C ++创建QQmlComponent?

  19. 19

    如何在运行时递归创建ActionBar?

  20. 20

    如何创建要在运行时着色的模板图像

  21. 21

    如何在运行时创建表达式

  22. 22

    如何在运行时动态创建Predicate <T>

  23. 23

    如何在运行时创建该类的实例

  24. 24

    如何在运行时递归创建ActionBar?

  25. 25

    如何在运行时创建表达式

  26. 26

    JavaFx:如何验证在运行时创建的多个 TextFields?

  27. 27

    Python如何在运行时创建类的方法

  28. 28

    如何在运行时映射表创建?

  29. 29

    如何使用ui-router在运行时挂钩新的子状态?

热门标签

归档