Excel文件数据库中的PRIMARY KEY约束和AUTO INCREMENT

时间:2015-04-28 15:43:36

标签: sql database vba excel-vba excel

我使用Excel文件作为数据库,我想将ID列设置为主键,并在数据库中插入新记录时自动增加此列的值。

5 个答案:

答案 0 :(得分:2)

TL:DR;

你不能。 Excel不是数据库管理系统。

可能的替代

您可以轻松复制&使用MS Access粘贴到Excel或从Excel粘贴,甚至设置计划导入,MS Access与Windows的大多数(如果不是全部)MS Office版本一起提供。这将为您提供您正在寻找的DBMS特定功能。

只需在Access中创建一个表,按原样保留第一列ID,然后在其他列中粘贴/导入数据。 ID列已默认具有PK和自动递增。

您还可以使用更多"完整的"免费的DBMS,例如MS SQL Server ExpressMySQLPostgreSQL

答案 1 :(得分:0)

如上所述,Excel并不是执行此操作的工具,但是,如果您愿意,可以添加一个forumla来执行此操作。 Check this post

答案 2 :(得分:0)

以下是使用Excel自定义验证创建PRIMARY KEY以防止Excel单元格中的重复条目的步骤。

1)选择整个空列(没有输入的列)。

2)转到DATA>>数据验证

3)从允许下拉列表中选择CUSTOM

4)在公式字段中粘贴=COUNTIF($A:$A,A1)=1

现在,您使用主键设置了列,意味着从A1开始到A列整个范围的每个单元格只允许使用唯一值,如下所示。

enter image description here

所以现在如果你想在excel单元格中放入两个相同的值,那么你会得到以下错误: -

enter image description here

编辑: - 使用Excel列表选择行。请参阅下面的红色圆圈图像,单击此处选择Excel中的整个列。然后按照上述步骤中的步骤2进行操作

enter image description here

答案 3 :(得分:0)

我只能用自动增量来帮助你;)

看看下面的 VBScript 代码,只需运行一个 SELECT 来找出 ID 列的最后一个值,然后运行另一个 SQL 命令以使用 (LastValue+1) 插入新行。

Dim Conn, RS
Set Conn = CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""D:/YourFile.xlsx"";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=0;"";" 'Use "IMEX=0" to be able to UPDATE. 
Conn.Open
Set RS = Conn.Execute("SELECT MAX([Id]) AS LastID FROM [Sheet1$A1:E10] ")
Conn.Execute("INSERT INTO [Sheet1$A1:E10] ([Id], [Field1], [FieldN]) VALUES ('" & CStr(Abs(RS("LastID")) + 1) & "', 'Some value', 'Another value')")
RS.Close
Conn.Close
Set RS = Nothing
Set Conn = Nothing

答案 4 :(得分:-2)

我猜想,如果MS-Excel可以生成一个随机数并将其固定在单元格上,那将是很好的。就像,如果我可以将随机数加上now()公式的结果作为连接文本来解决,那么问题将得到解决。我看到了一些在VBA上执行此操作的技巧,但并不是按照伴侣的要求。