首页 > 其他分享 >ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法

ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法

时间:2023-02-28 11:04:29浏览次数:56  
标签:DBTYPE 数据类型 TC ACCESS 数据表 GUID ID


背景:

这段时间临时为一个旅游类网站制作一些网站程序。数据表的情况大致如下:

ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法_.net

图1 数据库表的大致情况 由于是Access数据库,之前有两个数据表:TC_TourCompany和TC_SubDetail,前者是旅行社名录相关资料(为了方便描述,暂且叫“总公司表”),后者是下属营业部(如果有的话)的相关资料(为方便描述,暂且叫“子公司表”)。

由于业务需要,想将之扩展为适用于所有“公司类”(比如酒店、景区、景点、漂流公司、娱乐餐饮、机票代理、交通公司等)的数据表,由于酒店、餐饮娱乐、机票代理等公司都有可能有分部或分公司,所以表的数据结构是差不多的。所以,我们可以通用这样的数据表设计来简化今后的程序开发。当然,我们需要在数据表中新增一列,用于描述公司的类型是旅行社、酒店、景区或是娱乐餐饮类公司等。不在本文的叙述范围,按下不表。

为了方便今后的分类搜索查询,确保公司(包括子公司)的唯一性,所以,我想在上述两个表中增加一列,我把列名叫做GUID。它的每条记录都是唯一不重复的值,类似:{9E4038C8-E965-45B1-BDE1-9F06E6B280A3},这有点象.Net中的System.Guid.NewGuid()生成的值,并用大括号{}包含起来。

做法: 如何在已有数据库表记录的情况下自动生成每一条记录的这些值呢?

一开始,我走了点弯路。在新增GUID列时,我选择了此列的数据类型为“数字”并在下面常规选项卡中“字段大小”中选择了“同步复制 ID”,索引中选择了“有(无重复)”。本以为这样保存结构之后就万事大吉,最终打开表的所有记录时发现,GUID列完全为空,没有任何值!于是,我想了一些办法去插入GUID唯一值。方案之一是在ACCESS中使用SQL语句更新,后来发现此路不通。方案之二就是使用ADO.net编程方式更新表记录,工作量也不小。

有没有更好的办法呢?一个偶尔的想法让我找到了更快更好的解决办法,那就是在设计视图中建立GUID列时,数据类型选择自动编号而不是数字!同时,在下面常规选项卡中“字段大小”中选择了“同步复制 ID”,索引中选择了“有(无重复)”。

如下图:

ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法_.net_02

图2  给总公司名录表(TC_TourCompany表)增加GUID列

ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法_数据库_03

图3 给总公司表(TC_TourCompany表)增加GUID列后自动生成GUID记录值

ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法_.net_04

图4  给分公司(分部)TC_SubDetail表增加GUID列

ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法_access_05

图5 给分公司(分部)TC_SubDetail表增加GUID列后自动生成GUID记录值

以后新增记录时会发生什么?经测试发现,ACCESS会自动搞定生成GUID记录值的问题。OK,完美!

更多的话: 从 Access 生成 SQL 语句时,遇到了 Guid 查询的问题,在 SQL Server 中使用的字符串形式,不能查询出任何数据。


SELECT * FROM tableName WHERE [GUID]='12345678-90AB-CDEF-1234-567890ABCDEF'


如果条件字符串所引用的列为 GUID 类型,那么该条件表达式使用的语法稍微有所不同: WHERE [GUID] = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}嵌套大括号和连字号。 需要注意的是,嵌入大括号的方法只用于 Where 语句,在 Insert 语句中还是要使用单引号,否则将产生 MALFORMED GUID in query

更多参考: ASP.NET开发经验(3) --- 使用 GUID 值来作为数据库行标识  ​​http://blog.joycode.com/moslem/archive/2004/03/23/16930.aspx​

其他: 导出/打印Access数据库的结构

附录:

Access数据类型与.net OleDbType枚举类型的对应

最常见的数据类型映射列表

访问类型名称

数据库数据类型

OLEDB 类型

.NET 框架类型

成员名称

文本

VarWChar

DBTYPE _ WSTR

System.String

OleDbType.VarWChar

备忘录

LongVarWCha R

DBTYPE _ WSTR

System.String

OleDbType.LongVarWChar

字节数:

UnsignedTinyInt

DBTYPE _ UI 1

System.Byte

