ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解
背景: 这段时间临时为一个旅游类网站制作一些网站程序。数据表的情况大致如下: 图1 数据库表的大致情况 由于是Access数据库,之前有两个数据表:TC_TourCompany和TC_SubDetail,前者是旅行社名录相关资料(为了方便描述,暂且叫总公司表),后者是下属营业
背景:
这段时间临时为一个旅游类网站制作一些网站程序。数据表的情况大致如下: 图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”,索引中选择了“有(无重复)”。
如下图: 图2 给总公司名录表(TC_TourCompany表)增加GUID列
图3 给总公司表(TC_TourCompany表)增加GUID列后自动生成GUID记录值
图4 给分公司(分部)TC_SubDetail表增加GUID列
图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数据库的结构 http://blog.csdn.net/johnsuna/archive/2008/05/05/2393664.aspx
附录:
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 |

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

1、在Windows11中打开设置。您可以使用Win+I快捷方式或任何其他方法。2、转到应用程序部分,然后单击应用程序和功能。3、查找要阻止在后台运行的应用程序。单击三点按钮并选择高级选项。4、找到【后台应用程序权限】部分并选择所需的值。默认情况下,Windows11设置电源优化模式。它允许Windows管理应用程序在后台的工作方式。例如,一旦启用省电模式以保留电池,系统将自动关闭所有应用程序。5、选择【从不】可防止应用程序在后台运行。请注意,如果您注意到程序不向您发送通知、无法更新数据等,您可

DeepSeek 无法直接将文件转换为 PDF。根据文件类型,可以使用不同方法:常见文档(Word、Excel、PowerPoint):使用微软 Office、LibreOffice 等软件导出为 PDF。图片:使用图片查看器或图像处理软件保存为 PDF。网页:使用浏览器“打印成 PDF”功能或专用的网页转 PDF 工具。不常见格式:找到合适的转换器,将其转换为 PDF。选择合适的工具并根据实际情况制定方案至关重要。

Oracle 可以通过以下步骤读取 dbf 文件:创建外部表,引用 dbf 文件;查询外部表,检索数据;将数据导入 Oracle 表。

昨日,BotanixLabs宣布累计完成1150万美元融资,PolychainCapital、PlaceholderCapital等参投。融资将用于构建去中心化的EVM等效BTCL2Botanix。Spiderchain结合了EVM的易用性与比特币的安全性。自2023年11月测试网上线以来,已有超过20万个活跃地址。Odaily将于本文解析Botanix的特色机制与测试网交互流程。Botanix按照官方定义,Botanix是一个基于比特币构建的去中心化的图灵完备L2EVM,由两个核心组件以太坊虚

BitgetLaunchpool是一个为所有加密货币爱好者而设计的动态平台。BitgetLaunchpool以其独特的产品脱颖而出。在这里,您可以质押您的代币来解锁更多奖励,包括空投、高额回报,以及专属早期参与者的丰厚奖池。什么是BitgetLaunchpool?BitgetLaunchpool是一个加密货币平台,可以透过用户友善的条款和条件来质押和赚取代币。透过在Launchpool中投入BGB或其他代币,用户有机会获得免费空投、收益和参与丰厚的奖金池。质押资产的收益在T+1小时内计算,奖励按

Access Violation 错误是一种运行时错误,当程序访问超出其内存分配范围的内存位置时发生,导致程序崩溃或异常终止。解决方法包括:检查数组边界;正确使用指针;使用适当的内存分配函数;释放已释放的内存;检查内存溢出;更新驱动程序和系统;检查第三方库;使用调试器跟踪执行;联系软件供应商以获取支持。

1、在开始菜单中搜索找到控制面板页面。2、随后在控制面板中将视图更改为Category类别,并点击SystemandSecurity系统和安全选项。3、找到并点击System系统下的Allowremoteaccess允许远程访问按钮。4、在弹出的窗口中点击Remote系统属性栏目,勾选允许远程连接该计算机按钮并点击确定保存。

在Node.js环境中解决第三方接口返回403的问题当我们在使用Node.js调用第三方接口时,有时会遇到接口返回403错误�...
