画板子画到第十个年头,最让我头疼的从来不是布线,而是元器件库的管理。原理图符号放在一个 .SchLib 里,PCB 封装放在一个 .PcbLib 里,参数、厂商料号、库存、价格散落在各种 Excel 表格中,每次 BOM 一改就得回头核对半天。后来我把整套元器件信息搬进了 MySQL,再用 Altium Designer 的 databaseLib(Database Library,数据库元件库)把它接进来,库和数据的边界才算真正理清。这套方案的核心价值很直接:元器件信息只维护一份,原理图里引用的参数、封装、厂商料号全部由数据库驱动,改一处全项目生效。它适合手头元器件超过两三百种、经常出 BOM、或者团队里多人共用一个库的硬件工程师。下面我把从 MySQL 安装、表结构设计到 DBLib 配置的完整链路拆开讲,包括那些官方文档里不会写、但一定会绊你一脚的细节。
1. 从集成库到数据库库:我为什么换掉用了十年的老方案
1.1 传统原理图库与集成库的天花板在哪
先说清楚旧方案的边界在哪,不然换新方案很容易变成"为了新而新"。传统的做法基本是:原理图库负责画符号,PCB 库负责画封装,然后用集成库把两者和一些默认参数打包在一起。这套结构在元器件数量少于一百、项目单一、只有一个人维护的时候非常好用,编译一次就能用,拷贝给别人也不会丢东西。问题出现在元器件数量上来之后。
第一个痛点是参数维护。同一个 100nF 电容,我可能在五个不同的原理图库里各画了一遍,阻值、耐压、精度、厂商料号这些参数在每个库文件里各存一份。升级耐压规格或者换供应商,得挨个打开文件改,漏掉一个,BOM 里就会出现两种描述,采购那边直接打电话过来问。第二个痛点是查询。想找"所有 0603 封装、10k、精度 1% 的电阻",在集成库里只能靠肉眼一页页翻,或者导出 BOM 再去 Excel 里筛,效率极低。第三个痛点是复用。新建项目时,我要么复制整个库,要么引用旧库,两个库一旦分叉,后面就再也合不上了。
这三个痛点归结起来是一句话:数据存在文件里,文件是孤立的,而元器件信息本质上是结构化的关系数据。用文件去承载关系数据,天花板必然很低。
1.2 数据库库到底解决了什么问题
Altium Designer 的 Database Library 机制,本质上是把"库文件"拆成了两层:一层是真正画符号的 .SchLib 和画封装的 .PcbLib,这层还是文件;另一层是元数据,也就是"这个符号对应哪个封装、描述是什么、厂商料号是什么、库存有多少",这层交给数据库。AD 通过 ODBC 连到数据库,读一张表或者一个视图,每一行就是库里的一个元器件。
这样做带来的直接变化有几个。其一,唯一数据源。厂商料号只在数据库里存在一份,原理图放置元件时是从数据库实时读取的,改名、改参数只需要更新一行数据。其二,查询变成 SQL。想找特定规格的元件,在 AD 的库面板里输入查询条件,或者直接在 DBLib 编辑器里写 Where 子句就行,比翻库快太多。其三,批量操作。一次性把两百个元件的封装从 0603 换成 0805,一条 UPDATE 语句搞定,不用打开任何库文件。其四,团队协同。数据库放在内网服务器上,所有人连同一个数据源,谁改了什么一目了然,配合数据库的权限控制还能防止误改。
还有一个容易被忽略的好处:BOM 输出。因为元件参数来自数据库,导出的 BOM 天然就是规范的,采购可以直接拿去用,中间不需要再手工整理一遍。
1.3 数据库选型:MySQL 是不是唯一答案
AD 的 DBLib 走的是 ODBC,理论上任何提供 ODBC 驱动的数据库都能接。我用过和测试过的组合里,Access 是最省事的,单文件、免安装,适合个人;SQL Server Express 在企业环境里常见,和 Windows 集成认证贴合得好;SQLite 轻量但并发写入弱;而 MySQL 是我最终选定的,原因有三点:免费且跨平台、生态成熟(客户端工具、备份方案、文档都齐全)、以及团队里其他人上手成本低。
MySQL 的版本建议用 8.0 系列,稳定性和驱动支持都到位。如果只是本地自己用,也可以考虑用容器方式跑一个实例,省去安装配置的麻烦,数据目录挂载到宿主机上,重装系统时不会丢数据。不过要注意,容器里的 MySQL 和宿主机之间的网络端口映射要确认能通,AD 那边连的始终是 ODBC 数据源名,不是容器名。
需要提前说明的是:不要用存储过程或者复杂触发器去包装这张表。AD 读库的方式是发一条普通的 SELECT,视图和简单查询是安全的,存储过程它调不动,触发器还可能在你更新参数时引发意料之外的行为。保持表结构扁平、直白,是最稳妥的做法。
2. 环境准备:MySQL 装好、表结构定好
2.1 MySQL 8.0 的安装与几个必改配置
安装部分本身不复杂,官网下载安装包或者压缩包都行,重点是几个容易忽略的选项。第一,字符集一定选utf8mb4,排序规则选 utf8mb4_general_ci 或 utf8mb4_0900_ai_ci 都可以。虽然元器件描述里出现中文的机会不多,但一旦出现,早期的 latin1 或者 gbk 会让你在 AD 里看到一堆问号,排查起来很烦。第二,认证方式,MySQL 8.0 默认是 caching_sha2_password,部分老版本的 ODBC 驱动不认,如果连接时报认证插件错误,可以在建用户时改成 mysql_native_password,或者直接升级 ODBC 驱动到 8.0 版本以上。
第三,初始密码。MySQL 8.0 用初始化方式安装时会生成一个临时密码,写在日志里,第一次登录必须改掉。改密码这件事别偷懒,尤其是这个库将来要放到内网给团队用。第四,时区和日志。默认的 general_log 是关闭的,但我建议在调试阶段把它打开,这样你能在日志里看到 AD 实际发过来的 SQL 语句,排查字段映射问题时极其有用,等库稳定了再关掉,不然日志会涨得很快。
关于账号权限,别图省事直接用 root 连。建一个专用账号,比如 aduser,只给这一个库的 SELECT 权限,如果需要在 AD 里改数据再额外给 UPDATE。原因很实际:DBLib 的配置里会明文或半明文地保存连接信息,权限给大了,误操作的代价也大。
2.2 元器件主表字段怎么设计
表结构是整套方案的地基,我建议先用一张主表把所有元器件装进去,字段设计参考下面这张表。这里的字段名我特意用了下划线而不是空格,原因后面第 4 章会专门讲。
| 字段名 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
| library_ref | varchar(64) | 必需 | 原理图符号名,AD 靠它去 .SchLib 里找符号 |
| library_path | varchar(255) | 必需 | 符号库文件的完整路径或相对路径 |
| footprint_ref | varchar(64) | 必需 | PCB 封装名 |
| footprint_path | varchar(255) | 必需 | 封装库文件的完整路径或相对路径 |
| description | varchar(255) | 必需 | 元件描述,会带进原理图和 BOM |
| component_type | varchar(32) | 必需 | 一般填 Standard,机械件填 Mechanical |
| designator | varchar(16) | 建议 | 位号前缀,如 R、C、U |
| part_count | int | 建议 | 子件总数,单部件填 1 |
| part_number | int | 建议 | 当前子件序号,单部件填 1 |
| manufacturer | varchar(64) | 建议 | 厂商 |
| mfr_part_number | varchar(64) | 建议 | 厂商料号 |
| supplier | varchar(64) | 建议 | 供应商 |
| supplier_part_number | varchar(64) | 建议 | 供应商料号 |
| unit_price | decimal(10,4) | 可选 | 单价,出成本 BOM 用 |
| stock_qty | int | 可选 | 库存数量 |
| tolerance | varchar(16) | 可选 | 精度,如 1% |
| voltage_rating | varchar(16) | 可选 | 耐压 |
| power_rating | varchar(16) | 可选 | 功率 |
| package | varchar(32) | 可选 | 封装规格,如 0603 |
| rohs | tinyint | 可选 | 是否符合 RoHS,默认 1 |
字段类型的选择上有几点经验。library_ref 和 footprint_ref 不要设太短,64 个字符够用,但千万别用 char,中文和符号名长度不固定,varchar 更合适。unit_price 一定要用 decimal,用 float 会出现 0.1+0.2 之类的小数误差,采购对账时很尴尬。stock_qty 的默认值设为 0,不要留 NULL,AD 里显示 NULL 会变成空白,看着别扭。
注意:字段名里不要出现空格、中文、特殊符号。空格在 SQL 语句里需要用反引号包裹,手工写查询时极容易漏,这是新手最常踩的坑之一。
2.3 符号库、封装库与参数的拆分策略
有一件事必须想清楚:数据库管的是元数据,符号和封装仍然在文件里。所以真正要落地的文件结构是这样的:一个或者几个 .SchLib 装所有原理图符号,一个或者几个 .PcbLib 装所有封装,数据库表里存的是"符号叫什么、在哪个文件里、封装叫什么、在哪个文件里"。
我的做法是按器件大类拆符号库:Passive.SchLib 放电阻电容电感,Semiconductor.SchLib 放二极管三极管和 IC,Connector.SchLib 放连接器和排针,Power.SchLib 放电源相关。封装库拆得更粗一点,因为封装复用率高,一个 PcbLib 基本能装下所有贴片封装。这样拆的好处是单个文件不会膨胀到几十兆,打开速度正常,Git 之类的版本工具也好管理。
还有一个细节:符号库里每个符号的名字必须和数据库里的 library_ref 完全一致,大小写敏感。AD 匹配的时候是严格比较的,SchLib 里叫 "RES_0603",数据库里写成 "res_0603",放置元件时就会报找不到符号。这一点在批量导入 Excel 数据时特别容易出错,校验环节一定要做。
3. 打通 ODBC:AD 与 MySQL 之间那条线
3.1 第一个大坑:驱动位数必须和 AD 对上
这一条我放在最前面,因为它在网上被问得最多,也是我自己第一次配置时浪费了一个下午的地方。Altium Designer 目前主流版本(AD 20、21、22、23 系列)仍然是 32 位应用程序,它加载的是 32 位 ODBC 驱动。而 64 位 Windows 系统的控制面板里,默认打开的那个"ODBC 数据源管理器"是 64 位的。你在那里配置的数据源,AD 根本看不见。
正确做法是:安装 MySQL Connector/ODBC 的时候,32 位和 64 位两个版本都装上,然后在 64 位系统里显式打开 32 位的 ODBC 管理器,路径是C:\Windows\SysWOW64\odbcad32.exe。在这个窗口里配置的数据源,AD 才能识别。
怎么判断 AD 的位数?打开任务管理器,看 Altium Designer 进程后面有没有标注 "(32 位)"。或者直接看安装目录,如果装在Program Files (x86)下,那基本可以确认。
提示:如果你同时在用 64 位的数据库客户端工具(比如 Navicat、MySQL Workbench、DBeaver 之类),它们的 ODBC 或者原生连接走的是另一套,不受这个限制,所以会出现"客户端连得上、AD 连不上"的现象,别被误导。
3.2 配置系统 DSN 的完整步骤
打开 32 位 ODBC 管理器之后,切到"系统 DSN"标签页,点添加,选择 "MySQL ODBC 8.0 Unicode Driver"。这里强调两点:一是用系统 DSN 而不是用户 DSN,因为用户 DSN 只对当前登录用户可见,如果以后要把配置同步给同事,或者服务化运行,系统 DSN 更稳;二是选 Unicode 驱动,不要选 ANSI 版本,中文描述会出现在结果里,Unicode 版本兼容性更好。
接下来的参数填写:
- Data Source Name:自己起个名字,比如
AD_Components,这个名字会出现在 AD 的 DBLib 配置里,起个短一点好记的。 - TCP/IP Server:本机填
127.0.0.1,内网服务器填实际 IP 或主机名。 - Port:默认 3306,改过就填改后的。
- User / Password:前面建的那个专用账号。
- Database:下拉里选中你建好的元器件库名。
点 "Test" 按钮,弹出 "Connection Successful" 才算过。如果失败,先看错误码,再往下看第 6 章的排查表。
配好之后可以顺手勾选 "Allow Big Result Sets",因为元器件表将来可能上千行,默认的结果集大小在某些驱动版本上会有限制。
3.3 连接测试与 MySQL 端验证
ODBC 测试通过不等于 AD 那边就万事大吉,我习惯再做一层验证:打开 MySQL 的命令行或者客户端,用同一个账号执行一条简单查询,确认权限没问题。
-- 用 aduser 登录后执行 USE component_db; SELECT library_ref, footprint_ref, description FROM components LIMIT 10;如果这一步报权限错误,说明账号没给到这个库的 SELECT 权限,回到 MySQL 里补授权。如果返回空但没报错,说明表存在但没数据,先把几条测试数据插进去。
另外一个很实用的技巧:临时打开 MySQL 的 general log,然后在 AD 里做一次库浏览操作,去日志里看有没有对应的 SELECT 进来。如果日志里完全没有记录,说明请求根本没到数据库,问题一定出在 ODBC 或 DBLib 配置上;如果日志里有记录但 AD 报错,那就是字段映射或者数据类型的问题。这个二分法能省下大量猜测时间。
-- 调试阶段打开通用日志 SET GLOBAL general_log = 'ON'; SET GLOBAL log_output = 'TABLE'; -- 查看最近的日志 SELECT event_time, argument FROM mysql.general_log WHERE argument LIKE 'SELECT%' ORDER BY event_time DESC LIMIT 20; -- 调试完记得关掉 SET GLOBAL general_log = 'OFF';4. 在 Altium Designer 里创建并配置 DBLib 文件
4.1 新建 Database Library 与数据源绑定
一切就绪之后,在 AD 里走File > New > Library > Database Library,会生成一个.DBLib文件。这个文件很小,本质上只是一个配置载体,它记录了连哪个数据源、读哪张表、字段怎么映射。
在 DBLib 编辑器里,首先要指定数据源。界面上有个 "Source" 或者类似的区域,让你选择 ODBC 数据源名称,旁边一般有 "Connect" 按钮和测试连接的入口。选中前面配好的AD_Components,连接成功后,下面的表格区域会列出数据库里所有的表和视图。
接着勾选你要用的那张表,通常是components主表。勾选之后,右侧会自动列出这张表的所有列。如果表里字段太多,界面会很挤,这也是为什么我建议把不常用的成本、库存字段单独放到一张附表里去。
设置好之后保存 DBLib 文件,然后可以在 AD 的 Components 面板里把库来源切换到这个 DBLib,应该就能看到元器件列表了。第一次看到列表刷出来的那一刻,说实话比画完一块板子还有成就感。
4.2 字段映射:哪些字段是 AD 认的"特殊字段"
这一步是最关键的,DBLib 之所以能工作,是因为 AD 会去识别几个约定俗成的列名。只要你的列名对上了,AD 就自动理解它的含义;对不上,它就当成普通参数处理。
| 列名(约定的写法) | AD 的用途 | 是否必需 |
|---|---|---|
| Library Ref | 指定原理图符号名字 | 必需 |
| Library Path | 指定 .SchLib 文件路径 | 必需 |
| Footprint Ref | 指定 PCB 封装名字 | 必需 |
| Footprint Path | 指定 .PcbLib 文件路径 | 必需 |
| Description | 元件描述,会填入 Comment | 必需 |
| Component Type | 元件类型,Standard 可放置 | 必需 |
| Designator | 位号前缀 | 建议 |
| Part Count | 子件总数 | 多子件必需 |
| Part Number | 当前子件序号 | 多子件必需 |
这里就是前面埋的伏笔要收的地方了。如果你的 SQL 列名写成Library Ref(带空格),DBLib 编辑器里显示的字段名也会带空格,AD 能识别,但你在写 SQL 查询、导出数据、做自动化脚本时,每次都要给字段名加反引号,一旦漏掉就报语法错误。更麻烦的是 Excel 导出再导入的时候,带空格的列名容易在 CSV 转换环节出问题。
我的做法是:数据库物理列名用下划线形式(library_ref),另外建一个视图,在视图里用AS起别名,把列名改成 AD 认的带空格形式。
CREATE OR REPLACE VIEW v_components AS SELECT library_ref AS `Library Ref`, library_path AS `Library Path`, footprint_ref AS `Footprint Ref`, footprint_path AS `Footprint Path`, description AS `Description`, component_type AS `Component Type`, designator AS `Designator`, part_count AS `Part Count`, part_number AS `Part Number`, manufacturer AS `Manufacturer`, mfr_part_number AS `Manufacturer Part Number`, supplier AS `Supplier 1`, supplier_part_number AS `Supplier Part Number 1`, unit_price AS `Price`, stock_qty AS `Stock`, tolerance AS `Tolerance`, voltage_rating AS `Voltage`, package AS `Package` FROM components WHERE active_flag = 1;然后在 DBLib 里选择这个视图而不是基表。这样做有几个额外好处:可以在视图里过滤掉停用元件(active_flag = 1),可以只暴露需要给工程师看的字段(成本、内部备注隐藏掉),还可以在视图里做计算列。视图的查询性能在数据量不大的时候完全够用,上千行的表,毫秒级响应。
4.3 参数映射与放置时的行为
DBLib 编辑器里除了勾选字段,还有一个映射环节,可以决定哪些列会作为参数带进原理图。默认情况下,除特殊字段外的其他列都会被当作普通参数,名字就是列名。比如Tolerance会变成原理图上元件的一个名为 Tolerance 的参数,BOM 导出时就能带上。
这里有个必须理解清楚的行为:原理图上放置的元件是数据库数据的一个快照,不是实时引用。数据库里改了阻值,已经放在原理图上的那个元件不会自动变。要同步,得手动触发更新。AD 提供了几种方式:在原理图里选中元件后右键选择从库更新参数,或者在原理图编辑器里用Tools > Update From Library之类的菜单,把参数刷新一遍。另一种做法是用 DBLink 文件把已有工程的元件关联到数据库,然后做批量参数同步。
很多人第一次用数据库库,发现"改了数据库原理图没反应",就是没理解这一点。我的习惯是:数据库只作为设计阶段的选型依据,原理图放置完成之后,参数就以原理图为准,等设计定型了再反向回写数据库核对一遍。
还有一点关于 Designator。DBLib 会根据 Designator 列决定放置时的位号前缀和编号规则。如果这一列留空,AD 会用符号名去猜,经常猜成 U? 之类的奇怪前缀。所以哪怕麻烦,也把这个字段填上。
4.4 库路径与相对路径的写法
库路径有两种写法:绝对路径和相对路径。绝对路径比如D:\Lib\Passive.SchLib,好处是明确,坏处是换电脑、换盘符就全废了。相对路径是相对于 DBLib 文件所在的位置,比如.\.\Library\Passive.SchLib,这样只要把 DBLib 和库文件夹一起拷贝,路径关系不变,到哪都能用。
团队协作的场景下,我强烈建议用相对路径,并且把整个库文件夹放进版本管理。同时数据库那边用视图把路径字段统一处理成相对形式,比如:
CONCAT('.\\Library\\', symbol_lib_file) AS `Library Path`反斜杠在 MySQL 字符串里是转义字符,所以要写双反斜杠。这个细节我第一次写的时候踩过,路径变成了.\Library\Passive.SchLib少了一层,AD 直接找不到文件。
注意:Windows 环境下的路径分隔符在 ODBC 传输过程中不会自动转换,数据库里存的是什么,AD 收到的就是什么。建议统一用反斜杠,和 Windows 习惯一致,减少困惑。
5. 日常维护:批量更新、索引优化与备份
5.1 用 Excel 和 SQL 双向搬运数据
数据库库建好之后,日常最高频的操作其实是批量导入和批量修改。采购给一张新料表,或者从旧 Excel 里迁移历史数据,都绕不开这个环节。
从 Excel 往 MySQL 导入,最快的路子是用客户端工具的导入功能(Workbench 和 Navicat 都有),它能把 Excel 或 CSV 直接映射到表的列。导入前有两条铁律:一是先用一张只有几行的测试数据跑一遍,确认列对应关系没错、编码没乱,再上全量;二是导入字段的顺序和名称必须严格对应,尤其是 library_ref 和 footprint_ref 这两列,错一列会导致整个库的元件都指向错误的符号。
从 MySQL 往外导出也不难,一条查询导出成 CSV,用 Excel 打开做核对。我经常用这个方式做"体检":把所有元件的 library_ref 导出来,和 SchLib 里的符号名清单做一次比对,找出那些数据库里有、但符号库里没有的记录,这些就是将来会报"找不到符号"的隐患。
-- 找出参数缺失的记录,先修数据再用 SELECT library_ref, description FROM components WHERE library_ref IS NULL OR library_ref = '' OR footprint_ref IS NULL OR footprint_ref = '' OR component_type IS NULL;定期跑这类校验查询,比出了 BOM 问题再回头查要省事得多。
5.2 索引、视图与查询性能
元器件表到了一两千行,MySQL 的查询速度其实还是很快的,但有两个场景会明显变慢:一是 AD 库面板里的模糊搜索,二是按封装或厂商做频繁筛选。
应对办法是给常用的查询字段建索引。library_ref建议加唯一索引,既能加速查询,又能从数据库层面防止出现重复的符号名,一举两得。footprint_ref、manufacturer、package这些经常出现在 Where 条件里的列,加普通索引即可。
ALTER TABLE components ADD UNIQUE KEY uk_library_ref (library_ref); CREATE INDEX idx_footprint_ref ON components (footprint_ref); CREATE INDEX idx_manufacturer ON components (manufacturer); CREATE INDEX idx_package ON components (package);索引不是越多越好,每个索引都会增加写入成本。元器件表基本是读多写少,多几个索引问题不大,但也没必要给每个列都加。我的经验是:只给真正会出现在筛选条件里的列加索引,其余不加。
另外,如果 AD 那边配置了库缓存,浏览速度会更快,代价是数据库改动后需要手动刷新才能看到。数据变动频繁的开发阶段建议关掉缓存,稳定之后打开。
5.3 备份、版本控制与多人协作
数据库一旦成为唯一数据源,它的可靠性就直接等于整个元器件库的可靠性。备份这件事不能含糊。
我的方案是双轨并行:一是 MySQL 自身的逻辑备份,定期用 mysqldump 导出成 SQL 文件,保留最近若干份,放到另一个物理位置;二是把符号库、封装库、DBLib 文件一起放进版本管理工具,数据库的备份文件也一并纳入。这样即便数据库实例整个挂了,也能从备份里恢复结构和数据,符号封装也不会丢。
多人协作方面,数据库的权限控制要做细。一般工程师只给视图的 SELECT 权限,不直接给基表的写权限;库管理员单独开一个账号做增删改。这样做的好处是,工程师想加个新元件,把需求提给管理员,由管理员统一录入并校验,避免出现同一种电容有好几份描述不同的记录。这个流程听起来有点官僚,但实际运行下来,库的整洁度提升非常明显。
如果团队规模小,也可以放宽到所有人都有写权限,但一定要约定好命名规范:符号名统一大写加下划线,描述用中文,厂商名用全称不缩写。规范这种东西,不约定就会乱。
6. 排查实录:我踩过的坑与速查表
6.1 连接类故障速查
连接问题是最高频的,整理成表方便对照。
| 现象 | 最可能的原因 | 处理方式 |
|---|---|---|
| ODBC 测试通过,AD 里连不上 | 用了 64 位 ODBC 管理器配置 | 改用SysWOW64\odbcad32.exe重配 |
| 提示驱动未找到 | 没装 32 位 MySQL ODBC 驱动 | 补装 32 位驱动并重启 AD |
| 认证插件错误 | MySQL 8.0 默认认证方式与旧驱动不匹配 | 升级驱动到 8.0 或将账号改为传统认证 |
| 连接超时 | 端口不通或服务器地址写错 | 用客户端工具在同机测试连通性 |
| 表列表里看不到视图 | 账号没有该视图的权限 | 补授权 GRANT SELECT ON 视图 |
| 中文变问号 | 字符集不是 utf8mb4 | 改库、表、连接三处字符集 |
这里面最隐蔽的是第一条。因为 AD 本身没有任何提示告诉你它用的是 32 位驱动,它只会笼统地说"无法连接数据源",你得靠经验判断。
6.2 放置与参数类故障
元件能浏览但放置失败,问题通常出在路径和字段上。
常见的是"找不到原理图符号",原因一般是三种:library_path 指向的文件不存在、library_ref 和 SchLib 里的符号名大小写不一致、或者路径里用了正斜杠而系统解析异常。排查方法很土但有效:在 Windows 资源管理器里把数据库里的路径原文粘贴进去,看能不能打开文件,再打开 .SchLib 确认符号名拼写。
另一个常见问题是"放置出来的元件没有封装"。这多半是 footprint_path 为空,或者封装名在 .PcbLib 里对不上。还有一种是封装库文件被 AD 以只读方式打开了,导致读不到内容,重启 AD 一般能解决。
参数类的故障里,"改了数据库原理图不变"是咨询最多的,这就是 4.3 节说的快照机制,属于设计如此,不是 bug。解决方式是手动触发更新,或者接受它,在设计后期以原理图为准。
6.3 缓存清理与刷新机制
AD 为了提高库浏览速度,会在本地缓存数据库库的内容。缓存什么时候会坑你呢?典型场景是:你在数据库里新增了一个元件,回到 AD 里怎么找都找不到,重启 AD 之后才出现。这就是缓存的问题。
处理方式有几个层次。轻量级的做法是在 DBLib 编辑器里点一下刷新,或者在 Components 面板里切换一次库来源再切回来。重一点的做法是关掉 DBLib 文件再重新打开。最彻底的是清理 AD 的本地缓存目录,不同版本位置略有差异,一般在用户目录下的 Altium 相关文件夹里,具体可以看 AD 的偏好设置里关于缓存路径的选项。
我的经验是:建立约定,库有变动就统一刷新一次,而不是等发现问题再处理。另外在 DBLib 编辑器里把缓存选项关掉,牺牲一点浏览速度换来实时性,在库还在频繁调整的阶段是划算的。
提示:如果只是想让某个已放置元件同步最新参数,不需要动缓存,直接在原理图里对该元件执行从库更新参数的操作即可。缓存影响的是"浏览和放置时能看到什么",不是"已放置元件的参数"。
最后再分享一个我在长期维护中养成的习惯。每次数据库结构有大调整,我都会先复制一份库出来做试验,改完确认 AD 能正常读取、能正常放置、BOM 导出正常,再把改动同步到正式库。元器件库这东西,全公司都要用,改坏了影响面比想象中大,多花十分钟做验证,比事后逐个工程回滚要值当得多。