ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Altium Designer DbLib+MySQL元器件数据库搭建与配置

Altium Designer DbLib+MySQL元器件数据库搭建与配置 一套顺手的元器件信息数据库往往是从一次库里两个同名器件、BOM 出来采购懵了的事故之后才开始认真搭的。用 Altium Designer 的 Database Library也就是常说的 databaseLib文件后缀 .DbLib把符号、封装和物料信息拆开管理底层再挂一个 MySQL 数据库是我这几年带项目下来觉得性价比最高的一条路原理图库和封装库继续留在 SVN 或共享盘里而厂家料号、供应商、参数、生命周期状态这些会频繁变动的东西全部交给表来管。它解决的问题很具体——同一个库参考号对应多个封装怎么放、不同项目要不同供应商料号怎么切、BOM 里怎么自动带出厂家信息。这篇文章面向已经会用 Altium Designer 画图、但库还停留在一个 SchLib 加一个 PcbLib 打天下阶段的硬件工程师也面向需要给团队搭一套物料体系的库管理员。我会把 MySQL 建库建表、ODBC 驱动选择、.DbLib 文件配置、字段映射规则、多人协作和真实踩过的报错按我自己动手的顺序完整讲一遍能直接抄的地方我尽量给到 SQL 和连接串。1. 从集成库到数据库库这套方案真正解决的问题1.1 集成库在物料规模上来之后的三个硬伤集成库IntLib或者直接挂 SchLib 的用法在几百个物料以内是舒服的符号和封装绑死在一起改一个元件就在库里双击改一下编译一下就好。但物料表一旦上万麻烦就开始集中爆发。第一个硬伤是一个符号对应多个封装这件事没法优雅表达。同一个 0603 的电阻符号实际要挂 0603、0805 两种封装同一个运放符号可能对应 SOP-8、MSOP-8、以及带散热焊盘的版本。集成库里只能复制出好几份符号取名叫 R_0603、R_0805画图时选错一个板子回来才发现焊盘对不上返工成本极高。第二个硬伤是参数和物料信息的耦合。厂家料号、供应商、耐压、精度、RoHS 状态这些字段本质上是采购和制造的信息跟电气符号长什么样没关系。可集成库把它们压在一起结果就是采购改一次料号硬件工程师得重新编译整个库、提交、所有人更新——每次都是一次同步事故。第三个硬伤是查询和复用。想找所有 1% 精度、50V 以上的 0603 电容在集成库里只能一个个点开看或者导出一份 BOM 到 Excel 里筛。而这件事交给一句 SQL 就是几秒钟的事。1.2 DbLib 改的不是符号改的是器件信息存在哪很多人第一次接触 DbLib 会误解以为要把符号也塞进数据库。并不是。数据库里存的只是文本信息——库参考号叫什么、对应的原理图库文件在哪、用哪个封装、厂家料号是多少。真正的符号图形和焊盘图形仍然放在 .SchLib 和 .PcbLib 文件里数据库只是用一列路径去指它们。这个拆分的价值在哪你可以想象成图书馆SchLib 和 PcbLib 是书架上的书书的内容基本不动数据库是索引卡片卡片上写着书名、作者、在哪个书架第几层。换供应商、改封装、改参数改的是卡片书还在原地。索引卡片可以随意增删、批量统计、多人同时维护而书本身是只读的、受版本控制的。所以这套方案的实际分工是库工程师维护 .SchLib/.PcbLib低频改动库管理员或硬件主管维护 MySQL 里的记录高频改动普通工程师在自己的原理图里通过 Components 面板检索和放置。1.3 什么规模适合上什么规模别折腾我个人的判断标准比较粗暴如果你的常用物料在 300 个以内、而且是单人开发、项目节奏很快老实说用两个 SchLib 加一个 Excel 物料表就够了搭 MySQL 这套前期投入大概要两三天边际收益不明显。真正值得上的情况是这么几类。一是团队里有三五个硬件工程师同时画板符号库被反复覆盖过。二是物料已经过千同一个料号在不同项目里被重复录入、写法五花八门比如同一个电容有的写 100nF 有的写 0.1uF 有的写 104出 BOM 之后采购要花时间合并。三是有明确的料号体系或者客户要求提供完整的物料清单字段。四是需要频繁在多个供应商料号之间切换比如国内量产用一家、出口用另一家。还有一类容易被忽略但收益很大的场景做参数化选型。比如你要在 22uF 到 100uF 之间挑一个高度不超过 1.2mm 的钽电容在数据库里就是加两个 WHERE 条件的事比在库里翻半天靠谱得多。2. MySQL 这一侧表结构定错了后面全是返工2.1 安装与几个必须确认的参数MySQL 我一般用官方 Installer 装 8.0 系列Setup Type 选 Server only 或 Developer Default 都行反正 Altium 只用得到服务端。安装过程中有几个点值得停下来确认一下它们直接决定了后面能不能连上。端口默认 3306如果你机器上已经跑过别的实例或者装了某些开发环境带的 MySQL端口很可能被改成 3307 之类装完一定要在C:\ProgramData\MySQL\MySQL Server 8.0\my.ini里确认一下真实的port值。Windows 服务名默认是MySQL80可以在 services.msc 里看到后面重启服务就认这个名字。安装向导最后一步有个 Start the MySQL Server at System Startup 的勾选项建议勾上不然开发机重启之后数据库不启动Altium 那边会直接报连接失败你还得先怀疑一遍网络。字符集这件事在 MySQL 8 上基本不用操心默认就是 utf8mb4排序规则是 utf8mb4_0900_ai_ci。反倒是列名和表名需要提前定规矩一律用英文加下划线不要用中文列名。原因不是为了好看而是中文列名在 ODBC 层和 Altium 的字段映射对话框里出现过显示乱码或者下拉列表里认不出来的情况排查起来很费时间。中文只出现在数据内容里比如描述字段写钽电容 22uF 16V。另外一个偏冷门但很关键的参数是lower_case_table_names。Windows 上默认是 1也就是表名不区分大小写如果哪天你把库迁到 Linux 服务器上默认值变成 0表名就敏感了这时候 DbLib 里写的Components和实际表components对不上就会直接报错。所以从第一天起表名和列名就统一用全小写加下划线迁到哪都不会翻车。2.2 Altium 会去读的保留字段清单这是整套方案里最容易出错的一环。数据库里的列名你可以随便起但字段映射必须把某些列映射到 Altium 认识的保留字段名上否则器件放出来就是一个空的方框或者根本没封装。下面这张表是我实际用下来最常用的一组映射关系注意右侧的名字在映射对话框里是固定选项不能自己改数据库列可自定义映射到的 Altium 字段作用lib_refLibrary Ref库参考号必须与 SchLib 里的符号名完全一致lib_pathLibrary PathSchLib 的路径支持相对路径design_item_idDesign Item ID内部料号显示在 Components 面板里很方便descriptionDescription器件描述会进 BOM 的 Description 列component_kindComponent KindStandard / Mechanical / Graphical 等机械件必须设对foot_ref_1Footprint Ref 1第一套封装的名称foot_path_1Footprint Path 1第一套封装所在的 PcbLib 路径foot_ref_2 / foot_path_2Footprint Ref 2 / Path 2第二套可选封装画图时可切换除了这些保留字段其它所有列都可以在 DbLib 编辑器里勾成参数Parameter。勾上之后放置器件时这些值会写进原理图符号的 Parameters 里出 BOM 时按列名成列出现。mfr_part、supplier_part、tolerance、voltage、rohs 这些都应该走这条路。这里有个细节值得说Library Ref 必须唯一。如果你数据库里有两行 lib_ref 都叫CAP_0603那么在 Components 面板里搜出来会出现两条一模一样的记录放置的时候很容易点错。最常见的做法是在 lib_ref 上建唯一索引物理上杜绝这种情况。至于同一符号多个封装的需求不是靠重复 lib_ref 行来解决的而是靠 Footprint Ref 1/2/3 这三组列来解决——这个理解错位几乎每个刚开始搭 DbLib 的人都踩过一次。2.3 一份可以直接用的建表 SQL 与只读账号下面这份 DDL 是我自己项目里精简出来的版本字段做过取舍去掉了一些行业专用的列保留的都是在 90% 场景下用得上的CREATE DATABASE compdb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_0900_ai_ci; USE compdb; CREATE TABLE components ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, lib_ref VARCHAR(64) NOT NULL COMMENT 库参考号须与 SchLib 符号名一致, lib_path VARCHAR(255) NOT NULL COMMENT 原理图库相对路径, design_item_id VARCHAR(64) DEFAULT NULL COMMENT 内部料号, description VARCHAR(255) DEFAULT NULL, component_kind VARCHAR(32) NOT NULL DEFAULT Standard, foot_ref_1 VARCHAR(64) DEFAULT NULL, foot_path_1 VARCHAR(255) DEFAULT NULL, foot_ref_2 VARCHAR(64) DEFAULT NULL, foot_path_2 VARCHAR(255) DEFAULT NULL, value VARCHAR(64) DEFAULT NULL, mfr VARCHAR(64) DEFAULT NULL, mfr_part VARCHAR(64) DEFAULT NULL, supplier VARCHAR(32) DEFAULT NULL, supplier_part VARCHAR(64) DEFAULT NULL, tolerance VARCHAR(16) DEFAULT NULL, voltage VARCHAR(32) DEFAULT NULL, rohs VARCHAR(8) DEFAULT Y, lifecycle VARCHAR(16) DEFAULT Active, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_lib_ref (lib_ref), KEY idx_mfr_part (mfr_part), KEY idx_supplier_part (supplier_part), KEY idx_desc (description) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;几个设计上的取舍说明一下。用id做主键而不是用lib_ref做主键是为了以后改库参考号的时候不至于牵一发动全身同时给外键关联留余地。lib_ref单独加唯一索引保证索引稳定。mfr_part和supplier_part加普通索引因为这两个字段是最常被搜索的。description加索引在几万行以内意义不大但加上也不亏——如果描述字段用 TEXT 类型就不能直接建索引得用前缀索引这也是我建议描述用 VARCHAR(255) 的原因。权限方面强烈建议给 Altium 一个只读账号另给一个读写账号用于维护。因为 Altium 在打开数据库库的时候会去查询表结构、统计数据量如果账号权限过大万一库文件被别人改坏了写入的影响面会很难评估。只读账号建起来很简单CREATE USER ad_read% IDENTIFIED BY 换成你自己的强密码; GRANT SELECT ON compdb.* TO ad_read%; CREATE USER comp_editor% IDENTIFIED BY 另一个强密码; GRANT SELECT, INSERT, UPDATE, DELETE ON compdb.* TO comp_editor%; FLUSH PRIVILEGES;ad_read%里的%表示允许从任意主机连。如果只是本机用写成ad_readlocalhost更安全。团队局域网内如果数据库服务器有固定 IP 段把%换成具体网段会更稳当。还有一个小技巧如果你希望数据库列名直接就叫Library Ref这种带空格的名字可以建一个视图把列名重命名然后把 DbLib 指向视图而不是基表CREATE OR REPLACE VIEW v_components AS SELECT lib_ref AS Library Ref, lib_path AS Library Path, design_item_id AS Design Item ID, description AS Description, component_kind AS Component Kind, foot_ref_1 AS Footprint Ref 1, foot_path_1 AS Footprint Path 1, mfr_part AS MFR Part, supplier_part AS Supplier Part FROM components WHERE lifecycle Active;视图的好处是两个一是映射时一眼就能看出哪列对应哪个字段新人接手不容易搞错二是可以在视图里加过滤条件把停用物料自动挡在 Altium 外面不用每次都在面板里排除。代价是视图是只读的简单视图在 MySQL 里理论上可更新但没必要所有写操作还是回到基表做。3. ODBC 驱动与连接串连不上的问题九成出在这里3.1 位数匹配是第一条铁律这一条我放在最前面因为它是整个配置过程中最容易浪费时间的坑而且报错信息完全没有提示性。Windows 上的 ODBC 是两个独立的体系32 位和 64 位各有一套驱动列表和各自的 DSN。你在控制面板 → 管理工具 → ODBC 数据源里点开的那个其实是 64 位版本C:\Windows\System32\odbcad32.exe哪怕名字里带 32 这个数字。32 位的入口在C:\Windows\SysWOW64\odbcad32.exe需要手动运行或者用管理员权限从命令行启动。所以第一步是先确认你手上的 Altium Designer 主程序是几位进程。不同大版本之间有过变化别凭印象。最直接的办法是打开任务管理器切到详细信息页签找到 Altium 的进程可执行文件名是X2.EXE看平台这一列写的是 32 位还是 64 位。如果任务管理器里看不到平台列右键表头勾上就行。确认完之后装对应位数的 MySQL Connector/ODBC。位数不对的表现是你在 ODBC 管理器的驱动列表里明明能看到 MySQL ODBC 8.0 系列驱动但是在 Altium 里配置连接的时候那个驱动名压根不在下拉列表里或者报一个 Provider cannot be found 之类的错误。这时候不用怀疑连接串写错了先去查位数。顺手可以用 PowerShell 把机器上的驱动情况列一遍比在图形界面里翻快得多Get-OdbcDriver | Where-Object { $_.Name -like *MySQL* } | Select-Object Name, Platform, VersionPlatform这一列会直接告诉你是 32-bit 还是 64-bit。顺便说一句同名驱动的 32 位和 64 位版本可以共存互不冲突所以如果你的机器上要同时给 32 位的旧版 AD 和 64 位的新版 AD 用两个都装上就行不是什么大问题。3.2 DSN 还是无 DSN 连接串有两种连法一种是在 ODBC 管理器里建一个系统 DSN然后 Altium 里引用这个 DSN 名字另一种是干脆不建 DSN直接在连接串里写驱动名和全部参数。我现在的做法是无 DSN 直连。理由很实际DSN 是每台机器独立配置的团队里五个人就要配五遍谁换了电脑、重装了系统就得重来一遍而且 DSN 名字写错了排查起来很绕。无 DSN 的连接串可以直接写进 .DbLib 文件里跟着文件一起进版本库谁拉下来谁能连前提是驱动装好。一个能用的连接串大概长这样DRIVER{MySQL ODBC 8.0 Unicode Driver}; SERVER192.168.1.20; PORT3306; DATABASEcompdb; USERad_read; PASSWORD你的密码; CHARSETutf8mb4; OPTION3;逐项解释一下为什么这么写。DRIVER后面的大括号里的名字必须和 ODBC 驱动列表里显示的完全一致多一个空格都连不上这一点在英文版和中文版系统上偶尔会有差异建议直接从驱动列表里复制。SERVER写 IP 而不是主机名是为了避免局域网里的名称解析问题拖慢连接速度实测用主机名有时候要等两三秒才连上。CHARSETutf8mb4这行很重要不写的话描述字段里的中文可能变成问号或者乱码。OPTION3是让驱动返回字段的实际长度信息某些版本的 AD 在读取列信息时如果不带这个参数会出现列截断或者映射对话框里列列表不全的怪现象加上基本没副作用。用 DSN 的写法则是DSNcompdb_dsn; USERad_read; PASSWORD你的密码;简单是简单但每一个使用者的机器上都必须有一个叫compdb_dsn的 DSN而且位数要对端口要一致。团队超过三个人我就建议放弃这种写法。提示连接串里带明文密码这件事本质上是个权衡。局域网内、有独立只读账号、数据库只对内部网段开放的情况下风险是可控的。真正要避免的是拿 root 账号写进 .DbLib 然后丢进公共仓库——这个坑我见过不止一次。3.3 MySQL 8 的认证插件与驱动版本MySQL 8.0 之后默认的认证插件从mysql_native_password换成了caching_sha2_password。老版本的 MySQL Connector/ODBC8.0.20 之前不认这个插件报错大概是 Authentication plugin caching_sha2_password cannot be loaded 或者连接直接超时。正确的处理方式是把 ODBC 驱动升到 8.0.26 以上新驱动原生支持这个认证方式什么都不用改。网上很多教程会让你去执行ALTER USER ... IDENTIFIED WITH mysql_native_password BY ...把账号改回老插件。这个方法在 8.0 上确实能解决问题但有个隐患MySQL 8.4 开始mysql_native_password默认是禁用的将来升级版本的时候这些账号就得再改一遍。所以能升驱动就升驱动改插件是最后手段。另一个常见报错是 SSL 相关的。Connector/ODBC 8.0 默认会尝试用 SSL 连接如果数据库服务端没有配证书或者用的是自签证书就会直接连接失败报错里通常带 SSL connection error。在内网自建、只对内部网段开放的环境下可以在连接串里显式声明SSL-MODEDISABLED跳过 SSL但如果是跨网段访问或者有其他安全要求那就老老实实配置服务端证书不要图省事。顺带提一下安装向导里那个容易被点错的选项。有些人在图形化安装 MySQL 时选择了端口 3306 以外的端口因为 3306 被占用装完又忘了后面在连接串里写 3306 怎么都连不上。排查的时候先用netstat -ano | findstr 3306看端口占用或者直接在 my.ini 里搜port两分钟就能确认。4. 在 AD 里把 .DbLib 文件配起来4.1 Database Link File 的创建与连接配置驱动和连接串都通了之后Altium 这一侧的操作其实不复杂。从 File » New 打开新建对话框找到 Database Link File 这一项不同大版本里归类的位置不太一样有的在 Other 分类下直接在下拉里找 Database 相关的项更快创建一个 .DbLib 文件并保存到你的库目录里。文件打开之后是一个配置界面核心就三件事选连接方式、指定表、做字段映射。连接部分里先选择提供程序。用无 DSN 直连的话提供程序选 ODBC 相关的那一项名字大意是 Microsoft OLE DB Provider for ODBC Drivers然后把上面那段连接串粘贴进连接字符串框里。旁边一般有个测试连接的按钮点一下确认能通——注意这一步能过说明驱动、网络、账号密码三项都没问题后面再出错就一定是映射层面的问题了。这个分界线很重要能大幅缩短排查时间。连接通了之后界面上会列出数据库里可用的表和视图。这时候把表选成components或者你们建的视图v_components。如果表列表里什么都看不到大概率是账号权限里少了某张系统表的查询权限或者DATABASE参数写错了库名。选完之后界面会把这个表的内容预览出来这时候你应该能看到自己录入的那几条测试数据。4.2 字段映射哪些列变成参数哪些列是保留字段映射这一步是整个配置里最需要耐心的地方也是最值得截图存档的地方。核心动作就是把数据库的每一列指定成保留字段或者参数。我的建议是先把保留字段一次性全映射完再回头处理参数。保留字段的顺序是Library Ref 和 Library Path 这两列必须映射不映射的话器件放出来是空的Component Kind 也要映射机械件如果 Kind 不对计算 BOM 的时候会出问题然后是 Footprint Ref 1 到 3 和对应的 Path按你实际需要的封装数量映射前几组就够了不需要三组都填。参数列的处理有个容易混淆的点参数列不需要在映射里做什么它们默认就会带着走。也就是说只要一个数据库列没有被映射成保留字段它放到原理图里就自动变成一个器件参数。所以 Description、MFR Part、Supplier Part、Tolerance、Voltage 这些你只需要确认它们的映射是参数状态不用刻意去配置。不过有一个地方要特别留意参数的名字就是数据库的列名。这意味着如果列名叫mfr_part那么原理图里这个参数就叫mfr_partBOM 导出来列头也是mfr_part。如果你希望 BOM 里显示成Manufacturer Part Number这样规范的字段名有两个办法一是把数据库列名直接起成规范名用反引号包住带空格的列名二是在视图里做别名。我个人更倾向第二种基表保持简洁的英文短名视图负责对外展示。映射做完之后有一个验证动作我每次都会做从数据库里挑一条最典型的记录比如一个用的是第二套封装的器件把它放到原理图里然后双击看属性。重点看三样东西。一是 Design Item ID 和 Description 有没有正确带出来。二是 Parameters 里那堆参数是不是都在值对不对。三是点击封装那栏看切换封装的下拉里是不是有 Footprint Ref 1 和 2 两个选项——如果只有一个说明第二组路径的映射没生效。4.3 原理图库、封装库的路径约定数据库里lib_path和foot_path_1这两列写的是路径这两列的写法直接决定了别人能不能用你的库。我强烈建议用相对路径相对于 .DbLib 文件所在的位置。比如目录结构是这样ComponentLibs/ Components.DbLib Symbols/ Passives.SchLib Analog.SchLib Footprints/ Passives.PcbLib Analog.PcbLib那么lib_path就写Symbols\Passives.SchLibfoot_path_1写Footprints\Passives.PcbLib。这样一来整个 ComponentLibs 目录可以整体拷到任意位置、任意盘符、任意人的机器上只要相对结构不变就能正常工作。反之如果写的是D:\Project\2024\Lib\ComponentLibs\Symbols\Passives.SchLib那么在别的机器上必然失效。有一点要提醒相对路径的相对基准在不同版本的 AD 里行为可能有细微差别有的版本是相对于 .DbLib 文件有的版本会受某个全局路径设置影响。所以配置完之后一定要实际试一次——把整个目录挪个位置再用另一个账号登录同一台机器打开试试。这个验证动作花十分钟能省掉后面一整个下午的沟通成本。还有一类做法是用路径变量把库的根路径定义成一个变量比如$(CompLibRoot)\Symbols\Passives.SchLib然后在每台机器上定义这个变量指向本机实际位置。如果你的版本支持这是个不错的方案尤其适合库放在网络盘、不同人映射盘符不一样的情况。但如果版本不支持一切以相对路径为准别在上面浪费时间。另外一个很实际的问题库文件缺失时的表现是静默失败。路径指不到 SchLib 的时候Altium 不会弹窗提醒而是照常让你放置器件只是放出来是个空白符号或者只有管脚编号。所以新人入职的第一件事就是让他随便放一个器件看看图形正不正常比看文档有效得多。5. 日常使用与批量维护5.1 在 Components 面板里调用数据库器件配置完成之后日常使用其实非常轻快。打开 Components 面板在库选择的下拉里选中你的 .DbLib 文件面板下方就变成了一个表格列就是数据库里的列。这时候可以按任意列排序、搜索找到之后双击或者右键放置到原理图上。这里有几个小技巧值得分享。一是搜索框支持部分匹配输0603就能筛出所有封装名里带 0603 的器件输厂家料号的前几位也能定位。二是在数据库里建好视图过滤条件之后面板里看到的就只有 Active 的物料不用手动排除停用件。三是如果面板里加载很慢先看数据库里的总行数——超过两三万行之后某些版本的面板加载会有明显延迟这时候在视图里针对性地只保留某个分类的物料会比全表加载舒服很多。放置的时候还有一个特性同一个数据库器件可以放多次各自独立改参数。这跟普通库一样但配合数据库使用时要小心——如果你在原理图上把一个电容的值从 100nF 改成 1uF改的只是这张原理图上的那一个实例数据库里的记录不会变。这是符合预期的行为但新人经常误以为改了就全局生效。5.2 新增物料为什么不建议在 AD 里直接写库Altium 的 DbLib 编辑器确实能在界面上修改表格内容理论上你可以直接在 AD 里新增一条记录。但我的建议是不要这么做所有写操作都放到 MySQL Workbench 或者 Navicat 里完成。原因有三个。第一AD 里的编辑界面没有校验很容易录进去一个 lib_ref 重复的行或者漏填 foot_path 导致后面放置报错。第二AD 编辑不会触发数据库的审计字段你没法知道谁在什么时候改了什么。第三也是最现实的如果数据库账号是只读的我上面建议的配置AD 里根本改不了界面会报错反而让人以为配置有问题。所以我通常的流程是在 MySQL Workbench 里用一条 INSERT 语句新增记录字段缺失会直接报错同时在表上加一个updated_at时间戳自动更新配合一个简单的触发器往审计表里写一条变更日志谁改了什么一目了然。这套东西听起来复杂实际加起来不到二十行 SQL。新增物料的检查清单我一般会过一遍lib_ref 是否与 SchLib 里的符号名逐字符一致包括大小写这是最常见的错误来源lib_path 是否用反斜杠并且不带盘符component_kind 是否是 Standardfoot_ref_1 是否与 PcbLib 里的封装名一致至少填一个厂家料号或供应商料号。这几条过完基本不会出错。5.3 批量改封装、改供应商、改参数的做法数据库方案真正的优势在批量操作的时候体现得最明显。比如某个型号的运放原来用 SOIC-8现在全部换成 MSOP-8。用集成库的话你得在库里一个个改、重新编译、所有人更新。用数据库就是一条 UPDATEUPDATE components SET foot_ref_1 MSOP-8, foot_path_1 Footprints\\Analog.PcbLib WHERE lib_ref OPA2333 AND lifecycle Active;改完在 Altium 里刷新一下数据库库Components 面板里重新选一次库或者干脆重启一下 AD再打开原有的原理图器件会提示封装已经变化按提示更新即可。这里有个细节已经画好的 PCB 不会自动跟着变你必须通过原理图到 PCB 的更新流程重新同步封装这一步千万别漏我见过改完数据库以为万事大吉、结果出板还是老封装的事故。再比如供应商切换。如果你们的做法是供应商料号写死在同一行上那切换供应商就要 UPDATE 好几列而且历史信息丢了。更稳妥的设计是把供应商信息拆到独立的表里用 lib_ref 关联然后视图里用一个优先规则选出当前有效的那一条。这样切换供应商只是改一个优先级字段历史记录还在采购追溯的时候能用得上。表拆得越细查询越灵活但视图就越关键——因为 Altium 只能看到视图给出的那张扁平的结果它不关心底下有几张表。还有一个日常高频操作是给某一类物料统一加参数。比如所有电阻都要加一个power_rating参数。做法是先 ALTER TABLE 加列然后按 lib_ref 的前缀批量 UPDATE最后回到 DbLib 编辑器里确认这个新列被识别为参数。注意加列之后一定要重新打开一次 .DbLib 文件因为表结构信息是在打开时缓存下来的不重新打开的话新列不会出现在参数里。6. 多人协作.DbLib 文件和库文件也得进版本库6.1 文件放哪、怎么共享一个经常被忽略的问题是搭好之后这套东西放在哪我的做法是把 .DbLib 文件、Symbols 目录、Footprints 目录放在同一个根目录下整个目录作为一份代码库提交到公司内部的版本管理里SVN 或 Git 都行。这样做的好处是 .DbLib 里写的相对路径天然成立而且符号和封装的任何改动都有历史记录。数据库本身是另一回事.sql 建表脚本和初始化数据脚本也应该提交到同一个仓库的db/子目录这样新环境搭建的时候把脚本跑一遍就能得到结构一致的库。这个习惯养成之后从只有一台机器上有环境到任何人都能三十分钟内重建环境的差距就出来了。至于数据库服务器的位置团队的常见做法是放在一台常年开机的内网服务器或者 NAS 上而不是某个人的开发机。放在开发机上的问题很明显那个人一关机所有人都连不上而且机器一换 IP 就变了。如果确实没有服务器至少把 IP 固定下来并且关掉休眠。6.2 数据一致性与并发数据库天生支持多人并发读写这一点比共享 Excel 或者共享 SchLib 强太多——不会出现文件被锁定只能以只读方式打开的尴尬。但并发也带来新的问题两个人同时新增同一个料号怎么办靠数据库层面的约束来解决。lib_ref上的唯一索引会让第二条 INSERT 直接失败报 Duplicate entry 错误这样至少不会出现两条一模一样的记录。如果你们的料号字段design_item_id也需要唯一那就再加一个唯一索引。唯一索引不是阻碍而是最省事的防重复机制。至于并发编辑同一条记录MySQL 的 InnoDB 行锁会自动处理后提交的覆盖先提交的。要追溯谁改了什么靠updated_at和审计表就够了不必上复杂的版本控制。我的经验是库管理这件事上真正需要的不是强一致而是可追溯。还有一点关于 Altium 侧的并发多个工程师同时从数据库放置器件各自在自己的原理图里操作互不影响这一点完全没问题。只有在 .DbLib 文件本身被两个人同时编辑的时候才会冲突而这个文件一年也改不了几次实在要改先打个招呼就行。7. 排错清单几个我真实踩过的报错7.1 连接与驱动类下面这张表里的报错都是我自己或者同事实际遇到过的按发生频率从高到低排现象大概率原因处理方式驱动没出现在 Altium 的下拉列表里ODBC 驱动位数与 AD 进程位数不匹配确认 AD 位数装对应位数的 Connector/ODBC提示认证插件无法加载驱动版本低于 8.0.20升级驱动到 8.0.26 以上连接超时测试连接也失败端口写错、防火墙拦截、服务未启动查 my.ini 里的 port、确认服务运行、放开端口提示 SSL 连接错误驱动默认尝试 SSL服务端无有效证书内网环境加 SSL-MODEDISABLED其它环境配证书能连上但看不到任何表账号权限不足或 DATABASE 参数写错用该账号手动登录 MySQL 验证能否看到库和表第一条和第二条是最典型的两个看起来像网络问题、其实是驱动问题的坑。我一般的排查顺序是先用 PowerShell 列驱动确认位数和版本再用该账号的凭据在 MySQL Workbench 里手动连一次确认权限最后才去 Altium 里点测试连接。倒过来查的话很容易在 Altium 的界面里反复试半天。7.2 字段、路径、显示类这一类问题的表现往往更隐蔽因为连接是通的只是数据不对。器件放出来是空白方框八成是lib_path指不到实际的 SchLib或者指向的那个 SchLib 里没有同名符号。这时候先手动在 AD 里打开那个 SchLib看符号名到底叫什么——大小写、下划线、连字符任何一处不一样都会匹配失败。封装切换下拉里只有一个选项说明 Footprint Ref 2 / Path 2 这一组没有正确映射到第二组保留字段。回到 .DbLib 编辑器里检查映射关系别光看有没有填值要看有没有映射到正确的那一栏。描述里的中文变成问号是连接串里少了CHARSETutf8mb4。这个问题在只存英文的时候完全看不出来一旦录了中文描述才暴露所以建议一开始就带上这个参数。还有一种情况是列的表在 Altium 里显示出来但列名不对比如显示成Column1、Column2。这是 ODBC 层拿不到列名导致的通常是驱动版本太老或者OPTION参数的问题升驱动加OPTION3基本能解决。7.3 性能与刷新类改了数据库但 Components 面板里看不到变化这是最常被问到的问题。原因很简单Altium 会缓存数据库库的查询结果面板不会每秒去查一次数据库。解决办法是刷新库——在 Components 面板里重新选一次库文件或者右键刷新多数情况下就够了。如果刷新还不行把 .DbLib 文件关掉重新打开一次。这一步其实是在重建表结构缓存因为列的增减只有在重新打开时才被感知。我遇到的新加了列但参数里没有的问题百分之百靠这一步解决。再不行就重启 AD。听起来很土但确实有效因为有些缓存是进程级的。重启之前可以先在 MySQL 侧确认数据确实写进去了——用 Workbench 执行一次同样的查询如果能查到那就一定是 AD 侧的缓存问题不用去折腾数据库。性能方面几万行以内的表在面板里操作是很流畅的。如果明显卡顿先看是不是在视图里做了复杂的 JOIN 或者子查询把逻辑简化一下往往就能解决。另外数据库服务器和开发机之间的网络质量影响很明显同一台机器上跑数据库和放在局域网服务器上面板的响应速度差异能感觉出来。如果库很大又是多人共用老老实实放在内网千兆环境下别用无线。最后分享一个我自己踩过的、当时查了很久的坑有一次所有配置都没问题连接也通但就是每次打开 AD 都要等将近一分钟才能看到数据库库的内容。后来发现原因是SERVER那一栏写的是主机名而局域网的名称解析偶尔要等超时。改成 IP 之后秒开。这个坑没有任何报错提示只是慢很容易被当成正常现象忍下来。
返回列表