简介:UniDAC 10.3.0 for D13 FS 完整源码版,是面向 Delphi 13 FireMonkey 开发者的数据库访问组件库,提供统一接口连接 Oracle、SQL Server、MySQL、PostgreSQL、SQLite 等数据库,尤其适合需要并行维护多库连接、降低跨平台移植成本的企业项目。资源包含 938 个文件,核心为 557 个 Pascal 源文件,另有 inc 头文件、dfm/lfm 窗体定义、dpk/lpk 工程包、res 资源文件,以及少量适配动态库和安装脚本,压缩后总大小仅 12.19MB,便于按模块裁剪与二次编译。解压后运行附带安装工具,IDE 组件面板即出现各数据库驱动图标,拖拽组件即可开始连库;同时收录了连接编辑器、宏替换框架、SQL 生成器框架等设计期源码,方便深入定制组件行为。版本零依赖、纯源码交付,支持 Windows 32/64 位、macOS、Linux 以及 iOS/Android 环境,并集成批量更新、参数化 SQL、宏替换、事务自动恢复等企业级功能,大幅简化多数据库业务逻辑。已有 275 人浏览学习,对于需要快速集成多种数据库的 Delphi 团队来说,是一份可直接落地的参考资料。
1. UniDAC 10.3.0 源码版是什么:一个7z压缩包带来的完整数据库访问层
刚拿到一个名字很长的压缩包:UniDAC10.3.0 for D13 FS 完整源码版附带安装工具.7z。这是Devart的通用数据库访问组件,一次拖拽就能连Oracle、SQL Server、MySQL、SQLite等常见库。但注意,这不是试用版,而是完整源码版——拿到的不只是BPL,还有全部.pas源码和配套安装工具。对Delphi开发者,这意味着可以像普通控件一样装进IDE并用,底层逻辑也能翻开源码查,不再是黑匣子。这套内容适合两类人:刚要把UniDAC装进RAD Studio、不知道源码版第一步做什么的人;已经装好但运行时报错不断、想排查的老手。下文按安装工具、手动编译、连接配置、避坑、进阶调试的顺序走一遍。
2. 安装工具先走一遍:从解压到组件出现在工具箱,确认它替你干了什么
拿到压缩包第一步当然是解压。输出目录建议是纯英文、无空格路径,比如C:\Devart\UniDAC。这不是洁癖,而是UniDAC在编译时会把路径写进.dpk/.dproj的搜索路径,路径里有中文或空格会让后续MSBuild和IDE的Library Path拼接各种玄学报错。我一般用7-Zip解压,命令行和图形界面都行,喜欢敲命令的话:
7z x "UniDAC10.3.0 for D13 FS 完整源码版附带安装工具.7z" -oC:\Devart\UniDAC -y参数说明:-o指定输出目录为C:\Devart\UniDAC,注意-o后面不空格;-y是遇到同名文件直接覆盖。解压后先别急着双击exe,先用系统命令看看目录里到底有什么。
dir /s /b *.dpk列出所有.dpk文件,这是Delphi包项目文件的扩展名,存在这个说明源码版确实是给你用来自己编译的。你大概率会看到两类文件:一类叫UniDAC*.dpk,另一类叫dclUniDAC*.dpk。前者是运行时包,编译产成.bpl供程序运行调用;后者是设计期包,负责把组件注册进IDE的组件面板。理解这个区分,后面安装器的行为就很好猜测。
2.1 解压后先别急着双击exe:看清目录结构再动手
解压目录通常会分层放:Source(.pas源码)、Binary(预编译的.dcu和.bpl,可选)、Demo、Docs、Install或Tools(内部含安装工具)。有些二次打包的会把安装工具放在根目录,命名多半是Install.exe、Setup.exe或者带版本号的Installer.exe。在动手前要确认两件事:
一是目标Delphi版本。标题里写的是“D13”,这在不同渠道的命名里有点乱,但它本质是告诉你是给哪个Delphi主版本用的。不同大版本的.dpk文件需要匹配对应的Delphi编译器,装错版本最常见的结果就是安装器直接提示“No compatible IDE found”。安装前打开你的RAD Studio,Help > About,记下实际版本号,与包内README或目录名对照。
二是目标位数。UniDAC支持Win32和Win64,源码包里对应的.dcu/.dpk往往分成两个文件夹(比如Source\Win32、Source\Win64)。如果你想在64位程序里用,安装时一定要把两个目标平台都选中,否则后面编译64位可执行文件时会抓狂。
检查完目录,再看一眼有没有README或“安装说明.txt”。很多打包者会把注意事项写在里面,比如需要先装某个Delphi更新包,或者源码路径不能有中文。我这里带过一句:任何源码版组件,第一步永远是把源码路径稳定下来,别解压到桌面这种会漂移的位置。
2.2 跑安装工具时我盯着三个选择项(IDE版本、源码根目录、目标平台)
安装工具是个GUI程序,双击运行后界面一般会列出已安装的Delphi版本,可能还有C++Builder。我一般会重点看三个地方:
第一个是IDE列表。工具会自动扫注册表,把你机器上的RAD Studio版本列出来。那个D13如果你IDE的实际版本对不上,列表里可能没有可选项,或者选了也编译不过。这时候不要硬上,回到手动编译路线,也就是第三章要讲的。
第二个是源码根目录。安装器通常会让你指定“Source Directory”或“UniDAC Path”。这里不能只填到Source的上一层,应该填到真正放.pas的那一层,比如C:\Devart\UniDAC\Source。如果填错,编译的时候会出现“F2613 Unit not found”一类错误,因为IDE找不到单元文件。
第三个是目标平台。通常有Win32和Win64,勾选后安装器会依次调用MSBuild编译对应平台下的运行时包和设计期包。这里我吃过亏:只勾了Win32,后来写64位服务时发现BPL缺一堆,又要回头补环境。
如果安装器顺利跑完,你可以直接在IDE组件面板找到UniConnection、UniQuery、UniTable、UniScript等一串控件。这个时候你可能会以为结束了,但源码版真正的主角是后面那些.pas——安装器只是把它们编译成了.bpl,源码还没进你的项目搜索路径呢。
2.3 安装工具背后做了四件事:注册源码路径、编译运行包、注册设计期包、写BPL目录
刚才那几步看似简单,安装器在背后实际做了四件事,弄明白了你才能知道后续哪里最容易出问题。
第一,把源码路径写进IDE的Library Path。这样IDE在打开项目时能找到.dcu和.pas。位置一般在Tools > Options > Language > Delphi > Library,里面会多出一条包含C:\Devart\UniDAC\Source的路径。第二,调用MSBuild编译运行时包。比如UniDAC_RUN.dpk会生成unidac*.bpl(版本号可能不同),这些文件默认输出到安装目录的Bin或源码目录下的某个子文件夹。第三,安装设计期包dclUniDAC.dpk到IDE,这步是把控件注册进组件面板;如果这步失败,组件面板一片空,程序里用了UniConnection编译时也会报“Unknown identifier”。
第四,写BPL所在的目录到系统PATH或者IDE的环境变量,保证程序运行时能动态加载unidac*.bpl。如果这一步没做或者目录被移动,你会在运行才几秒后看到“The program can't start because unidac*.bpl is missing”。
知道了这些,你就能理解为什么明明安装好了,重装IDE或换电脑后还会一堆问题——本质上就是这四条线索断了。所以很多Delphi老手拿到源码版宁愿手动编译,至少每一步出问题都能定位。下一章就讲手动编译的路径。
3. 手动编译源码:当安装器翻车时,用MSBuild把.dpk变成.bpl
安装器不是永远可靠,尤其是D13这类标识和你实际IDE版本有出入时,它会直接罢工。手动编译其实不复杂,核心思路就是你把安装器的四件事重复一遍,但每一步可以自己控制。这一章以RAD Studio 10.3/11/12环境都适用的方式来讲,具体路径按你自己的Studio版本替换。
3.1 找到运行时包与设计期包:文件名命名规则
先回到解压目录,用命令找所有.dpk:
find . -name "*.dpk" -o -name "*.dproj"你会看到至少两组文件。运行时包一般以UniDAC开头,后面跟随数据库或核心功能的名字,比如UniDAC_RUN、UniDACDAC_RUN,甚至按驱动拆分的UniDAC_MySQL_RUN等。设计期包则以dcl开头,dclUniDAC_RUN之类。为什么要区分?因为运行时包只需要编译成.bpl,并让库路径指向它;设计期包却需要安装到IDE里,IDE才能识别组件。如果把.dpk弄混,编译出来的东西要么无法注册,要么设计期与运行期版本不一致导致重编译。
打开一个.dproj(如果只有.dpk,IDE会自动转)看一下,里面有平台配置。用type命令或记事本都能看:
<PropertyGroup Condition="'$(Cfg_1)'=='Release'"> <Platform>Win32</Platform> <TargetName>unidac1030</TargetName> <DCC_DcuOutput>.\dcu\Win32</DCC_DcuOutput> </PropertyGroup>这里的关键是TargetName,它决定生成的.bpl名字,比如unidac1030.bpl。你也许还会看到多个配置(Release、Debug),Debug版编译后可用于源码级调试,这正是最后一章要用到的。建议先编Release,再编Debug。
3.2 用MSBuild编译Win32和Win64两个目标平台
手动编译离不开MSBuild。RAD Studio自带MSBuild,并且有配置文件rsvars.bat来设置环境变量。打开一个命令提示符,先调用它,再编译目标包。下面的例子假设你把源码解压在C:\Devart\UniDAC:
call "C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\rsvars.bat" msbuild "C:\Devart\UniDAC\Source\UniDAC_RUN.dproj" /t:Build /p:Platform=Win32 /p:Config=Release说明:rsvars.bat会设置BDS、BDSCOMMONDIR等变量,MSBuild才能正确定位Delphi编译器。/t:Build表示执行Build目标,/p:Platform指定目标CPU架构。上面只编了Win32,要支持64位程序再跑一条:
msbuild "C:\Devart\UniDAC\Source\UniDAC_RUN.dproj" /t:Build /p:Platform=Win64 /p:Config=Release编译成功后回到源码目录,找找新增的dcu子目录或输出目录,里面应该有unidac1030.bpl。如果报“错误:E1026 File not found: 'System.pas'”,多半是rsvars.bat没调用成功或者IDE版本路径不对,检查BDS环境变量指向的是不是当前Studio版本。
设计期包也一样,但注意要选“Install”动作而不是单纯Build?其实用MSBuild编译后,还需要用bplinstall命令或IDE手动安装。更可靠的做法是用IDE打开dclUniDAC_RUN.dproj,然后在Project > Options里把“Build Control”设为Install?确切说,Delphi的包在IDE里右键选择“Install”。手动MSBuild只能生成.bpl,无法注册到IDE。所以如果你想省事,设计期包用IDE装:
- 在IDE中打开dclUniDAC_RUN.dproj。
- Project > Build(选Win32)。
- Component > Install Packages > Add,浏览到生成的.bpl。
如果你连IDE也想跳过,可以用命令行工具bds?实际上没有简单命令。推荐用IDE来做安装设计期包这一步,比较稳。
3.3 编译完成后必须做的两步:添加Library Path和BPL目录
编译出.bpl只是第一步,下面这两步不做,你的项目照样run不起来。
第一步,把Source路径加进Library Path。在IDE中打开Tools > Options > Language > Delphi > Library,在Library Path里追加C:\Devart\UniDAC\Source,注意要用分号分隔已有路径。如果子目录有多个,也一并加,比如C:\Devart\UniDAC\Source\Common、C:\Devart\UniDAC\Source\SSE等。经验上,至少需要包含包含.dcu的目录。如果漏了,编译你的工程时会报f2613找不到单元。这里可以用PowerShell检查当前IDE的Library Path,心里有个底:
Get-ChildItem "HKCU:\Software\Embarcadero\BDS" -Recurse -Name | Where-Object {$_ -eq "Library"} | ForEach-Object { $p = Get-ItemProperty "HKCU:\Software\Embarcadero\BDS\$(($_))\Win32" $p.SearchPath -split ';' | Select-String "UniDAC" }我不指望这命令在所有版本上都好用,版本号一变就要调整。最直接的做法还是在IDE界面里看,路径显示更清晰。
第二步,确保.bpl所在目录能在运行时被找到。常见做法是把这个目录加到Windows PATH环境变量,或者把.bpl复制到System32/SysWOW64。二选一,我一般选前者,因为卸载时容易清理。用下面的命令加目录到用户PATH:
setx PATH "%PATH%;C:\Devart\UniDAC\Output\Win32"注意setx会把原有PATH合并,但有截断风险(2048字符),谨慎使用。更稳妥是通过图形界面改环境变量:此电脑 > 属性 > 高级系统设置 > 环境变量,编辑Path,新增一条。不用急着重启,IDE重新打开一次就能读到。
到这里,手动编译的路子就走通了。你现在可以像正常安装后一样开始拖组件。但如果还没跑通,别急着往下写代码,第五章专门列了排查顺序。先看第四章,学会用源码版最核心的TUniConnection连一次库,确认整个包的加载没问题。
4. 上手连一次数据库:TUniConnection参数怎么设,才不踩黑匣子的坑
UniDAC的模型和原生ADO差不多,最核心的是TUniConnection,它负责管理连接。写对连库的前置步骤,等于验证了整个源码包编译、路径、BPL加载都没问题。这一章我以SQLite和MySQL为例,分别说清楚ProviderName、连接参数和常见的初始化代码。有数据源的人可以照着敲,没有就直接看参数表。
4.1 ProviderName是连接的第一步:每种数据库对应一个驱动名
TUniConnection有一个ProviderName属性,必须给它赋一个UniDAC认识的字符串,比如SQLite、MySQL、SQL Server、Oracle、PostgreSQL。这不同于ADO.NET的Provider字符串,UniDAC内部用这个名字去查找对应的驱动包。如果你用的不是官方驱动列表里的名字,运行时直接抛“Unknown ProviderName: xxx”。所以第一件事就是记下准确值。
有人会问,我装了源码版,能不能自定义ProviderName?可以,但那是后话。常规用法先把标准值敲对:
UniConnection1.ProviderName := 'SQLite'; UniConnection1.Database := 'D:\data\mydb.db'; UniConnection1.Connect;这段代码的意图很直白:指定驱动为SQLite,设置数据库文件的绝对路径,然后建立连接。注意,SQLite不需要服务器地址、用户名、密码,这是它和其他驱动最大的区别。.Database参数对于SQLite就是文件路径,对于MySQL就是库名。如果把SQLite的路径写成相对路径,程序启动时工作目录一改就可能连不上,所以永远给绝对路径。
另外,TUniConnection默认的登录行为不是弹出登录框,而是使用Username和Password属性。对SQLite这俩可以留空,但对MySQL、PostgreSQL这样需要身份验证的库,不写对就会得到“Access denied”。
4.2 连接字符串与数据库路径:以SQLite和MySQL为例
除了逐个设置属性,UniDAC也支持一个ConnectString属性,把参数全部放进一段分号分隔文本里。这种方式适合配置文件读取,也方便在代码里动态生成。下面我给出两个典型例子。
// SQLite UniConnection1.ConnectString := 'Provider Name=SQLite;Data Source=C:\Data\app.db;Foreign Keys=True;'; // MySQL UniConnection1.ConnectString := 'Provider Name=MySQL;Data Source=192.168.1.10;Port=3306;Database=shop;User ID=root;Password=abc123;';参数说明:Data Source对SQLite指文件路径,对MySQL指主机名;Foreign Keys=True是SQLite开启外键约束,如果你不做这个设置,PRAGMA foreign_keys不会自动开启,这是UniDAC连接SQLite的一个隐藏点。MySQL的Port默认3306,一般不写也会用默认值;User ID是用户名。注意键名中间有空格,比如Provider Name,不是ProviderName,这是函数式写法的要求,写错会导致“Unknown connection parameter”。
你会问,为什么这里写Provider Name而属性是ProviderName?因为UniDAC内部用TUniConnection解析连接字符串时,会按空格处理。避免混乱的最好办法是直接用属性赋值,我自己的习惯是:简单连接用属性设置,复杂连接全用ConnectString放配置。
需要说清的是,UniDAC的许可证机制在某些版本会检查驱动数量。完整源码版可能不带试用限制,但如果是从别处拿到的包,保不齐有驱动被裁掉。怎么验证?连接前看ErrorMessage或ProviderName是否在列表里。
4.3 用源码版特有的方式验证连接:直接检查驱动版本和内部错误
连上库后,别急着写SQL,先读几个有用的属性,判断装的是不是源码版、驱动有没有加载正确。
with UniConnection1 do begin if not Connected then raise Exception.Create('连接失败:' + ServerErrorMessage); ShowMessage('驱动版本:' + DriverVersion + ',客户端:' + ClientVersion); end;DriverVersion是UniDAC驱动内部版本,ClientVersion是底层数据库客户端库版本,这两个值在官方二进制版也能用,但源码版能保证它们是从当前编译的.pas里来的,不会出现BPL与驱动版本对不上的问题。如果这里抛异常,把ServerErrorMessage打印出来,绝大多数连接失败都指向网络不通、用户名密码错、数据库实例没起来。和翻车前先看仪表盘一个道理,先看错误信息,别上来怀疑包没装好。
测试连接还可以用UniConnection1.TestConnection方法,它只做连通性测试不打开真实连接。我一般会在程序的诊断界面加一个按钮调用它,输出布尔结果,省得每次调试都要写一套连库逻辑。源码版的好处是,点进TestConnection实现,你能看到它内部如何处理超时和错误码,这对于以后要改连接池行为特别有用。
5. 常见问题与避坑:我遇到的五个UniDAC源码版安装“玄学”
源码版的好处是透明,坏处是每一个环节都可能出岔子。下面五条是我在源码版安装和使用中踩过的坑,按出现频率从高到低排。每一条都是“现象→原因→解决”的结构,可以直接对照。
5.1 现象:安装器提示No compatible IDE found
现象:双击安装工具后,下拉列表里找不到你的Delphi版本,或者点了Install直接弹出“No compatible IDE found”(找不到兼容的IDE)。
原因:安装工具判断的依据是注册表里的BDS版本记录,而你的IDE版本和这个包标记的“D13”不匹配。比如拿的是旧包,装的是新版RAD Studio 12,注册表版本号对不上。
解决:不要死磕安装器。先手动编译运行时包,再把设计期包装进IDE——就是第三章那条路。实在想用安装器,可以去官网下载对应你IDE版本的新包,但既然手里是完整源码版,手动编译一次也不难,而且能熟悉结构。如果你确实需要安装器,也可以在修改注册表版本号或使用兼容模式运行试试,但这不是长久之计,下次就会在更深的地方翻车。
5.2 现象:编译报错找不到dcu但文件明明在
现象:用IDE编译你自己的项目时,提示“F2613 Unit 'Uni' not found”之类,但去源码目录看,明明有这个.pas或.dcu。
原因:IDE没有把源码目录加进Library Path,或者加错了层级。我只填了C:\Devart\UniDAC,却没有继续往下加,导致IDE只搜根目录,找不到Source子目录里的文件。
解决:打开Tools > Options > Language > Delphi > Library,把所有相关的Source子目录都添加进去。至少包括根目录下的Source,以及里面按引擎分的子目录(如果有的话)。添加完成后点OK,IDE会重新索引,通常会立刻消失报错。记住一个原则:源码包里哪里有.pas/.dcu,就把哪个目录加进Library Path,宁多勿漏。我习惯用翻列表的方式逐级把所有含.pas的目录都加一遍,避免以后换项目时又冒出来。
5.3 现象:运行时提示找不到unidac*.bpl
现象:编译没问题,一运行exe就弹窗:无法启动,因为缺少unidac*.bpl,或者找不到指定的模块。
原因:生成的.bpl没有放在系统/应用程序能定位的位置。运行时bpl只在以下范围查找:exe所在目录、系统PATH目录、Windows系统目录。源码版安装器一般会把Bin目录写进PATH,但手动编译时这步可能漏掉。
解决:把.bpl所在的输出目录(比如C:\Devart\UniDAC\Output\Win32)加到系统环境变量PATH,然后重启IDE或启动程序。另一个更懒的办法是把.bpl复制到exe同级目录,但以后更新组件就要手动同步,不推荐。也可以用where unidac1030.bpl确认系统能否找到,找不到就重设PATH。如果你确认路径没错,再检查是否安装器把bpl写到了User Documents下而不是你的解压目录,这种情况我也见过,本质上还是路径线索断了。
5.4 现象:杀毒软件把安装工具当病毒隔离
现象:解压后杀毒软件报警,说Install.exe是木马,或者自动把安装器删了。
原因:安装工具为了免安装会做一些修改注册表、写环境变量的动作,这类行为容易被安全软件判定为“风险程序”。如果这个包是从非官方渠道得到的,也可能是真有问题,别大意。
解决:先做安全确认——查看文件数字签名(右键属性 > 数字签名),没有签名的文件确实要谨慎。确认可信后,在杀毒软件里恢复并加白,重新解压安装。我一般习惯把源码包的哈希值(SHA256)和官方公布的对一下,对不上就直接弃用,不值得为省事冒险。说到底,完整源码版就是为了透明,你可以先打开安装器的源码看它做了什么,再决定跑不跑。如果是自己手动编译,根本不需要那个安装器,也可以从源头避开杀毒误报。
5.5 现象:32位能跑,64位编译却一塌糊涂
现象:Win32编译运行正常,改成64位目标后链接报错,一大堆“无法解析的外部符号”(E2089或LNK错误)。
原因:你只编译了32位的UniDAC包,64位平台下没有对应的.dcu和.bpl,或者Library Path里只有32位的目录。
解决:回到第三章,用MSBuild把UniDAC_RUN.dproj按Win64目标再编一次。确保生成的.dcu和.bpl在64位输出目录中,然后把这个目录也加进IDE的Library Path(在Library界面里找到平台对应的分支)。另外,如果你用到了第三方数据库客户端库(如MySQL的libmysql.dll),也要下载64位版本,否则链接通过运行也会崩。我在调64位服务时还遇到过.dcu混放的问题——两个平台的.dcu都在同一个目录,编译时平台切换导致逻辑混乱,所以要尽量让Win32和Win64的输出目录分开放。
这五条是我经过最多血泪的点。你会发现它们大多不是UniDAC本身的bug,而是路径、平台、环境变量这些基础功课。源码版把这些问题暴露得更明显——要知道官方二进制版通常把这些包装在安装器里,你看不到细节。所以遇到问题时,先冷静判断是哪个环节断了,再用后面一章的方法去验证。
6. 进阶用法:把源码版变成自己的调试器和数据库行为改造工具
到了这一步,你已经能用UniDAC正常连库了,接下来才是完整源码版真正值回时间的地方。二进制版只能当黑匣子用,源码版可以单步进内部函数,甚至改默认行为重新编译。
6.1 给UniDAC源码断点:让F8直接进入内部函数
先确保你编译过Debug版的运行时包,并且IDE的Debug DCU Path里包含源码目录。打开Tools > Options > Debugger > Embarcadero Debuggers > Native OS Exceptions?更关键的是,在项目的Search Path里也加入源码目录。然后在你调用UniConnection1.Connect的代码处设置断点,单步进入。
{ 设置断点 } UniConnection1.Connect;按F7跟踪进去,会看到执行流从你的代码跳进UniDAC的TUniConnection.DoConnect,再往下是驱动层的ConnectToServer。我第一次看到它内部如何根据ProviderName查找驱动时,才真正明白UniDAC的架构。调试时建议给ServerErrorMessage设置条件断点,打印出错误码,比看外部异常信息高效得多。
6.2 改一处默认超时并重编译:源码版的价值兑现
举个例子,UniDAC默认的连接超时对某些慢网络环境不友好。你可以在源码里找到连接超时属性的默认值,比如ConnectTimeout,改成你想要的秒数,然后重新编译运行包。改动后需要重新编译.dpk并替换.bpl,具体步骤和第三章一样,但要注意版本号不变,避免其他项目缓存旧包。
// 修改前 property ConnectTimeout: Integer read FConnectTimeout write SetConnectTimeout default 0; // 修改后(设为10秒) property ConnectTimeout: Integer read FConnectTimeout write SetConnectTimeout default 10;不要小看这种改动,连接池的回收策略、SQLite的外键默认开关、驱动加载顺序,都可以在源码里定制。这等于把一个商业组件半开源地掌握在自己手里。我改过最多的是把连接超时的默认值从0(无限等待)设为10秒,避免内网断线时界面卡死。
6.3 验证安装是否成功的三个小技巧
最后分享三个我用来确认安装没白干的小技巧:
- 在组件面板搜索“Uni”,如果看到UniConnection、UniQuery、UniScript,说明设计期包安装成功。
- 新建一个空窗体,拖一个UniConnection,看它的属性面板是否存在ProviderName下拉列表且有多个驱动名,有就说明驱动注册完整。
- 写一行代码读版本,运行时不要报错且能输出版本号:
ShowMessage(UniConnection1.DriverVersion);如果这三个都过了,你的UniDAC 10.3.0源码版才算真正进了口袋。
最后说个我自己的教训:早期用UniDAC总觉得某些怪异行为是玄学,直到把源码版完整编译一遍、跟进去看源码后,才发现大半是路径配置和版本错位。现在每换一台电脑,我都会先手动编译一次并验证三条技巧,少走了很多弯路。希望帮到你。
本文还有配套的精品资源,点击获取