我正在尝试将我的应用程序从 mySQL 迁移到 SQLite,为了做到这一点,我在 SQLite 中重新创建了所有 mySQL 表。
我了解到,不建议在声明实际的自动增量字段时使用AUTOINCREMENT 。而不是我应该将我的自动增量字段声明为 PRIMARY KEY NOT NULL,SQLite 会自动增加它。一切都很好,只是它不起作用或我无法使用它。
我将 Delphi XE 与 Zeos 和 SQLite-3 一起使用
这是我尝试过的:
1.
dm.ZConnection1.Protocol := 'sqlite-3';
dm.ZConnection1.Database := 'myDB.s3db';
dm.ZConnection1.Connect;
dm.ZConnection1.ExecuteDirect('CREATE TABLE IF NOT EXISTS test ('+
' id int AUTOINC PRIMARY KEY,'+
' myval varchar(200) default NULL);');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''first'')');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''second'')');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''third'')');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''fourth'')');
如果我运行上面的代码,我的表会生成,但插入的行在 ID 字段中没有值(我猜是 NULL)
然后我尝试用 AUTOINCREMENT 替换 AUTOINC,在 AUTOINCREMENT 附近创建表时出现语法错误,所以我假设 ZEOS 不支持声明 AUTOINCREMENT ?!?!
然后我尝试不使用 AUTOINC,我只是将 ID 字段声明为
id int(11) 主键,
并且我的代码没有给我错误,除了 ID 字段的值都是空的(没有完成自动增量)
- 如果我在 PRIMARY KEY 之后添加 NOT NULL,那么我的代码会给我错误,因为我试图在 NOT NULL 字段中插入空值
所以请让我知道我能做些什么来实现我需要的,而不必手动计算每个插入的下一个 id 值。甚至可能吗?