我正在尝试将我的应用程序从mySQL迁移到SQLite,为了做到这一点,我在SQLite中重新创建了所有的mySQL表。
我读到的事实是,不建议在声明实际的自动增量字段时使用自动测量。而不是这样,我应该声明我的自动增量字段为主键NULL,而SQLite将自动递增它。一切都很好,除非它不起作用,或者我不能使用它。
我在Zeos和SQLite-3中使用了Delphi XE。
以下是我尝试过的:
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)。
而且我的代码不会给我错误,除了ID字段的值都是空的(没有进行自动增量)
因此,请让我知道我能做些什么来实现我所需要的,而不必手动计算每个插入的下一个id值。有可能吗?
发布于 2015-09-18 13:52:15
文件的其他部分说:
只有当声明的类型名称完全是“整数”时,主键列才成为整数主键。其他整数类型名称(如"INT“或"BIGINT”或“短整数”或“无符号整数”)将使主键列表现为普通表列…。
https://stackoverflow.com/questions/32651501
复制相似问题