目前,我正试图从Access后端转移到数据库的SQL后端,同时仍然将Access表单作为前端。这是通过具有ODBC连接到后端的链接表来完成的。该表单旨在向表中添加新记录。问题在于AutoNumber。ID被设置为AutoNumber,表单将在等待用户添加其余列时简单地显示(新建)。我已经用IDENTITY属性设置了SQL数据,因此一旦创建了新记录,它就会增加。但是,我不能让表单像它那样运行,因为即使后端将自动添加下一个顺序ID,我也不能在用户实际保存表单数据之前自动将该数据填充到表单中。有办法维护AutoNumber提供的表单功能吗?
TL;DR:在AutoNumber更改为Number后,表单无法正常工作。
发布于 2019-12-14 01:00:13
嗯,在保存记录之前,有一些“罕见”的情况,您实际上需要使用autonumberr。例如,如果您有一个子表单,那么Access总是自动保存主记录,因此自动编号是并将被创建为.So一个主窗体,子表单(子表)将很好地工作,并且不需要代码。
现在,有些情况下您需要自动编号。假设你有一些“代码”,需要运行和吐出一些子记录。
一般的方法是在那个时候简单地执行记录保存。
那么,假设有一个按钮,或者一些您需要在表单中运行的代码,那么您需要PK自动编号吗?
您可以使用以下代码:
If isnull(me!ID) = true then
me.dirty = false ' force record save - autonumber now created
end if上面的工作记录必须是“肮脏的”,但在几乎所有的情况下,情况都是如此。“罕见”的异常表明您可以检查me.IsNewRecord,但在大多数情况下,上面的代码就足够了。
我无法想象,当用户开始输入数据时,自动编号的“显示”是如此重要。
但是,如果您希望自动编号出现在任何按键(表单上的数据输入)之后?
只需将这一行代码放在“后插入”事件中:
me.dirty = false因此,现在查看表单时,用户在任何文本框中按下的第一个键将强制生成并显示自动编号。但是,将自动编号ID的任何含义分配给最终用户是一种非常糟糕的做法。事实上,在大多数情况下,ID应该是隐藏的。
当然,上面唯一的问题或缺点是,如果您有任何必需的列,那么上面的内容可能会出错或出现问题。
发布于 2019-12-13 23:00:21
溶液
对于这个问题,我需要在SQL后端将我的identity_insert设置为ON。下面是这样做的代码:
SET IDENTITY_INSERT tableName ON;此外,如果得到错误:Table <Table Name> does not have the identity property.使用具有标识的自动递增列重新创建表。
示例:
CREATE TABLE new_employees (id_num int IDENTITY(1,1), fname varchar (20), minit char(1), lname varchar(30));更多关于Microsoft官方文档中身份的信息:这里
https://stackoverflow.com/questions/59326367
复制相似问题