OleDbType.UnsignedTinyInt

是/否

Boolean

DBTYPE_BOOL

System.Boolean

OleDbType.Boolean

日期 / 时间

DateTime

DBTYPE _ DATE

System.DateTime

OleDbType.date

货币

十进制

DBTYPE_NUMERIC

System.Decimal

OleDbType.numeric

十进制数:

十进制

DBTYPE_NUMERIC

System.Decimal

OleDbType.numeric

双精度数字:

双精度数字

DBTYPE_R8

System.Double

OleDbType.Double

自动数字(复制 ID)

GUID

DBTYPE_GUID

System.Guid

OleDbType.guid

复制 (ID) 号:

GUID

DBTYPE_GUID

System.Guid

OleDbType.guid

自动数字(长整型)

整数

DBTYPE_I4

System.Int 32

OleDbType.integer

数量: (长整型)

整数

DBTYPE_I4

System.Int 32

OleDbType.integer

OLE 对象

LongVarBinary

DBTYPE_BYTES

数组 System.Byte

OleDbType.LongVarBinary

单精度数字:

单精度数字

DBTYPE_R4

System.Single

OleDbType.single

整型数:

SmallInt

DBTYPE_I2

System.Int 16

OleDbType.SmallInt

二进制

VarBinary *

DBTYPE_BYTES

数组 System.Byte

OleDbType.binary

超链接

VarWChar

DBTYPE _ WSTR

System.String

OleDbType.VarWChar

标签:DBTYPE,数据类型,TC,ACCESS,数据表,GUID,ID
From: https://blog.51cto.com/JohnsonJu/6090439

相关文章

  • 导出/打印Access数据库的结构
    因为工作需要,现想将ACCESS数据库的所有表的结构及相关说明生成WORD文档并打印出来。比如下图:图一数据表及其说明性文字(留意深橙色矩形部分)图二Access表的结构及其字段说明......
  • WPF中,Grid与Table的区别(英文)
    HowisGridDifferentfromTable?TableandGridsharesomecommonfunctionality,buteachisbestsuitedfordifferentscenarios.(1)GridderivesfromthePanel......
  • idea导入tomcat8源码搭建源码调试环境
    从apachetomcat下载tomcat8源码1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml,手动创建一个pom.xml放入源码根目录<?xmlversion="1.0"encodin......
  • SRC挖掘之Access验证校验的漏洞挖掘
    漏洞已修复,感谢某大佬的知识分享。任意用户密码重置->可获取全校师生个人mingan信息开局就是信息收集。对于挖掘edu的信息收集1.可尝试谷歌搜索语法,获取学号信息 ......
  • Washbaidu:有了它再也不担心检索到一堆广告了
    相信大家都有过在搜索页面中浮沉的经历。比如点开了一堆网站也没找到答案,然后还要收拾烂摊子,关闭一个个标签页。或者,搜索页上充斥着太多广告、热榜等不相关信息,拉低了自己......
  • 从Linux Bridge引发的网桥、交换机与路由器区别探究
    背景最近接触docker的网络配置方式,发现其默认会创建一个docker0的LinuxBridge,宿主机上运行的容器可以通过连接该birdge实现与外网的通信,根据bridge这个命名很自然的认为......
  • IDEA插件Apifox,一键自动生成接口文档!
    有关Apifox软件之前写过一篇文章:接口测试神器Apifox,亲测好用!如何一键自动生成数据库文档之前也写过一篇文章:数据库界的Swagger:一键生成数据库文档!一、Apifox插件的优......
  • 【cassandra】cannot assign result of function system.now (type timeuuid) to time
    背景执行如下sql会失败并报如题目中的错误insertintoevent(subject,time,type)values(now(),'type');原因now()returnsatimeuuid,notatimestamp解决办......
  • Qtreewidget置顶和取消置顶功能
    1.1  Treewidget置顶和取消置顶 需求中有个置顶案件的需求,取消置顶之后,被取消的案件在最后一个置顶案件下面,新建的案件也要在置顶案件下面,Treewidget本身没有置顶的......
  • Qtreewidget滚动条宽度根据内容自适应调整
    1.1  组织树treewidget滚动条宽度根据内容自适应调整  Treewidget只有在多列时,才会自适应显示横向滚动条,并且根据内容自动调整滚动条的大小,为了实现任务列表自适应......