首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi SQLite插入到以主键作为自动增量的表中

Delphi SQLite插入到以主键作为自动增量的表中
EN

Stack Overflow用户
提问于 2015-09-18 11:58:02
回答 1查看 2.3K关注 0票数 1

我正在尝试将我的应用程序从mySQL迁移到SQLite,为了做到这一点,我在SQLite中重新创建了所有的mySQL表。

我读到的事实是,不建议在声明实际的自动增量字段时使用自动测量。而不是这样,我应该声明我的自动增量字段为主键NULL,而SQLite将自动递增它。一切都很好,除非它不起作用,或者我不能使用它。

我在Zeos和SQLite-3中使用了Delphi XE。

以下是我尝试过的:

1.

代码语言:javascript
复制
  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)。

  1. 然后我尝试用AUTOINCREMENT替换AUTOINC,在创建AUTOINCREMENT附近的表时得到一个语法错误,所以我假设ZEOS不支持AUTOINCREMENT的声明?!
  2. 然后我尝试不使用AUTOINC,我只是声明ID字段为 id int(11)主键,

而且我的代码不会给我错误,除了ID字段的值都是空的(没有进行自动增量)

  1. 如果我在主键之后添加NOT NULL,那么我的代码就会出现错误,因为我试图在null字段中插入空值。

因此,请让我知道我能做些什么来实现我所需要的,而不必手动计算每个插入的下一个id值。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 13:52:15

文件的其他部分说:

只有当声明的类型名称完全是“整数”时,主键列才成为整数主键。其他整数类型名称(如"INT“或"BIGINT”或“短整数”或“无符号整数”)将使主键列表现为普通表列…。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32651501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档